UNPKG

rxjs-firebase-simple

Version:
172 lines 7.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var firebase = require("firebase"); var rxfirebase = require("./index"); describe('RxJS Firebase Simple', function () { var ref, set, once, val; var equalTo, orderByChild, on; var path = '/test/path'; var promiseResolved; function _resolvePromise(val) { return new Promise(function (resolve, reject) { resolve(val); promiseResolved = true; }); } function subscribeAndExpect(obs$, fn) { expect(promiseResolved).toBe(false); setTimeout(function () { expect(promiseResolved).toBe(false); obs$.subscribe(function (res) { expect(promiseResolved).toBe(true); fn(res); }); }, 50); } beforeEach(function () { promiseResolved = false; on = jasmine.createSpy('on'); val = jasmine.createSpy('val'); set = jasmine.createSpy('set').and.callFake(function () { return _resolvePromise(); }); once = jasmine.createSpy('once').and.callFake(function () { return _resolvePromise({ val: val }); }); equalTo = jasmine.createSpy('equalTo').and.returnValue({ once: once }); orderByChild = jasmine.createSpy('orderByChild').and.returnValue({ equalTo: equalTo }); ref = jasmine.createSpy('ref').and.returnValue({ set: set, once: once, orderByChild: orderByChild, on: on }); spyOn(firebase, 'database').and.returnValue({ ref: ref }); }); afterEach(function () { expect(ref).toHaveBeenCalledWith(path); }); describe('#set$', function () { it('should set the value on firebase', function (done) { var data = 'test-data'; subscribeAndExpect(rxfirebase.set$(path, data), function (result) { expect(ref).toHaveBeenCalledWith(path); expect(set).toHaveBeenCalledWith(data); expect(result).toBe(data); done(); }); }); }); describe('#get$', function () { afterEach(function () { expect(once).toHaveBeenCalledWith('value'); }); it('should get the value from firebase', function (done) { var data = 'data'; val.and.returnValue(data); subscribeAndExpect(rxfirebase.get$(path), function (result) { expect(result).toBe(data); done(); }); }); it('should return a default value when no data is found', function (done) { var defaultVal = 'defaultValue'; val.and.returnValue(null); subscribeAndExpect(rxfirebase.get$(path, defaultVal), function (result) { expect(result).toBe(defaultVal); done(); }); }); it('should return null without a default value and no data is found', function (done) { val.and.returnValue(null); subscribeAndExpect(rxfirebase.get$(path), function (result) { expect(result).toBeNull(); done(); }); }); }); describe('#getChildrenByPath$', function () { var childPath = '/path/to/child'; var equalToValue = 'equalToVal'; afterEach(function () { expect(once).toHaveBeenCalledWith('value'); expect(orderByChild).toHaveBeenCalledWith(childPath); expect(equalTo).toHaveBeenCalledWith(equalToValue); }); it('should get an array of children at a given path', function (done) { var data = { id1: 'value1', id2: 'value1', id3: 'value1', }; val.and.returnValue(data); subscribeAndExpect(rxfirebase.getChildrenByPath$(path, childPath, equalToValue), function (result) { expect(result).toEqual(Object.values(data)); done(); }); }); it('should return a default value when no data is found', function (done) { var defaultVal = ['defaultValue']; val.and.returnValue(null); subscribeAndExpect(rxfirebase.getChildrenByPath$(path, childPath, equalToValue, defaultVal), function (result) { expect(result).toBe(defaultVal); done(); }); }); it('should return null without a default value and no data is found', function (done) { val.and.returnValue(null); subscribeAndExpect(rxfirebase.getChildrenByPath$(path, childPath, equalToValue), function (result) { expect(result).toBeNull(); done(); }); }); }); describe('#getByQuery$', function () { var childPath = '/path/to/child'; var equalToValue = 'equalToVal'; afterEach(function () { expect(once).toHaveBeenCalledWith('value'); }); it('should get a json of objects provided a custom query at a given path', function (done) { var data = { id1: 'value1', id2: 'value1', id3: 'value1', }; val.and.returnValue(data); subscribeAndExpect(rxfirebase.getByQuery$(path, (function (_ref) { return _ref.orderByChild(childPath).equalTo(equalToValue); })), function (result) { expect(result).toBe(data); done(); }); }); it('should return a default value when no data is found', function (done) { var defaultVal = { id: 'defaultValue' }; val.and.returnValue(null); subscribeAndExpect(rxfirebase.getByQuery$(path, (function (_ref) { return _ref.orderByChild(childPath).equalTo(equalToValue); }), defaultVal), function (result) { expect(result).toBe(defaultVal); done(); }); }); it('should return null without a default value and no data is found', function (done) { val.and.returnValue(null); subscribeAndExpect(rxfirebase.getByQuery$(path, (function (_ref) { return _ref.orderByChild(childPath).equalTo(equalToValue); })), function (result) { expect(result).toBeNull(); done(); }); }); }); describe('#listen$', function () { it('should listen for new values from firebase', function (done) { var value = ''; var isDone = false; var onValueFn = function (snapshot) { }; on.and.callFake(function (on, fn) { onValueFn = fn; }); rxfirebase.listen$(path).subscribe(function (result) { expect(result).toBe(value); if (isDone) done(); }); value = 'data'; onValueFn({ val: function () { return value; } }); value = 'data1'; onValueFn({ val: function () { return value; } }); value = 'data2'; isDone = true; onValueFn({ val: function () { return value; } }); }); }); }); //# sourceMappingURL=index.spec.js.map