From c667c31737dac9e2624d40d9248190505df7cab2 Mon Sep 17 00:00:00 2001 From: gianantoniopini <63844628+gianantoniopini@users.noreply.github.com> Date: Wed, 6 Jan 2021 16:00:23 +0100 Subject: [PATCH] Firebase stub: added additional resume and user to test data, added more tests --- .../__tests__/gatsby-plugin-firebase.test.js | 83 +++++++++++++++---- __mocks__/gatsby-plugin-firebase.js | 81 +++++++++++++----- src/pages/app/__tests__/builder.test.js | 2 +- src/pages/app/__tests__/dashboard.test.js | 7 +- 4 files changed, 129 insertions(+), 44 deletions(-) diff --git a/__mocks__/__tests__/gatsby-plugin-firebase.test.js b/__mocks__/__tests__/gatsby-plugin-firebase.test.js index 624644bf..6043330a 100644 --- a/__mocks__/__tests__/gatsby-plugin-firebase.test.js +++ b/__mocks__/__tests__/gatsby-plugin-firebase.test.js @@ -3,6 +3,7 @@ import FirebaseStub from '../gatsby-plugin-firebase'; describe('FirebaseStub', () => { const resumesPath = FirebaseStub.database().resumesPath; const usersPath = FirebaseStub.database().usersPath; + const connectedPath = FirebaseStub.database().connectedPath; describe('auth', () => { afterEach(() => { @@ -18,14 +19,14 @@ describe('FirebaseStub', () => { expect(auth1.uuid).toEqual(auth2.uuid); }); - it('returns anonymous user when signing in anonymously', async () => { + it('returns anonymous user 1 when signing in anonymously', async () => { const user = await FirebaseStub.auth().signInAnonymously(); expect(user).toBeTruthy(); - expect(user).toEqual(FirebaseStub.auth().anonymousUser); + expect(user).toEqual(FirebaseStub.auth().anonymousUser1); }); - it('calls onAuthStateChanged observer with anonymous user when signing in anonymously', async () => { + it('calls onAuthStateChanged observer with anonymous user 1 when signing in anonymously', async () => { let user = null; let error = null; FirebaseStub.auth().onAuthStateChanged( @@ -40,7 +41,7 @@ describe('FirebaseStub', () => { await FirebaseStub.auth().signInAnonymously(); expect(user).toBeTruthy(); - expect(user).toEqual(FirebaseStub.auth().anonymousUser); + expect(user).toEqual(FirebaseStub.auth().anonymousUser1); expect(error).toBeNull(); }); @@ -109,12 +110,24 @@ describe('FirebaseStub', () => { const resumesDataSnapshot = await resumesRef.once('value'); const resumes = resumesDataSnapshot.val(); expect(resumes).toBeTruthy(); - expect(Object.keys(resumes).length).toEqual(2); - const demoStateResume = - resumes[FirebaseStub.database().demoStateResumeId]; - expect(demoStateResume).toBeTruthy(); - expect(demoStateResume.id).toEqual( - FirebaseStub.database().demoStateResumeId, + expect(Object.keys(resumes).length).toEqual(3); + const demoStateResume1 = + resumes[FirebaseStub.database().demoStateResume1Id]; + expect(demoStateResume1).toBeTruthy(); + expect(demoStateResume1.id).toEqual( + FirebaseStub.database().demoStateResume1Id, + ); + expect(demoStateResume1.user).toEqual( + FirebaseStub.database().anonymousUser1.uid, + ); + const demoStateResume2 = + resumes[FirebaseStub.database().demoStateResume2Id]; + expect(demoStateResume2).toBeTruthy(); + expect(demoStateResume2.id).toEqual( + FirebaseStub.database().demoStateResume2Id, + ); + expect(demoStateResume2.user).toEqual( + FirebaseStub.database().anonymousUser2.uid, ); const initialStateResume = resumes[FirebaseStub.database().initialStateResumeId]; @@ -122,15 +135,21 @@ describe('FirebaseStub', () => { expect(initialStateResume.id).toEqual( FirebaseStub.database().initialStateResumeId, ); + expect(initialStateResume.user).toEqual( + FirebaseStub.database().anonymousUser1.uid, + ); const usersRef = FirebaseStub.database().ref(usersPath); const usersDataSnapshot = await usersRef.once('value'); const users = usersDataSnapshot.val(); expect(users).toBeTruthy(); - expect(Object.keys(users).length).toEqual(1); - const anonymousUser = users[FirebaseStub.database().anonymousUser.uid]; - expect(anonymousUser).toBeTruthy(); - expect(anonymousUser).toEqual(FirebaseStub.database().anonymousUser); + expect(Object.keys(users).length).toEqual(2); + const anonymousUser1 = users[FirebaseStub.database().anonymousUser1.uid]; + expect(anonymousUser1).toBeTruthy(); + expect(anonymousUser1).toEqual(FirebaseStub.database().anonymousUser1); + const anonymousUser2 = users[FirebaseStub.database().anonymousUser2.uid]; + expect(anonymousUser2).toBeTruthy(); + expect(anonymousUser2).toEqual(FirebaseStub.database().anonymousUser2); }); it('retrieves resume if it exists', async () => { @@ -138,12 +157,12 @@ describe('FirebaseStub', () => { const resume = ( await FirebaseStub.database() - .ref(`${resumesPath}/${FirebaseStub.database().demoStateResumeId}`) + .ref(`${resumesPath}/${FirebaseStub.database().demoStateResume1Id}`) .once('value') ).val(); expect(resume).toBeTruthy(); - expect(resume.id).toEqual(FirebaseStub.database().demoStateResumeId); + expect(resume.id).toEqual(FirebaseStub.database().demoStateResume1Id); }); it('retrieves null if resume does not exist', async () => { @@ -164,12 +183,12 @@ describe('FirebaseStub', () => { const user = ( await FirebaseStub.database() - .ref(`${usersPath}/${FirebaseStub.database().anonymousUser.uid}`) + .ref(`${usersPath}/${FirebaseStub.database().anonymousUser1.uid}`) .once('value') ).val(); expect(user).toBeTruthy(); - expect(user).toEqual(FirebaseStub.database().anonymousUser); + expect(user).toEqual(FirebaseStub.database().anonymousUser1); }); it('retrieves null if user does not exist', async () => { @@ -184,5 +203,33 @@ describe('FirebaseStub', () => { expect(user).toBeNull(); }); + + it('triggers callback with true when listening for data changes on the connected reference path', async () => { + let snapshotValue = null; + + FirebaseStub.database() + .ref(connectedPath) + .on('value', (snapshot) => { + snapshotValue = snapshot.val(); + }); + + expect(snapshotValue).toBe(true); + }); + + 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(); + + FirebaseStub.database() + .ref(resumesPath) + .on('value', (snapshot) => { + snapshotValue = snapshot.val(); + }); + + expect(snapshotValue).toEqual(resumes); + }); }); }); diff --git a/__mocks__/gatsby-plugin-firebase.js b/__mocks__/gatsby-plugin-firebase.js index c802752e..1da4f8b0 100644 --- a/__mocks__/gatsby-plugin-firebase.js +++ b/__mocks__/gatsby-plugin-firebase.js @@ -4,13 +4,20 @@ import { v4 as uuidv4 } from 'uuid'; class Auth { static #instance = undefined; - static anonymousUser = { + static anonymousUser1 = { displayName: 'Anonymous User 1', - email: 'anonymous.user@noemail.com', + email: 'anonymous1@noemail.com', isAnonymous: true, name: 'Anonymous 1', uid: 'anonym123', }; + static anonymousUser2 = { + displayName: 'Anonymous User 2', + email: 'anonymous2@noemail.com', + isAnonymous: true, + name: 'Anonymous 2', + uid: 'anonym456', + }; #uuid = ''; #onAuthStateChangedObservers = []; @@ -32,8 +39,12 @@ class Auth { return this.#onAuthStateChangedObservers; } - get anonymousUser() { - return Auth.anonymousUser; + get anonymousUser1() { + return Auth.anonymousUser1; + } + + get anonymousUser2() { + return Auth.anonymousUser2; } dispose() { @@ -51,11 +62,11 @@ class Auth { } async signInAnonymously() { - this.#onAuthStateChangedObservers.forEach((observer) => - observer(this.anonymousUser), - ); + const user = this.anonymousUser1; - return Promise.resolve(this.anonymousUser); + this.#onAuthStateChangedObservers.forEach((observer) => observer(user)); + + return Promise.resolve(user); } } @@ -64,8 +75,10 @@ class Database { #uuid = ''; #data = {}; #references = {}; - #anonymousUser = undefined; - #demoStateResumeId = 'demost'; + #anonymousUser1 = undefined; + #anonymousUser2 = undefined; + #demoStateResume1Id = 'demo_1'; + #demoStateResume2Id = 'demo_2'; #initialStateResumeId = 'initst'; constructor() { @@ -76,9 +89,13 @@ class Database { Database.#instance = this; this.#uuid = uuidv4(); - this.#anonymousUser = { - uid: Auth.anonymousUser.uid, - isAnonymous: Auth.anonymousUser.isAnonymous, + this.#anonymousUser1 = { + uid: Auth.anonymousUser1.uid, + isAnonymous: Auth.anonymousUser1.isAnonymous, + }; + this.#anonymousUser2 = { + uid: Auth.anonymousUser2.uid, + isAnonymous: Auth.anonymousUser2.isAnonymous, }; } @@ -90,12 +107,24 @@ class Database { return Reference.usersPath; } - get anonymousUser() { - return this.#anonymousUser; + get connectedPath() { + return Reference.connectedPath; } - get demoStateResumeId() { - return this.#demoStateResumeId; + get anonymousUser1() { + return this.#anonymousUser1; + } + + get anonymousUser2() { + return this.#anonymousUser2; + } + + get demoStateResume1Id() { + return this.#demoStateResume1Id; + } + + get demoStateResume2Id() { + return this.#demoStateResume2Id; } get initialStateResumeId() { @@ -116,18 +145,24 @@ class Database { initializeData() { const resumes = {}; - const demoStateResume = Database.readFile('../src/data/demoState.json'); + const demoStateResume1 = Database.readFile('../src/data/demoState.json'); let date = new Date('December 15, 2020 11:20:25'); - demoStateResume.updatedAt = date.valueOf(); + demoStateResume1.updatedAt = date.valueOf(); date.setMonth(date.getMonth() - 2); - demoStateResume.createdAt = date.valueOf(); - resumes[this.demoStateResumeId] = demoStateResume; + demoStateResume1.createdAt = date.valueOf(); + demoStateResume1.user = this.anonymousUser1.uid; + resumes[this.demoStateResume1Id] = demoStateResume1; + + const demoStateResume2 = JSON.parse(JSON.stringify(demoStateResume1)); + demoStateResume2.user = this.anonymousUser2.uid; + resumes[this.demoStateResume2Id] = demoStateResume2; const initialStateResume = Database.readFile( '../src/data/initialState.json', ); initialStateResume.updatedAt = date.valueOf(); initialStateResume.createdAt = date.valueOf(); + initialStateResume.user = this.anonymousUser1.uid; resumes[this.initialStateResumeId] = initialStateResume; for (var key in resumes) { @@ -135,13 +170,13 @@ class Database { resume.id = key; resume.name = `Test Resume ${key}`; - resume.user = this.anonymousUser.uid; } this.#data[this.resumesPath] = resumes; const users = {}; - users[this.anonymousUser.uid] = this.anonymousUser; + users[this.anonymousUser1.uid] = this.anonymousUser1; + users[this.anonymousUser2.uid] = this.anonymousUser2; this.#data[this.usersPath] = users; } diff --git a/src/pages/app/__tests__/builder.test.js b/src/pages/app/__tests__/builder.test.js index b53d6f4e..3ce73d51 100644 --- a/src/pages/app/__tests__/builder.test.js +++ b/src/pages/app/__tests__/builder.test.js @@ -32,7 +32,7 @@ describe('Builder', () => { let container = null; beforeEach(async () => { - resumeId = FirebaseStub.database().demoStateResumeId; + resumeId = FirebaseStub.database().demoStateResume1Id; resume = ( await FirebaseStub.database() .ref(`${resumesPath}/${resumeId}`) diff --git a/src/pages/app/__tests__/dashboard.test.js b/src/pages/app/__tests__/dashboard.test.js index dff2b10b..0f3c67c7 100644 --- a/src/pages/app/__tests__/dashboard.test.js +++ b/src/pages/app/__tests__/dashboard.test.js @@ -19,7 +19,7 @@ beforeEach(() => { describe('Dashboard', () => { const resumesPath = FirebaseStub.database().resumesPath; let resumes = null; - let user = FirebaseStub.database().anonymousUser; + let user = FirebaseStub.database().anonymousUser1; let container = null; beforeEach(async () => { @@ -31,7 +31,7 @@ describe('Dashboard', () => { .once('value') ).val(); expect(resumes).toBeTruthy(); - expect(Object.keys(resumes).length).toEqual(2); + expect(Object.keys(resumes).length).toEqual(3); container = render( @@ -66,6 +66,9 @@ describe('Dashboard', () => { expect( screen.getByText(new RegExp(Object.values(resumes)[1].name)), ).toBeInTheDocument(); + expect( + screen.getByText(new RegExp(Object.values(resumes)[2].name)), + ).toBeInTheDocument(); }); }); });