rxjs-firebase-simple
Version:
A simple RxJS interface to firebase
172 lines • 7.22 kB
JavaScript
;
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