Repository navigation
Expand file tree
/
Copy pathdocument.spec.ts
More file actions
102 lines (87 loc) · 3.62 KB
/
Copy pathdocument.spec.ts
File metadata and controls
102 lines (87 loc) · 3.62 KB
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
import { AngularFireModule, FirebaseApp } from '@angular/fire';
import { AngularFirestore, SETTINGS } from '../firestore';
import { AngularFirestoreModule } from '../firestore.module';
import { Subscription } from 'rxjs';
import { AngularFirestoreDocument } from './document';
import { DocumentReference } from '../interfaces';
import { take } from 'rxjs/operators';
import { TestBed } from '@angular/core/testing';
import { COMMON_CONFIG } from '../../test-config';
import { FAKE_STOCK_DATA, rando, randomName, Stock } from '../utils.spec';
import firebase from 'firebase/app';
import 'firebase/firestore';
describe('AngularFirestoreDocument', () => {
let app: FirebaseApp;
let afs: AngularFirestore;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
AngularFireModule.initializeApp(COMMON_CONFIG, rando()),
AngularFirestoreModule
],
providers: [
{ provide: SETTINGS, useValue: { host: 'localhost:8080', ssl: false } }
]
});
app = TestBed.inject(FirebaseApp);
afs = TestBed.inject(AngularFirestore);
});
afterEach(() => {
app.delete();
});
describe('valueChanges()', () => {
it('should get unwrapped snapshot', async (done: any) => {
const randomCollectionName = afs.firestore.collection('a').doc().id;
const ref = afs.firestore.doc(`${randomCollectionName}/FAKE`) as firebase.firestore.DocumentReference<Stock>;
const stock = new AngularFirestoreDocument(ref, afs);
await stock.set(FAKE_STOCK_DATA);
const obs$ = stock.valueChanges();
obs$.pipe(take(1)).subscribe(async data => {
expect(data).toEqual(FAKE_STOCK_DATA);
stock.delete().then(done).catch(done.fail);
});
});
/* TODO(jamesdaniels): test is flaking, look into this
it('should optionally map the doc ID to the emitted data object', async (done: any) => {
const randomCollectionName = afs.firestore.collection('a').doc().id;
const ref = afs.firestore.doc(`${randomCollectionName}/FAKE`);
const stock = new AngularFirestoreDocument<Stock>(ref, afs);
await stock.set(FAKE_STOCK_DATA);
const idField = 'myCustomID';
const obs$ = stock.valueChanges({ idField });
obs$.pipe(take(1)).subscribe(async data => {
expect(data[idField]).toBeDefined();
expect(data).toEqual(jasmine.objectContaining(FAKE_STOCK_DATA));
stock.delete().then(done).catch(done.fail);
});
});*/
});
describe('snapshotChanges()', () => {
it('should get action updates', async (done: any) => {
const randomCollectionName = randomName(afs.firestore);
const ref = afs.firestore.doc(`${randomCollectionName}/FAKE`) as DocumentReference<Stock>;
const stock = new AngularFirestoreDocument<Stock>(ref, afs);
await stock.set(FAKE_STOCK_DATA);
const sub = stock
.snapshotChanges()
.subscribe(async a => {
sub.unsubscribe();
if (a.payload.exists) {
expect(a.payload.data()).toEqual(FAKE_STOCK_DATA);
stock.delete().then(done).catch(done.fail);
}
});
});
it('should get unwrapped snapshot', async (done: any) => {
const randomCollectionName = afs.firestore.collection('a').doc().id;
const ref = afs.firestore.doc(`${randomCollectionName}/FAKE`) as DocumentReference<Stock>;
const stock = new AngularFirestoreDocument<Stock>(ref, afs);
await stock.set(FAKE_STOCK_DATA);
const obs$ = stock.valueChanges();
obs$.pipe(take(1)).subscribe(async data => {
expect(data).toEqual(FAKE_STOCK_DATA);
stock.delete().then(done).catch(done.fail);
});
});
});
});