From 3a68c4b5af1dd32a7259ed356951c48a1736c969 Mon Sep 17 00:00:00 2001 From: gianantoniopini <63844628+gianantoniopini@users.noreply.github.com> Date: Wed, 16 Dec 2020 10:37:23 +0100 Subject: [PATCH] Firebase mock refactoring --- __mocks__/gatsby-plugin-firebase.js | 140 ++++++++++-------- .../__tests__/builder.mockFirebase.test.js | 29 ++-- 2 files changed, 90 insertions(+), 79 deletions(-) diff --git a/__mocks__/gatsby-plugin-firebase.js b/__mocks__/gatsby-plugin-firebase.js index 90638c02..2174ea8d 100644 --- a/__mocks__/gatsby-plugin-firebase.js +++ b/__mocks__/gatsby-plugin-firebase.js @@ -1,89 +1,99 @@ import path from 'path'; import fs from 'fs'; -const demoResumeId = 'demore'; -const emptyResumeId = 'mtre01'; +let onAuthStateChangedObservers = []; let resumesDictionary = {}; let useDemoResume = false; -let onAuthStateChangedObservers = []; -const testUser = { - displayName: 'Test User', - email: 'noemail@noemail.com', -}; +const auth = () => { + const testUser = { + displayName: 'Test User', + email: 'noemail@noemail.com', + }; -const __init = () => { - resumesDictionary = {}; - useDemoResume = false; - onAuthStateChangedObservers = []; + const __init = () => { + onAuthStateChangedObservers = []; + }; - const demoResume = __readFile('../src/data/demoState.json'); - resumesDictionary[demoResumeId] = demoResume; - const emptyResume = __readFile('../src/data/initialState.json'); - resumesDictionary[emptyResumeId] = emptyResume; + const onAuthStateChanged = (observer) => { + onAuthStateChangedObservers.push(observer); - for (var key in resumesDictionary) { - const resume = resumesDictionary[key]; + return () => { + onAuthStateChangedObservers = onAuthStateChangedObservers.filter( + (observer) => observer !== observer, + ); + }; + }; - resume.id = key; + const signInAnonymously = async () => { + onAuthStateChangedObservers.forEach((observer) => observer(testUser)); - let date = new Date('December 15, 2020 11:20:25'); - resume.updatedAt = date.valueOf(); - date.setMonth(date.getMonth() - 2); - resume.createdAt = date.valueOf(); - } -}; + var result = await Promise.resolve(testUser); + return result; + }; -const __readFile = (fileRelativePath) => { - const fileAbsolutePath = path.resolve(__dirname, fileRelativePath); - const fileBuffer = fs.readFileSync(fileAbsolutePath); - const fileData = JSON.parse(fileBuffer); - return fileData; -}; - -const __getResume = () => { - return useDemoResume - ? resumesDictionary[demoResumeId] - : resumesDictionary[emptyResumeId]; -}; - -const __useDemoResume = (value) => { - useDemoResume = value; -}; - -const __getResumeId = () => { - return __getResume().id; -}; - -const onAuthStateChanged = (observer) => { - onAuthStateChangedObservers.push(observer); - - return () => { - onAuthStateChangedObservers = onAuthStateChangedObservers.filter( - (observer) => observer !== observer, - ); + return { + __init, + onAuthStateChanged, + signInAnonymously, }; }; -const signInAnonymously = async () => { - onAuthStateChangedObservers.forEach((observer) => observer(testUser)); +const database = () => { + const demoResumeId = 'demore'; + const emptyResumeId = 'mtre01'; - var result = await Promise.resolve(testUser); - return result; -}; + const __init = () => { + resumesDictionary = {}; + useDemoResume = false; -export default { - database: jest.fn().mockReturnValue({ + const demoResume = __readFile('../src/data/demoState.json'); + resumesDictionary[demoResumeId] = demoResume; + const emptyResume = __readFile('../src/data/initialState.json'); + resumesDictionary[emptyResumeId] = emptyResume; + + for (var key in resumesDictionary) { + const resume = resumesDictionary[key]; + + resume.id = key; + + let date = new Date('December 15, 2020 11:20:25'); + resume.updatedAt = date.valueOf(); + date.setMonth(date.getMonth() - 2); + resume.createdAt = date.valueOf(); + } + }; + + const __readFile = (fileRelativePath) => { + const fileAbsolutePath = path.resolve(__dirname, fileRelativePath); + const fileBuffer = fs.readFileSync(fileAbsolutePath); + const fileData = JSON.parse(fileBuffer); + return fileData; + }; + + const __getResume = () => { + return useDemoResume + ? resumesDictionary[demoResumeId] + : resumesDictionary[emptyResumeId]; + }; + + const __useDemoResume = (value) => { + useDemoResume = value; + }; + + return { + __init, + __getResume, + __useDemoResume, ref: jest.fn().mockReturnValue({ once: jest.fn().mockResolvedValue({ val: jest.fn(__getResume), }), }), - }), - auth: jest.fn().mockReturnValue({ - onAuthStateChanged: onAuthStateChanged, - signInAnonymously: signInAnonymously, - }), + }; }; -export { __init, __useDemoResume, __getResumeId }; +export default { + auth, + database, +}; diff --git a/src/pages/app/__tests__/builder.mockFirebase.test.js b/src/pages/app/__tests__/builder.mockFirebase.test.js index 8dafd73e..12b7da9e 100644 --- a/src/pages/app/__tests__/builder.mockFirebase.test.js +++ b/src/pages/app/__tests__/builder.mockFirebase.test.js @@ -1,11 +1,7 @@ import React from 'react'; -import { render, cleanup } from '@testing-library/react'; +import { act, render, cleanup } from '@testing-library/react'; -import firebase, { - __init as firebaseMockInit, - __useDemoResume as firebaseMockUseDemoResume, - __getResumeId as firebaseMockGetResumeId, -} from 'gatsby-plugin-firebase'; +import firebaseMock from 'gatsby-plugin-firebase'; import { UserProvider } from '../../../contexts/UserContext'; import { DatabaseProvider } from '../../../contexts/DatabaseContext'; @@ -15,29 +11,34 @@ import { StorageProvider } from '../../../contexts/StorageContext'; import Builder from '../builder'; beforeEach(() => { - firebaseMockInit(); + firebaseMock.auth().__init(); + firebaseMock.database().__init(); }); afterEach(cleanup); it('renders correctly', async () => { - firebaseMockUseDemoResume(true); - const resumeId = firebaseMockGetResumeId(); + firebaseMock.database().__useDemoResume(true); + const resume = firebaseMock.database().__getResume(); - const container = render( + const element = ( - + - , + ); + let container = null; - await firebase.auth().signInAnonymously(); + act(() => { + container = render(element); + }); + + await firebaseMock.auth().signInAnonymously(); expect(container).toBeTruthy(); - //expect(container).toBeInTheDocument(); });