mirror of
https://github.com/hanzoai/firebase-js-sdk.git
synced 2026-09-24 16:59:10 +00:00
87 lines
2.9 KiB
TypeScript
87 lines
2.9 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import { deleteApp } from '@firebase/app';
|
|
import { expect, use } from 'chai';
|
|
import chaiAsPromised from 'chai-as-promised';
|
|
|
|
import { User } from '../../../src/auth/user';
|
|
import { SimpleDb } from '../../../src/local/simple_db';
|
|
import {
|
|
clearIndexedDbPersistence,
|
|
disableNetwork,
|
|
doc,
|
|
setDoc,
|
|
waitForPendingWrites
|
|
} from '../util/firebase_export';
|
|
import { apiDescribe, withTestDoc } from '../util/helpers';
|
|
import { withMockCredentialProviderTestDb } from '../util/internal_helpers';
|
|
|
|
use(chaiAsPromised);
|
|
|
|
apiDescribe('Database (with internal API)', persistence => {
|
|
// eslint-disable-next-line no-restricted-properties
|
|
(persistence.storage === 'indexeddb' ? it : it.skip)(
|
|
'will reject the promise if clear persistence fails',
|
|
async () => {
|
|
await withTestDoc(persistence, async (docRef, firestore) => {
|
|
const oldDelete = SimpleDb.delete;
|
|
try {
|
|
SimpleDb.delete = (name: string): Promise<void> => {
|
|
return Promise.reject('Failed to delete the database.');
|
|
};
|
|
await deleteApp(firestore.app);
|
|
await expect(
|
|
clearIndexedDbPersistence(firestore)
|
|
).to.eventually.be.rejectedWith('Failed to delete the database.');
|
|
} finally {
|
|
SimpleDb.delete = oldDelete;
|
|
}
|
|
});
|
|
}
|
|
);
|
|
|
|
it('waiting for pending writes should fail when user changes', async () => {
|
|
await withMockCredentialProviderTestDb(
|
|
persistence,
|
|
async (db, mockCredentialsProvider) => {
|
|
// Prevent pending writes receiving acknowledgement.
|
|
await disableNetwork(db);
|
|
void setDoc(doc(db, 'abc/123'), { foo: 'bar' });
|
|
const awaitPendingWrite = waitForPendingWrites(db);
|
|
|
|
mockCredentialsProvider.triggerUserChange(new User('user_1'));
|
|
|
|
await expect(awaitPendingWrite).to.be.eventually.rejectedWith(
|
|
"'waitForPendingWrites' promise is rejected due to a user change."
|
|
);
|
|
}
|
|
);
|
|
});
|
|
|
|
it('app delete leads to instance termination', async () => {
|
|
await withTestDoc(persistence, async docRef => {
|
|
await setDoc(docRef, { foo: 'bar' });
|
|
const app = docRef.firestore.app;
|
|
await deleteApp(app);
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
expect((docRef.firestore as any)._terminated).to.be.true;
|
|
});
|
|
});
|
|
});
|