-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
Copy pathfirebase_object_observable.spec.ts
133 lines (102 loc) · 3.69 KB
/
firebase_object_observable.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import { TestBed, inject } from '@angular/core/testing';
import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2';
import { COMMON_CONFIG } from './test-config';
import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseObjectObservable } from 'angularfire2/database-deprecated';
import { Observer } from 'rxjs';
import { map } from 'rxjs/operators';
import { Reference } from './interfaces';
describe('FirebaseObjectObservable', () => {
let O: FirebaseObjectObservable<any>;
let ref: Reference;
let app: FirebaseApp;
let db: AngularFireDatabase;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
AngularFireModule.initializeApp(COMMON_CONFIG),
AngularFireDatabaseModule
]
});
inject([FirebaseApp, AngularFireDatabase], (_app: FirebaseApp, _db: AngularFireDatabase) => {
app = _app;
db = _db;
ref = app.database().ref();
O = new FirebaseObjectObservable((observer: Observer<any>) => {
}, ref);
})();
});
afterEach(done => {
ref.off();
ref.remove();
app.delete().then(done, done.fail);
});
it('should return an instance of FirebaseObservable when calling operators', () => {
let O = new FirebaseObjectObservable((observer: Observer<any>) => { });
expect(map.call(O, noop) instanceof FirebaseObjectObservable).toBe(true);
});
describe('$ref', () => {
it('should match the database path passed in the constructor', () => {
expect(O.$ref!.toString()).toEqual(ref.toString());
});
});
describe('set', () => {
it('should call set on the underlying ref', (done: any) => {
let setSpy = spyOn(ref, 'set');
O.subscribe();
O.set(1);
expect(setSpy).toHaveBeenCalledWith(1);
done();
});
it('should throw an exception if set when not subscribed', () => {
O = new FirebaseObjectObservable((observer: Observer<any>) => { });
expect(() => {
O.set('foo');
}).toThrowError('No ref specified for this Observable!')
});
it('should accept any type of value without compilation error', () => {
O.set('foo');
});
it('should resolve returned thenable when successful', (done: any) => {
O.set('foo').then(done, done.fail);
});
});
describe('update', () => {
const updateObject = { hot: 'firebae' };
it('should call update on the underlying ref', () => {
let updateSpy = spyOn(ref, 'update');
O.subscribe();
O.update(updateObject);
expect(updateSpy).toHaveBeenCalledWith(updateObject);
});
it('should throw an exception if updated when not subscribed', () => {
O = new FirebaseObjectObservable((observer: Observer<any>) => { });
expect(() => {
O.update(updateObject);
}).toThrowError('No ref specified for this Observable!')
});
it('should accept any type of value without compilation error', () => {
O.update(updateObject);
});
it('should resolve returned thenable when successful', (done: any) => {
O.update(updateObject).then(done, done.fail);
});
});
describe('remove', () => {
it('should call remove on the underlying ref', () => {
let removeSpy = spyOn(ref, 'remove');
O.subscribe();
O.remove();
expect(removeSpy).toHaveBeenCalledWith();
});
it('should throw an exception if removed when not subscribed', () => {
O = new FirebaseObjectObservable((observer: Observer<any>) => { });
expect(() => {
O.remove();
}).toThrowError('No ref specified for this Observable!')
});
it('should resolve returned thenable when successful', (done: any) => {
O.remove().then(done, done.fail);
});
});
});
function noop() { }