Firebase stub: added support for filtering of resumes by user

This commit is contained in:
gianantoniopini
2021-01-06 17:03:46 +01:00
parent c667c31737
commit 176ba0de7a
3 changed files with 36 additions and 6 deletions

View File

@ -217,11 +217,11 @@ describe('FirebaseStub', () => {
});
it('triggers callback with resumes when listening for data changes on the resumes reference path', async () => {
let snapshotValue = null;
const resumesDataSnapshot = await FirebaseStub.database()
.ref(resumesPath)
.once('value');
const resumes = resumesDataSnapshot.val();
let snapshotValue = null;
FirebaseStub.database()
.ref(resumesPath)
@ -231,5 +231,22 @@ describe('FirebaseStub', () => {
expect(snapshotValue).toEqual(resumes);
});
it('can filter resumes by user', async () => {
let snapshotValue = null;
FirebaseStub.database()
.ref(resumesPath)
.orderByChild('user')
.equalTo(FirebaseStub.database().anonymousUser1.uid)
.on('value', (snapshot) => {
snapshotValue = snapshot.val();
});
expect(Object.keys(snapshotValue).length).toEqual(2);
Object.values(snapshotValue).forEach((resume) =>
expect(resume.user).toEqual(FirebaseStub.database().anonymousUser1.uid),
);
});
});
});

View File

@ -241,11 +241,23 @@ class Reference {
return databaseData;
}
let data = null;
if (
this.#path === Reference.resumesPath ||
this.#path === Reference.usersPath
) {
return this.#path in databaseData ? databaseData[this.#path] : null;
data = this.#path in databaseData ? databaseData[this.#path] : null;
if (data && this.#orderByChildPath && this.#equalToValue) {
return Object.fromEntries(
Object.entries(data).filter(
([key, value]) =>
value[this.#orderByChildPath] === this.#equalToValue,
),
);
}
return data;
}
if (

View File

@ -31,7 +31,7 @@ describe('Dashboard', () => {
.once('value')
).val();
expect(resumes).toBeTruthy();
expect(Object.keys(resumes).length).toEqual(3);
expect(Object.keys(resumes).length).not.toEqual(0);
container = render(
<SettingsProvider>
@ -60,15 +60,16 @@ describe('Dashboard', () => {
});
it('preview of user resumes', async () => {
expect(Object.keys(resumes).length).toEqual(2);
expect(Object.values(resumes)[0].user).toEqual(user.uid);
expect(
screen.getByText(new RegExp(Object.values(resumes)[0].name)),
).toBeInTheDocument();
expect(Object.values(resumes)[1].user).toEqual(user.uid);
expect(
screen.getByText(new RegExp(Object.values(resumes)[1].name)),
).toBeInTheDocument();
expect(
screen.getByText(new RegExp(Object.values(resumes)[2].name)),
).toBeInTheDocument();
});
});
});