From 176ba0de7a766b8dacbaa7d8cc8d0e394903df2e Mon Sep 17 00:00:00 2001 From: gianantoniopini <63844628+gianantoniopini@users.noreply.github.com> Date: Wed, 6 Jan 2021 17:03:46 +0100 Subject: [PATCH] Firebase stub: added support for filtering of resumes by user --- .../__tests__/gatsby-plugin-firebase.test.js | 19 ++++++++++++++++++- __mocks__/gatsby-plugin-firebase.js | 14 +++++++++++++- src/pages/app/__tests__/dashboard.test.js | 9 +++++---- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/__mocks__/__tests__/gatsby-plugin-firebase.test.js b/__mocks__/__tests__/gatsby-plugin-firebase.test.js index 6043330a..657ae45a 100644 --- a/__mocks__/__tests__/gatsby-plugin-firebase.test.js +++ b/__mocks__/__tests__/gatsby-plugin-firebase.test.js @@ -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), + ); + }); }); }); diff --git a/__mocks__/gatsby-plugin-firebase.js b/__mocks__/gatsby-plugin-firebase.js index 1da4f8b0..e92edf16 100644 --- a/__mocks__/gatsby-plugin-firebase.js +++ b/__mocks__/gatsby-plugin-firebase.js @@ -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 ( diff --git a/src/pages/app/__tests__/dashboard.test.js b/src/pages/app/__tests__/dashboard.test.js index 0f3c67c7..43018617 100644 --- a/src/pages/app/__tests__/dashboard.test.js +++ b/src/pages/app/__tests__/dashboard.test.js @@ -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( @@ -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(); }); }); });