Skip to content

Commit b9bc5a0

Browse files
committed
Switch to compat instances.
1 parent 45d798e commit b9bc5a0

File tree

3 files changed

+36
-61
lines changed

3 files changed

+36
-61
lines changed

packages/rules-unit-testing/src/impl/test_environment.ts

Lines changed: 28 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,17 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { createMockUserToken } from '@firebase/util';
18+
import firebase from 'firebase/compat/app';
19+
import 'firebase/firestore/compat';
20+
import 'firebase/database/compat';
21+
import 'firebase/storage/compat';
1922

20-
// TODO: Change these imports to firebase/* once exp packages are moved into their places.
21-
import {
22-
connectDatabaseEmulator,
23-
Database,
24-
set,
25-
ref
26-
} from '@firebase/database/dist/exp';
27-
import {
28-
FirestoreSettings,
29-
Firestore,
30-
connectFirestoreEmulator
31-
} from '@firebase/firestore/dist/exp';
32-
import { connectStorageEmulator, FirebaseStorage } from '@firebase/storage/exp';
33-
34-
import { FirebaseApp } from '@firebase/app-types';
3523
import {
3624
HostAndPort,
3725
RulesTestContext,
3826
RulesTestEnvironment,
3927
TokenOptions
4028
} from '../public_types';
41-
import firebase from '@firebase/app-compat';
42-
import '@firebase/firestore/dist/compat/esm2017/firestore/index';
43-
import '@firebase/database/dist/compat/esm2017/index';
44-
import '@firebase/storage/dist/compat/esm2017/index';
4529

4630
import { DiscoveredEmulators } from './discovery';
4731

@@ -64,15 +48,11 @@ export class RulesTestEnvironmentImpl implements RulesTestEnvironment {
6448
tokenOptions?: TokenOptions
6549
): RulesTestContext {
6650
this.checkNotDestroyed();
67-
const token = createMockUserToken(
68-
{
69-
...tokenOptions,
70-
sub: user_id,
71-
user_id: user_id
72-
},
73-
this.projectId
74-
);
75-
return this.createContext(token);
51+
return this.createContext({
52+
...tokenOptions,
53+
sub: user_id,
54+
user_id: user_id
55+
});
7656
}
7757

7858
unauthenticatedContext(): RulesTestContext {
@@ -101,7 +81,9 @@ export class RulesTestEnvironmentImpl implements RulesTestEnvironment {
10181
}
10282
}
10383

104-
private createContext(authToken: string | undefined): RulesTestContextImpl {
84+
private createContext(
85+
authToken: string | firebase.EmulatorMockTokenOptions | undefined
86+
): RulesTestContextImpl {
10587
const context = new RulesTestContextImpl(
10688
this.projectId,
10789
this.emulators,
@@ -114,7 +96,7 @@ export class RulesTestEnvironmentImpl implements RulesTestEnvironment {
11496
clearDatabase(): Promise<void> {
11597
this.checkNotDestroyed();
11698
return this.withSecurityRulesDisabled(context => {
117-
return set(ref(context.database(), '/'), null);
99+
return context.database().ref('/').set(null);
118100
});
119101
}
120102

@@ -153,14 +135,14 @@ export class RulesTestEnvironmentImpl implements RulesTestEnvironment {
153135
* @private
154136
*/
155137
class RulesTestContextImpl implements RulesTestContext {
156-
private app?: FirebaseApp;
138+
private app?: firebase.app.App;
157139
private destroyed = false;
158140
envDestroyed = false;
159141

160142
constructor(
161143
readonly projectId: string,
162144
readonly emulators: DiscoveredEmulators,
163-
readonly authToken: string | undefined
145+
readonly authToken: firebase.EmulatorMockTokenOptions | string | undefined
164146
) {}
165147

166148
cleanup() {
@@ -170,49 +152,43 @@ class RulesTestContextImpl implements RulesTestContext {
170152
this.app = undefined;
171153
}
172154

173-
firestore(settings?: FirestoreSettings): Firestore {
155+
firestore(
156+
settings?: firebase.firestore.Settings
157+
): firebase.firestore.Firestore {
174158
assertEmulatorRunning(this.emulators, 'firestore');
175-
const firestoreCompat = this.getApp().firestore!();
159+
const firestore = this.getApp().firestore();
176160
if (settings) {
177-
firestoreCompat.settings(settings);
161+
firestore.settings(settings);
178162
}
179-
const firestore = firestoreCompat as unknown as Firestore;
180-
connectFirestoreEmulator(
181-
firestore,
163+
firestore.useEmulator(
182164
this.emulators.firestore.host,
183165
this.emulators.firestore.port,
184166
{ mockUserToken: this.authToken }
185167
);
186168
return firestore;
187169
}
188-
database(databaseURL?: string): Database {
170+
database(databaseURL?: string): firebase.database.Database {
189171
assertEmulatorRunning(this.emulators, 'database');
190-
const database = this.getApp().database!(
191-
databaseURL
192-
) as unknown as Database;
193-
connectDatabaseEmulator(
194-
database,
172+
const database = this.getApp().database(databaseURL);
173+
database.useEmulator(
195174
this.emulators.database.host,
196175
this.emulators.database.port,
197176
{ mockUserToken: this.authToken }
198177
);
199178
return database;
200179
}
201-
storage(bucketUrl?: string): FirebaseStorage {
180+
storage(bucketUrl?: string): firebase.storage.Storage {
202181
assertEmulatorRunning(this.emulators, 'storage');
203-
const storage = this.getApp().storage!(
204-
bucketUrl
205-
) as unknown as FirebaseStorage;
206-
connectStorageEmulator(
207-
storage,
182+
const storage = this.getApp().storage(bucketUrl);
183+
storage.useEmulator(
208184
this.emulators.storage.host,
209185
this.emulators.storage.port,
210186
{ mockUserToken: this.authToken }
211187
);
212188
return storage;
213189
}
214190

215-
private getApp(): FirebaseApp {
191+
private getApp(): firebase.app.App {
216192
if (this.envDestroyed) {
217193
throw new Error(
218194
'This RulesTestContext is no longer valid because its RulesTestEnvironment has been ' +

packages/rules-unit-testing/src/public_types/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@
1616
*/
1717

1818
import { FirebaseSignInProvider } from '@firebase/util';
19-
import { Firestore, FirestoreSettings } from '@firebase/firestore/exp';
20-
import { Database } from '@firebase/database/exp';
21-
import { FirebaseStorage } from '@firebase/storage/exp';
19+
import firebase from 'firebase/compat/app';
2220

2321
/**
2422
* More options for the mock user token to be used for testing, including developer-specfied custom
@@ -251,7 +249,9 @@ export interface RulesTestContext {
251249
* @returns a Firestore instance configured to connect to the emulator
252250
* @public
253251
*/
254-
firestore(settings?: FirestoreSettings): Firestore;
252+
firestore(
253+
settings?: firebase.firestore.Settings
254+
): firebase.firestore.Firestore;
255255

256256
/**
257257
* Get a Firestore instance for this test context. The returned Firebase JS Client SDK instance
@@ -263,7 +263,7 @@ export interface RulesTestContext {
263263
* @returns a Database instance configured to connect to the emulator. It never connects to
264264
* production even if a production databaseURL is specified
265265
*/
266-
database(databaseURL?: string): Database;
266+
database(databaseURL?: string): firebase.database.Database;
267267

268268
/**
269269
* Get a Storage instance for this test context. The returned Firebase JS Client SDK instance
@@ -274,5 +274,5 @@ export interface RulesTestContext {
274274
* returns a Storage instance for an emulated version of the bucket name
275275
* @returns a Storage instance configured to connect to the emulator
276276
*/
277-
storage(bucketUrl?: string): FirebaseStorage;
277+
storage(bucketUrl?: string): firebase.storage.Storage;
278278
}

packages/rules-unit-testing/src/util.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,8 @@ export function assertFails(pr: Promise<any>): Promise<any> {
7777
);
7878
},
7979
(err: any) => {
80-
const errCode = (err && err.code && err.code.toLowerCase()) || '';
81-
const errMessage =
82-
(err && err.message && err.message.toLowerCase()) || '';
80+
const errCode = err?.code?.toLowerCase() || '';
81+
const errMessage = err?.message?.toLowerCase() || '';
8382
const isPermissionDenied =
8483
errCode === 'permission-denied' ||
8584
errCode === 'permission_denied' ||

0 commit comments

Comments
 (0)