1
1
import { FirebaseApp , FirebaseAppConfig , AngularFireModule } from 'angularfire2' ;
2
- import { AngularFirestore , AngularFirestoreModule } from 'angularfire2/firestore' ;
2
+ import { AngularFirestore , AngularFirestoreModule , AngularFirestoreDocument , AngularFirestoreCollection } from 'angularfire2/firestore' ;
3
3
import * as firebase from 'firebase/app' ;
4
+ import * as firestore from 'firestore' ;
5
+ import { Observable } from 'rxjs/Observable' ;
6
+ import { Subscription } from 'rxjs/Subscription' ;
4
7
5
8
import { TestBed , inject } from '@angular/core/testing' ;
6
9
import { COMMON_CONFIG } from './test-config' ;
7
10
8
- fdescribe ( 'AngularFirestore' , ( ) => {
11
+ interface Stock {
12
+ name : string ;
13
+ price : number ;
14
+ }
15
+
16
+ const FAKE_STOCK_DATA = { name : 'FAKE' , price : 1 } ;
17
+
18
+ fdescribe ( 'Firestore' , ( ) => {
9
19
let app : firebase . app . App ;
10
20
let afs : AngularFirestore ;
11
-
21
+ let stock : AngularFirestoreDocument < Stock > ;
22
+ let sub : Subscription ;
23
+
12
24
beforeEach ( ( ) => {
13
25
TestBed . configureTestingModule ( {
14
26
imports : [
@@ -19,22 +31,67 @@ fdescribe('AngularFirestore', () => {
19
31
inject ( [ FirebaseApp , AngularFirestore ] , ( _app : firebase . app . App , _afs : AngularFirestore ) => {
20
32
app = _app ;
21
33
afs = _afs ;
34
+ stock = afs . doc ( 'stocks/FAKE' ) ;
22
35
} ) ( ) ;
23
36
} ) ;
24
37
25
- afterEach ( done => {
26
- app . delete ( ) . then ( done , done . fail ) ;
27
- // ref.off();
28
- // ref.remove(done);
38
+ afterEach ( async ( done ) => {
39
+ await app . delete ( ) ;
40
+ //await stock.delete();
41
+ if ( sub ) {
42
+ sub . unsubscribe ( ) ;
43
+ }
44
+ done ( ) ;
29
45
} ) ;
30
46
31
47
describe ( 'AngularFirestore' , ( ) => {
32
48
33
- // document
49
+ it ( 'should be the properly initialized type' , ( ) => {
50
+ expect ( afs instanceof AngularFirestore ) . toBe ( true ) ;
51
+ } ) ;
52
+
34
53
it ( 'should have an initialized Firebase app' , ( ) => {
35
54
expect ( afs . app ) . toBeDefined ( ) ;
36
55
} ) ;
37
56
57
+ describe ( 'AngularFirestore#document' , ( ) => {
58
+
59
+ it ( 'should throw on an invalid path' , ( ) => {
60
+ const singleWrapper = ( ) => afs . doc ( 'collection' ) ;
61
+ const tripleWrapper = ( ) => afs . doc ( 'collection/doc/subcollection' ) ;
62
+ expect ( singleWrapper ) . toThrowError ( ) ;
63
+ expect ( tripleWrapper ) . toThrowError ( ) ;
64
+ } ) ;
65
+
66
+ it ( 'should get data as an Observable' , async ( done : any ) => {
67
+ //await stock.set(FAKE_STOCK_DATA);
68
+ const obs$ = Observable . from ( stock ) ;
69
+ obs$ . catch ( e => { console . log ( e ) ; return e ; } )
70
+ . take ( 1 ) // this will unsubscribe after the first
71
+ . subscribe ( async ( data : Stock ) => {
72
+ debugger ;
73
+ expect ( JSON . stringify ( data ) ) . toBe ( JSON . stringify ( FAKE_STOCK_DATA ) ) ;
74
+ stock . delete ( ) . then ( done ) . catch ( done . fail ) ;
75
+ } ) ;
76
+ } ) ;
77
+
78
+ it ( 'should get realtime updates' , async ( done : Function ) => {
79
+ // pick a new stock
80
+ //await stock.set(FAKE_STOCK_DATA);
81
+ sub = stock
82
+ . valueChanges ( )
83
+ . subscribe ( async a => {
84
+ debugger ;
85
+ if ( a . exists ) {
86
+ expect ( a . data ( ) ) . toEqual ( FAKE_STOCK_DATA ) ;
87
+ await stock . delete ( ) ;
88
+ done ( ) ;
89
+ }
90
+ } ) ;
91
+ } ) ;
92
+
93
+ } ) ;
94
+
38
95
} ) ;
39
96
40
97
} ) ;
0 commit comments