mirror of
https://github.com/zhigang1992/react-native-firebase.git
synced 2026-04-11 11:29:13 +08:00
- [ANDROID] [BUGFIX] [DATABASE] - Database listeners now correctly tearing down between RN reloads. (Fixes #1498 #1611 #1609) - [JS] [BUGFIX] [DATABASE] - Fixed an issue where `Reference.toString()` incorrectly contains `//` instead of `/` when joining the parent and child paths. - [JS] [BUGFIX] [DATABASE] - Rework `.push()` behaviour to match WebSDK and correctly return a Reference instance in all scenarios. (Fixes #893 #1464 #1572) - [JS] [ENHANCEMENT] [UTILS] - Added a `firebase.utils().database.cleanup()` utility method which removes all database listeners.
127 lines
3.6 KiB
JavaScript
127 lines
3.6 KiB
JavaScript
const { CONTENTS, setDatabaseContents } = TestHelpers.database;
|
|
|
|
describe('database()', () => {
|
|
before(() => setDatabaseContents());
|
|
|
|
describe('ref().push()', () => {
|
|
it('returns a ref that can be used to set value later', async () => {
|
|
const ref = firebase.database().ref('tests/types/array');
|
|
|
|
let originalListValue;
|
|
await ref.once('value', snapshot => {
|
|
originalListValue = snapshot.val();
|
|
});
|
|
await sleep(5);
|
|
|
|
originalListValue.should.eql(jet.contextify(CONTENTS.DEFAULT.array));
|
|
|
|
const newItemRef = ref.push();
|
|
const valueToAddToList = CONTENTS.NEW.number;
|
|
await newItemRef.set(valueToAddToList);
|
|
|
|
let newItemValue;
|
|
await newItemRef.once('value', snapshot => {
|
|
newItemValue = snapshot.val();
|
|
});
|
|
await sleep(5);
|
|
|
|
newItemValue.should.eql(valueToAddToList);
|
|
|
|
let newListValue;
|
|
await ref.once('value', snapshot => {
|
|
newListValue = snapshot.val();
|
|
});
|
|
await sleep(5);
|
|
|
|
const originalListAsObject = {
|
|
...originalListValue,
|
|
[newItemRef.key]: valueToAddToList,
|
|
};
|
|
|
|
newListValue.should.eql(jet.contextify(originalListAsObject));
|
|
});
|
|
|
|
it('allows setting value immediately', async () => {
|
|
let snapshot;
|
|
|
|
const ref = firebase.database().ref('tests/types/array');
|
|
const valueToAddToList = CONTENTS.NEW.number;
|
|
|
|
snapshot = await ref.once('value');
|
|
const originalListValue = snapshot.val();
|
|
const newItemRef = ref.push(valueToAddToList);
|
|
|
|
snapshot = await newItemRef.once('value');
|
|
const newItemValue = snapshot.val();
|
|
newItemValue.should.eql(valueToAddToList);
|
|
|
|
snapshot = await firebase
|
|
.database()
|
|
.ref('tests/types/array')
|
|
.once('value');
|
|
const newListValue = snapshot.val();
|
|
|
|
const originalListAsObject = {
|
|
...originalListValue,
|
|
[newItemRef.key]: valueToAddToList,
|
|
};
|
|
|
|
newListValue.should.eql(jet.contextify(originalListAsObject));
|
|
});
|
|
|
|
// https://github.com/invertase/react-native-firebase/issues/893
|
|
it('correctly returns the reference', async () => {
|
|
let result;
|
|
const path = 'tests/types/array';
|
|
const valueToAddToList = CONTENTS.NEW.number;
|
|
const Reference = jet.require('src/modules/database/Reference');
|
|
|
|
// 1
|
|
const ref1 = firebase
|
|
.database()
|
|
.ref(path)
|
|
.push();
|
|
|
|
should.exist(ref1, 'ref1 did not return a Reference instance');
|
|
ref1.key.should.be.a.String();
|
|
ref1.should.be.instanceOf(Reference);
|
|
result = await ref1.set(valueToAddToList);
|
|
should.not.exist(result);
|
|
|
|
// 2
|
|
const ref2 = await firebase
|
|
.database()
|
|
.ref(path)
|
|
.push(valueToAddToList);
|
|
|
|
should.exist(ref2, 'ref2 did not return a Reference instance');
|
|
ref2.key.should.be.a.String();
|
|
ref2.should.be.instanceOf(Reference);
|
|
|
|
// 3
|
|
const ref3 = await firebase
|
|
.database()
|
|
.ref(path)
|
|
.push();
|
|
|
|
should.exist(ref3, 'ref3 did not return a Reference instance');
|
|
ref3.key.should.be.a.String();
|
|
ref3.should.be.instanceOf(Reference);
|
|
|
|
result = await ref3.set(valueToAddToList);
|
|
should.not.exist(result);
|
|
});
|
|
|
|
it('calls an onComplete callback', async () => {
|
|
const callback = sinon.spy();
|
|
const ref = firebase.database().ref('tests/types/array');
|
|
|
|
const valueToAddToList = CONTENTS.NEW.number;
|
|
const newItemRef = await ref.push(valueToAddToList, callback);
|
|
|
|
callback.should.be.calledWith(null);
|
|
newItemRef.parent.path.should.equal('tests/types/array');
|
|
});
|
|
});
|
|
});
|