Skip to content

Commit 349756e

Browse files
committed
Getting emulators wired up
2 parents aa8550a + ce7412c commit 349756e

27 files changed

+264
-156
lines changed

.firebaserc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"projects": {
3+
"default": "angularfire2-test"
4+
}
5+
}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ package-lock.json
1717
test/ng-build/**/yarn.lock
1818
tools/build.js
1919
coverage
20+
*.log

firebase.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"database": {
3+
"rules": "test/database.rules.json"
4+
},
5+
"firestore": {
6+
"rules": "test/firestore.rules",
7+
"indexes": "test/firestore.indexes.json"
8+
},
9+
"storage": {
10+
"rules": "test/storage.rules"
11+
}
12+
}

package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
"description": "The official library of Firebase and Angular.",
55
"private": true,
66
"scripts": {
7-
"test": "npx ng test",
8-
"test:headless": "npx ng test --watch=false --browsers=ChromeHeadless",
7+
"test": "npm run test:node",
8+
"test:chrome": "npx firebase emulators:exec --project=angularfire2-test \"npx ng test --watch=false --browsers=Chrome\"",
9+
"test:chrome-headless": "npx firebase emulators:exec --project=angularfire2-test \"npx ng test --watch=false --browsers=ChromeHeadless\"",
910
"lint": "npx ng lint",
10-
"test:node": "npx tsc -p tsconfig.jasmine.json && node -r tsconfig-paths/register ./tools/jasmine.js",
11+
"test:node": "npx tsc -p tsconfig.jasmine.json; cp ./dist/packages-dist/schematics/versions.json ./dist/out-tsc/jasmine/schematics && npx firebase emulators:exec --project=angularfire2-test \"node -r tsconfig-paths/register ./tools/jasmine.js\"",
1112
"test:typings": "node ./tools/run-typings-test.js",
1213
"test:build": "bash ./test/ng-build/build.sh",
1314
"test:universal": "cp -R dist/packages-dist test/universal-test/node_modules/angularfire2 && cd test/universal-test && npm run prerender",
14-
"test:all": "npm run test:headless && npm run test:node && npm run test:typings && npm run test:build",
15+
"test:all": "npm run test:node && npm run test:chrome-headless && npm run test:typings && npm run test:build",
1516
"build": "tsc tools/build.ts; node ./tools/build.js",
1617
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 1"
1718
},
@@ -68,6 +69,7 @@
6869
"@types/gzip-size": "^5.1.1",
6970
"@types/inquirer": "^0.0.44",
7071
"@types/jasmine": "^3.3.13",
72+
"@types/node": "^12.6.2",
7173
"@types/request": "0.0.30",
7274
"codelyzer": "^5.0.0",
7375
"concurrently": "^2.2.0",

src/auth/auth.spec.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ describe('AngularFireAuth', () => {
8383

8484
it('should have an initialized Firebase app', () => {
8585
expect(afAuth.auth.app).toBeDefined();
86-
expect(<any>afAuth.auth.app).toEqual(app);
8786
});
8887

8988
it('should emit auth updates through authState', (done: any) => {
@@ -159,7 +158,6 @@ describe('AngularFireAuth with different app', () => {
159158

160159
it('should have an initialized Firebase app', () => {
161160
expect(afAuth.auth.app).toBeDefined();
162-
expect(<any>afAuth.auth.app).toEqual(app);
163161
});
164162

165163
it('should have an initialized Firebase app instance member', () => {

src/core/angularfire2.spec.ts

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,34 +42,41 @@ describe('angularfire', () => {
4242
});
4343

4444
describe('FirebaseApp', () => {
45+
4546
it('should provide a FirebaseApp for the FirebaseApp binding', () => {
4647
expect(typeof app.delete).toBe('function');
4748
});
48-
it('should have the provided name', () => {
49-
expect(app.name).toBe(APP_NAME);
50-
})
51-
it('should use an already intialized firebase app if it exists', done => {
52-
@NgModule({
53-
imports: [
54-
AngularFireModule.initializeApp(COMMON_CONFIG, APP_NAME),
55-
BrowserModule
56-
]})
57-
class MyModule {
58-
ngDoBootstrap() {}
59-
}
6049

61-
const compilerFactory: CompilerFactory =
62-
defaultPlatform.injector.get(CompilerFactory, null);
63-
const moduleFactory = compilerFactory.createCompiler().compileModuleSync(MyModule);
50+
if (typeof window !== 'undefined') {
51+
52+
it('should have the provided name', () => {
53+
expect(app.name).toBe(APP_NAME);
54+
});
55+
56+
it('should use an already intialized firebase app if it exists', done => {
57+
@NgModule({
58+
imports: [
59+
AngularFireModule.initializeApp(COMMON_CONFIG, APP_NAME),
60+
BrowserModule
61+
]})
62+
class MyModule {
63+
ngDoBootstrap() {}
64+
}
6465

65-
defaultPlatform.bootstrapModuleFactory(moduleFactory)
66-
.then(moduleRef => {
67-
const ref = moduleRef.injector.get(FirebaseApp);
68-
expect(ref.name).toEqual(app.name);
69-
}).then(done, e => {
70-
fail(e);
71-
done()
72-
});
73-
})
66+
const compilerFactory: CompilerFactory =
67+
defaultPlatform.injector.get(CompilerFactory, null);
68+
const moduleFactory = compilerFactory.createCompiler().compileModuleSync(MyModule);
69+
70+
defaultPlatform.bootstrapModuleFactory(moduleFactory)
71+
.then(moduleRef => {
72+
const ref = moduleRef.injector.get(FirebaseApp);
73+
expect(ref.name).toEqual(app.name);
74+
}).then(done, e => {
75+
fail(e);
76+
done()
77+
});
78+
})
79+
80+
}
7481
});
7582
});

src/database/database.spec.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ describe('AngularFireDatabase', () => {
1717
imports: [
1818
AngularFireModule.initializeApp(COMMON_CONFIG, APP_NAME),
1919
AngularFireDatabaseModule
20+
],
21+
providers: [
22+
{ provide: URL, useValue: 'http://localhost:9000?ns=angularfire2-test'}
2023
]
2124
});
2225
inject([FirebaseApp, AngularFireDatabase, NgZone], (app_: FirebaseApp, _db: AngularFireDatabase, _zone: NgZone) => {
@@ -38,7 +41,6 @@ describe('AngularFireDatabase', () => {
3841

3942
it('should have an initialized Firebase app', () => {
4043
expect(db.database.app).toBeDefined();
41-
expect(<any>db.database.app).toEqual(app);
4244
});
4345

4446
it('should accept a Firebase App in the constructor', () => {
@@ -92,7 +94,6 @@ describe('AngularFireDatabase w/options', () => {
9294

9395
it('should have an initialized Firebase app', () => {
9496
expect(db.database.app).toBeDefined();
95-
expect(<any>db.database.app).toEqual(app);
9697
});
9798

9899
it('should have an initialized Firebase app instance member', () => {

src/database/list/audit-trail.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DatabaseReference } from '../interfaces';
22
import { FirebaseApp, AngularFireModule } from '@angular/fire';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, auditTrail, ChildEvent } from '@angular/fire/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, auditTrail, ChildEvent, URL } from '@angular/fire/database';
44
import { TestBed, inject } from '@angular/core/testing';
55
import { COMMON_CONFIG } from '../../test-config';
66
import { skip } from 'rxjs/operators';
@@ -27,6 +27,9 @@ describe('auditTrail', () => {
2727
imports: [
2828
AngularFireModule.initializeApp(COMMON_CONFIG, FIREBASE_APP_NAME),
2929
AngularFireDatabaseModule
30+
],
31+
providers: [
32+
{ provide: URL, useValue: 'http://localhost:9000?ns=angularfire2-test'}
3033
]
3134
});
3235
inject([FirebaseApp, AngularFireDatabase], (app_: FirebaseApp, _db: AngularFireDatabase) => {

src/database/list/changes.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { database } from 'firebase/app';
22
import { FirebaseApp, AngularFireModule } from '@angular/fire';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, listChanges } from '@angular/fire/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, listChanges, URL } from '@angular/fire/database';
44
import { TestBed, inject } from '@angular/core/testing';
55
import { COMMON_CONFIG } from '../../test-config';
66
import { skip, take } from 'rxjs/operators';
@@ -27,6 +27,9 @@ describe('listChanges', () => {
2727
imports: [
2828
AngularFireModule.initializeApp(COMMON_CONFIG, FIREBASE_APP_NAME),
2929
AngularFireDatabaseModule
30+
],
31+
providers: [
32+
{ provide: URL, useValue: 'http://localhost:9000?ns=angularfire2-test'}
3033
]
3134
});
3235
inject([FirebaseApp, AngularFireDatabase], (app_: FirebaseApp, _db: AngularFireDatabase) => {

src/database/list/snapshot-changes.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { database } from 'firebase/app';
22
import { FirebaseApp, AngularFireModule } from '@angular/fire';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, snapshotChanges, ChildEvent } from '@angular/fire/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, snapshotChanges, ChildEvent, URL } from '@angular/fire/database';
44
import { TestBed, inject } from '@angular/core/testing';
55
import { COMMON_CONFIG } from '../../test-config';
66
import { BehaviorSubject } from 'rxjs';
@@ -28,6 +28,9 @@ describe('snapshotChanges', () => {
2828
imports: [
2929
AngularFireModule.initializeApp(COMMON_CONFIG, FIREBASE_APP_NAME),
3030
AngularFireDatabaseModule
31+
],
32+
providers: [
33+
{ provide: URL, useValue: 'http://localhost:9000?ns=angularfire2-test'}
3134
]
3235
});
3336
inject([FirebaseApp, AngularFireDatabase], (app_: FirebaseApp, _db: AngularFireDatabase) => {

src/database/list/state-changes.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { database } from 'firebase/app';
22
import { FirebaseApp, AngularFireModule } from '@angular/fire';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, stateChanges, ChildEvent } from '@angular/fire/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, stateChanges, ChildEvent, URL } from '@angular/fire/database';
44
import { TestBed, inject } from '@angular/core/testing';
55
import { COMMON_CONFIG } from '../../test-config';
66
import { skip } from 'rxjs/operators';
@@ -27,6 +27,9 @@ describe('stateChanges', () => {
2727
imports: [
2828
AngularFireModule.initializeApp(COMMON_CONFIG, FIREBASE_APP_NAME),
2929
AngularFireDatabaseModule
30+
],
31+
providers: [
32+
{ provide: URL, useValue: 'http://localhost:9000?ns=angularfire2-test'}
3033
]
3134
});
3235
inject([FirebaseApp, AngularFireDatabase], (app_: FirebaseApp, _db: AngularFireDatabase) => {

src/database/observable/fromRef.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { DatabaseReference } from '../interfaces';
22
import { FirebaseApp, AngularFireModule } from '@angular/fire';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, fromRef } from '@angular/fire/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, fromRef, URL } from '@angular/fire/database';
44
import { TestBed, inject } from '@angular/core/testing';
55
import { COMMON_CONFIG } from '../../test-config';
66
import { take } from 'rxjs/operators';
@@ -26,6 +26,9 @@ describe('fromRef', () => {
2626
imports: [
2727
AngularFireModule.initializeApp(COMMON_CONFIG, FIREBASE_APP_NAME),
2828
AngularFireDatabaseModule
29+
],
30+
providers: [
31+
{ provide: URL, useValue: 'http://localhost:9000?ns=angularfire2-test'}
2932
]
3033
});
3134
inject([FirebaseApp], (app_: FirebaseApp) => {

src/firestore/collection-group/collection-group.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { FirebaseApp, AngularFireModule } from '@angular/fire';
2-
import { AngularFirestore } from '../firestore';
2+
import { AngularFirestore, SETTINGS } from '../firestore';
33
import { AngularFirestoreModule } from '../firestore.module';
44
import { AngularFirestoreDocument } from '../document/document';
55
import { AngularFirestoreCollectionGroup } from './collection-group';
@@ -33,6 +33,9 @@ describe('AngularFirestoreCollectionGroup', () => {
3333
imports: [
3434
AngularFireModule.initializeApp(FIRESTORE_CONFIG),
3535
AngularFirestoreModule.enablePersistence({synchronizeTabs:true})
36+
],
37+
providers: [
38+
{ provide: SETTINGS, useValue: { host: 'localhost:8080', ssl: false } }
3639
]
3740
});
3841
inject([FirebaseApp, AngularFirestore], (_app: FirebaseApp, _afs: AngularFirestore) => {

src/firestore/collection/collection.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { FirebaseApp, AngularFireModule } from '@angular/fire';
2-
import { AngularFirestore } from '../firestore';
2+
import { AngularFirestore, SETTINGS } from '../firestore';
33
import { AngularFirestoreModule } from '../firestore.module';
44
import { AngularFirestoreCollection } from './collection';
55
import { QueryFn } from '../interfaces';
@@ -30,6 +30,9 @@ describe('AngularFirestoreCollection', () => {
3030
imports: [
3131
AngularFireModule.initializeApp(FIRESTORE_CONFIG),
3232
AngularFirestoreModule.enablePersistence({synchronizeTabs: true})
33+
],
34+
providers: [
35+
{ provide: SETTINGS, useValue: { host: 'localhost:8080', ssl: false } }
3336
]
3437
});
3538
inject([FirebaseApp, AngularFirestore], (_app: FirebaseApp, _afs: AngularFirestore) => {

src/firestore/document/document.spec.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { FirebaseApp, AngularFireModule } from '@angular/fire';
2-
import { AngularFirestore } from '../firestore';
2+
import { AngularFirestore, SETTINGS } from '../firestore';
33
import { AngularFirestoreModule } from '../firestore.module';
44
import { AngularFirestoreDocument } from '../document/document';
55
import { Observable, Subscription } from 'rxjs';
@@ -20,6 +20,9 @@ describe('AngularFirestoreDocument', () => {
2020
imports: [
2121
AngularFireModule.initializeApp(FIRESTORE_CONFIG),
2222
AngularFirestoreModule.enablePersistence({synchronizeTabs: true})
23+
],
24+
providers: [
25+
{ provide: SETTINGS, useValue: { host: 'localhost:8080', ssl: false } }
2326
]
2427
});
2528
inject([FirebaseApp, AngularFirestore], (_app: FirebaseApp, _afs: AngularFirestore) => {

src/firestore/firestore.spec.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { FirebaseApp, FIREBASE_OPTIONS, AngularFireModule, FIREBASE_APP_NAME } from '@angular/fire';
2-
import { AngularFirestore } from './firestore';
2+
import { AngularFirestore, SETTINGS } from './firestore';
33
import { AngularFirestoreModule } from './firestore.module';
44
import { AngularFirestoreDocument } from './document/document';
55
import { AngularFirestoreCollection } from './collection/collection';
@@ -24,6 +24,9 @@ describe('AngularFirestore', () => {
2424
imports: [
2525
AngularFireModule.initializeApp(FIRESTORE_CONFIG),
2626
AngularFirestoreModule.enablePersistence({synchronizeTabs: true})
27+
],
28+
providers: [
29+
{ provide: SETTINGS, useValue: { host: 'localhost:8080', ssl: false } }
2730
]
2831
});
2932
inject([FirebaseApp, AngularFirestore], (_app: FirebaseApp, _afs: AngularFirestore) => {
@@ -44,7 +47,6 @@ describe('AngularFirestore', () => {
4447

4548
it('should have an initialized Firebase app', () => {
4649
expect(afs.firestore.app).toBeDefined();
47-
expect(<any>afs.firestore.app).toEqual(app);
4850
});
4951

5052
it('should create an AngularFirestoreDocument from a string path', () => {
@@ -83,12 +85,25 @@ describe('AngularFirestore', () => {
8385
expect(quadWrapper).toThrowError();
8486
});
8587

86-
it('should enable persistence', (done) => {
87-
const sub = afs.persistenceEnabled$.subscribe(isEnabled => {
88-
expect(isEnabled).toBe(true);
89-
done();
88+
if (typeof window == 'undefined') {
89+
90+
it('should not enable persistence (Node.js)', (done) => {
91+
const sub = afs.persistenceEnabled$.subscribe(isEnabled => {
92+
expect(isEnabled).toBe(false);
93+
done();
94+
});
9095
});
91-
});
96+
97+
} else {
98+
99+
it('should enable persistence', (done) => {
100+
const sub = afs.persistenceEnabled$.subscribe(isEnabled => {
101+
expect(isEnabled).toBe(true);
102+
done();
103+
});
104+
});
105+
106+
}
92107

93108
});
94109

@@ -128,7 +143,6 @@ describe('AngularFirestore with different app', () => {
128143

129144
it('should have an initialized Firebase app', () => {
130145
expect(afs.firestore.app).toBeDefined();
131-
expect(<any>afs.firestore.app).toEqual(app);
132146
});
133147

134148
it('should have an initialized Firebase app instance member', () => {

src/schematics/ng-add.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { from } from 'rxjs';
66
import { map, switchMap } from 'rxjs/operators';
77
import { Project } from './interfaces';
88
import { listProjects, projectPrompt } from './utils';
9-
import requiredDependencies from './versions';
9+
import requiredDependencies from './versions.json';
1010

1111
const stringifyFormatted = (obj: any) => JSON.stringify(obj, null, 2);
1212

src/schematics/versions.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"default": {
3+
"firebase": { "version": "0.0.0" },
4+
"@angular-devkit/architect": { "dev": true, "version": "0.0.0" },
5+
"firebase-tools": { "dev": true, "version": "0.0.0" },
6+
"fuzzy": { "dev": true, "version": "0.0.0"},
7+
"inquirer": { "dev": true, "version": "0.0.0"},
8+
"inquirer-autocomplete-prompt": { "dev": true, "version": "0.0.0"}
9+
}
10+
}

src/schematics/versions.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)