Firebase Stub: leading slash in reference path is ignored

This commit is contained in:
gianantoniopini
2021-01-15 09:19:35 +01:00
parent 978aafae75
commit aac1e12cfc
4 changed files with 49 additions and 24 deletions

View File

@ -74,17 +74,31 @@ describe('FirebaseStub', () => {
expect(database1.uuid).toEqual(database2.uuid);
});
it('reuses existing Reference instance', () => {
const ref1 = FirebaseStub.database().ref(
`${DatabaseConstants.resumesPath}/123`,
);
const ref2 = FirebaseStub.database().ref(
`${DatabaseConstants.resumesPath}/123`,
);
describe('ref function', () => {
it('reuses existing Reference instance', () => {
const ref1 = FirebaseStub.database().ref(
`${DatabaseConstants.resumesPath}/123`,
);
const ref2 = FirebaseStub.database().ref(
`${DatabaseConstants.resumesPath}/123`,
);
expect(ref1.uuid).toBeTruthy();
expect(ref2.uuid).toBeTruthy();
expect(ref1.uuid).toEqual(ref2.uuid);
expect(ref1).toBeTruthy();
expect(ref2).toBeTruthy();
expect(ref1).toEqual(ref2);
});
it('leading slash in reference path is ignored', () => {
const path = `${DatabaseConstants.resumesPath}/123`;
const ref1 = FirebaseStub.database().ref(path);
expect(ref1).toBeTruthy();
expect(ref1.path).toEqual(path);
const ref2 = FirebaseStub.database().ref(`/${path}`);
expect(ref2).toBeTruthy();
expect(ref2).toEqual(ref1);
});
});
it('ServerValue.TIMESTAMP returns current time in milliseconds', () => {

View File

@ -5,7 +5,7 @@ const childRemovedEventType = 'child_removed';
const resumesPath = 'resumes';
const usersPath = 'users';
const connectedPath = '/.info/connected';
const connectedPath = '.info/connected';
const demoStateResume1Id = 'demo_1';
const demoStateResume2Id = 'demo_2';

View File

@ -135,18 +135,19 @@ class Database {
}
ref(referencePath) {
const existingRef = this._getReference(referencePath);
if (existingRef) {
existingRef.initializeQueryParameters();
return existingRef;
}
const newRef = new Reference(
referencePath,
(dataPath) => this._getData(dataPath),
(dataPath, value) => this._setData(dataPath, value),
(refPath) => this._getReference(refPath),
);
const existingRef = this._getReference(newRef.path);
if (existingRef) {
existingRef.initializeQueryParameters();
return existingRef;
}
this._references[newRef.path] = newRef;
return newRef;
}

View File

@ -5,15 +5,25 @@ import { debounce } from 'lodash';
import DatabaseConstants from '../constants/database';
import DataSnapshot from './dataSnapshot';
const parsePath = (path) => {
if (!path) {
throw new Error('path must be provided.');
} else if (typeof path !== 'string') {
throw new Error('path should be a string.');
} else {
let parsedPath = path.trim();
if (parsedPath[0] === '/') {
parsedPath = parsedPath.substring(1);
}
return parsedPath;
}
};
class Reference {
constructor(path, getDatabaseData, setDatabaseData, getReference) {
if (!path) {
throw new Error('path must be provided.');
} else if (typeof path !== 'string') {
throw new Error('path should be a string.');
} else {
this._path = path;
}
this._path = parsePath(path);
this._uuid = uuidv4();