Files
6434c30541 Repo refactoring (#5345)
* 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]>
2021-08-24 13:56:01 -07:00

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();
});
});
});