mirror of
https://github.com/hanzoai/firebase-js-sdk.git
synced 2026-09-24 16:59:10 +00:00
* Split storage and storage-compat (#5271) * separate storage-compat from storage * commit * fix tests * wat? * build storage-compat * save * fixing some compat tests * format * update import path * format * get compat tests to work * format * update package json * cleanup * format * address comments * Update packages/storage-compat/test/unit/service.test.ts Co-authored-by: Christina Holland <[email protected]> * add missing dev dep * Update packages/storage-compat/package.json * Update packages/storage-compat/package.json * Update deps after v8 release * update compat version * Split database and database-compat (#5276) * compile database * pass database tests * compile and test database-compat * pass all tests * prettier * cleanup * fix lint * address comments * what is going on with ci * use correct case in import path * uppercase * rename * fix component name * Repo refactoring for v9 (#5325) * rename folders * rename folders * migrate app and app-compat * migrate installations and analytics * migrate app check * migrate auth * migrate functions * migrate messaging * migrate performance * migrate remoteconfig * remove v8 code * update versions * migrate firebase * fix merge issues * save * fix firebase builds * update changeset config * update build scripts * update release script * fix functions typings * remove redundant typings * update path * treat external dependencies correctly * fix lint * remove firestore-compat references * fix build issues * update build scripts * update pkg json * fix test * fix some tests * fix some tests * fix integration tests * fixes * fix dep * update ci tests * resolve todos * remove exp references * docgen build * export FirebaseError (#5349) * firebase packaging update (#5348) * Fei v9 main firestore (#5319) * compile firestore * update typings path * compile firestore compat * lint compat * make test work * get most tests work * build * remove special paths * update firestore-compat pkg json * fix merge issues * Simplify bundles * Prettier * Fix Bundle compile * Fix build * address comments * console build * Fix all tests * Prettier * fix merge issues * fix typo * update paths * app-exp * fix lint * correct path * fix * fix compat lint * fix firestore integration * fix workflow * update dep * Always block on Auth (#5340) * Always block on Auth * Don't block on token if already recevied * fix lint * build firestore * remove memory only tests * fix firebase integration tests * enable more build and tests * add firestore-compat to firebase dep * fix auth compat class * enable auth test * auth package doc * Update API reports Co-authored-by: Sebastian Schmidt <[email protected]> Co-authored-by: Feiyang1 <[email protected]> * rebasing * Create registerMessagingCompat.ts * Add changeset for v9 (#5350) * add changeset * publish messaging interop * add firestore bumps * update changeset * Revert "Create registerMessagingCompat.ts" This reverts commit 0b95a5167e403ffc0dbcd9dd7dcb7cda754e510d. * Revert "rebasing" This reverts commit a8bf697157aaa29e8450acb626aae81ad5b542e1. * Update index.d.ts (#5355) * Fix Context Check in `Messaging-Compat` (#5353) * Add Rules Unit Testing v2 skeleton for v9 release (#5352) * Reset package for next major version. * Switch emulator script to node-fetch. * Migrate the other request call to fetch. * Update packages/rules-unit-testing/package.json Co-authored-by: Feiyang <[email protected]> * Create stale-ducks-live.md * Revert version change. Co-authored-by: Feiyang <[email protected]> * fix import path (#5356) * Add new types and function stubs for RUT vNext. (#5316) * Add new types and function stubs. * Fix types for testEnv.emulators. * Add util functions. * Add withFunctionTriggersDisabled overloads. * Improve typing for EmulatorConfig. * Fix tests. * Rename test_environment.ts to initialize.ts. * Add a dummy test to make CI pass. * Implement emulators discovery in RUTv2. (#5334) * Add new types and function stubs. * Fix types for testEnv.emulators. * Add util functions. * Add withFunctionTriggersDisabled overloads. * Improve typing for EmulatorConfig. * Fix tests. * Rename test_environment.ts to initialize.ts. * Add a dummy test to make CI pass. * Implement emulators discovery. * Use URL object from global. * Fix unreachable error code. * Implement most of RUTv2 features. (#5343) * Implement most of RUTv2 features. * Switch to compat instances. * Remove legacy code. * Use public typings for release (#5358) * use public typings for storage * use public typings for database * Implement rest of RUTv2 features. (#5360) * Implement loading rules and withFunctionTriggersDisabled. * Implement clearFirestore and storage. * Add missing await. * Add default bucketUrl. * Use alternative method to clear bucket. * Use default param (review feedback). * Storage typing updates (#5359) * rename to StorageError * more type safety * Update API reports * update api report Co-authored-by: Feiyang1 <[email protected]> * correct component name * fix installtions-compat typing * remove rules-unit-testing from ignore list * reenable things * support mjs files * correct matching pattern * transform only @firebase/util * use public types for database doc * transform all but compat packages Co-authored-by: Sebastian Schmidt <[email protected]> Co-authored-by: Feiyang1 <[email protected]> Co-authored-by: kai <[email protected]> Co-authored-by: Yuchen Shi <[email protected]> Co-authored-by: Kai Wu <[email protected]>
207 lines
5.5 KiB
TypeScript
207 lines
5.5 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2017 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 { _TEST_ACCESS_forceRestClient as forceRestClient } from '@firebase/database';
|
|
import { expect } from 'chai';
|
|
|
|
import { getRandomNode, getFreshRepoFromReference } from '../helpers/util';
|
|
|
|
// Some sanity checks for the ReadonlyRestClient crawler support.
|
|
describe('Crawler Support', () => {
|
|
let initialData;
|
|
let normalRef;
|
|
let restRef;
|
|
|
|
beforeEach(done => {
|
|
normalRef = getRandomNode();
|
|
|
|
forceRestClient(true);
|
|
restRef = getFreshRepoFromReference(normalRef);
|
|
forceRestClient(false);
|
|
|
|
setInitialData(done);
|
|
});
|
|
|
|
function setInitialData(done) {
|
|
// Set some initial data.
|
|
initialData = {
|
|
leaf: 42,
|
|
securedLeaf: 'secret',
|
|
leafWithPriority: { '.value': 42, '.priority': 'pri' },
|
|
obj: { a: 1, b: 2 },
|
|
list: {
|
|
10: { name: 'amy', age: 75, '.priority': 22 },
|
|
20: { name: 'becky', age: 42, '.priority': 52 },
|
|
30: { name: 'fred', age: 35, '.priority': 23 },
|
|
40: { name: 'fred', age: 29, '.priority': 26 },
|
|
50: { name: 'sally', age: 21, '.priority': 96 },
|
|
60: { name: 'tom', age: 16, '.priority': 15 },
|
|
70: { name: 'victor', age: 4, '.priority': 47 }
|
|
},
|
|
valueList: {
|
|
10: 'c',
|
|
20: 'b',
|
|
30: 'e',
|
|
40: 'f',
|
|
50: 'a',
|
|
60: 'd',
|
|
70: 'e'
|
|
}
|
|
};
|
|
|
|
return normalRef.set(initialData, error => {
|
|
expect(error).to.not.be.ok;
|
|
done();
|
|
});
|
|
}
|
|
|
|
it('set() is a no-op', done => {
|
|
normalRef.child('leaf').on('value', s => {
|
|
expect(s.val()).to.equal(42);
|
|
});
|
|
|
|
restRef.child('leaf').set('hello');
|
|
|
|
// We need to wait long enough to be sure that our 'hello' didn't actually get set, but there's
|
|
// no good way to do that. So we just do a couple round-trips via the REST client and assume
|
|
// that's good enough.
|
|
restRef.child('obj').once('value', s => {
|
|
expect(s.val()).to.deep.equal(initialData.obj);
|
|
|
|
restRef.child('obj').once('value', s => {
|
|
expect(s.val()).to.deep.equal(initialData.obj);
|
|
|
|
normalRef.child('leaf').off();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
it('set() is a no-op (Promise)', () => {
|
|
// This test mostly exists to make sure restRef really is using ReadonlyRestClient
|
|
// and we're not accidentally testing a normal Firebase connection.
|
|
|
|
normalRef.child('leaf').on('value', s => {
|
|
expect(s.val()).to.equal(42);
|
|
});
|
|
|
|
restRef.child('leaf').set('hello');
|
|
|
|
// We need to wait long enough to be sure that our 'hello' didn't actually get set, but there's
|
|
// no good way to do that. So we just do a couple round-trips via the REST client and assume
|
|
// that's good enough.
|
|
return restRef
|
|
.child('obj')
|
|
.once('value')
|
|
.then(s => {
|
|
expect(s.val()).to.deep.equal(initialData.obj);
|
|
|
|
return restRef.child('obj').once('value');
|
|
})
|
|
.then(
|
|
s => {
|
|
expect(s.val()).to.deep.equal(initialData.obj);
|
|
normalRef.child('leaf').off();
|
|
},
|
|
reason => {
|
|
normalRef.child('leaf').off();
|
|
return Promise.reject(reason);
|
|
}
|
|
);
|
|
});
|
|
|
|
it('.info/connected fires with true', done => {
|
|
restRef.root.child('.info/connected').on('value', s => {
|
|
if (s.val() === true) {
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
it('Leaf read works.', done => {
|
|
restRef.child('leaf').once('value', s => {
|
|
expect(s.val()).to.equal(initialData.leaf);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Leaf read works. (Promise)', () => {
|
|
return restRef
|
|
.child('leaf')
|
|
.once('value')
|
|
.then(s => {
|
|
expect(s.val()).to.equal(initialData.leaf);
|
|
});
|
|
});
|
|
|
|
it('Object read works.', done => {
|
|
restRef.child('obj').once('value', s => {
|
|
expect(s.val()).to.deep.equal(initialData.obj);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Object read works. (Promise)', () => {
|
|
return restRef
|
|
.child('obj')
|
|
.once('value')
|
|
.then(s => {
|
|
expect(s.val()).to.deep.equal(initialData.obj);
|
|
});
|
|
});
|
|
|
|
it('Leaf with priority read works.', done => {
|
|
restRef.child('leafWithPriority').once('value', s => {
|
|
expect(s.exportVal()).to.deep.equal(initialData.leafWithPriority);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Leaf with priority read works. (Promise)', () => {
|
|
return restRef
|
|
.child('leafWithPriority')
|
|
.once('value')
|
|
.then(s => {
|
|
expect(s.exportVal()).to.deep.equal(initialData.leafWithPriority);
|
|
});
|
|
});
|
|
|
|
it('Null read works.', done => {
|
|
restRef.child('nonexistent').once('value', s => {
|
|
expect(s.val()).to.equal(null);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Null read works. (Promise)', () => {
|
|
return restRef
|
|
.child('nonexistent')
|
|
.once('value')
|
|
.then(s => {
|
|
expect(s.val()).to.equal(null);
|
|
});
|
|
});
|
|
|
|
it('on works.', done => {
|
|
restRef.child('leaf').on('value', s => {
|
|
expect(s.val()).to.equal(initialData.leaf);
|
|
restRef.child('leaf').off();
|
|
done();
|
|
});
|
|
});
|
|
});
|