Firebase mock refactoring

This commit is contained in:
gianantoniopini
2020-12-16 10:37:23 +01:00
parent d33f707cea
commit 3a68c4b5af
2 changed files with 90 additions and 79 deletions

View File

@ -1,21 +1,51 @@
import path from 'path'; import path from 'path';
import fs from 'fs'; import fs from 'fs';
const demoResumeId = 'demore'; let onAuthStateChangedObservers = [];
const emptyResumeId = 'mtre01';
let resumesDictionary = {}; let resumesDictionary = {};
let useDemoResume = false; let useDemoResume = false;
let onAuthStateChangedObservers = []; const auth = () => {
const testUser = { const testUser = {
displayName: 'Test User', displayName: 'Test User',
email: 'noemail@noemail.com', email: 'noemail@noemail.com',
};
const __init = () => {
onAuthStateChangedObservers = [];
};
const onAuthStateChanged = (observer) => {
onAuthStateChangedObservers.push(observer);
return () => {
onAuthStateChangedObservers = onAuthStateChangedObservers.filter(
(observer) => observer !== observer,
);
};
};
const signInAnonymously = async () => {
onAuthStateChangedObservers.forEach((observer) => observer(testUser));
var result = await Promise.resolve(testUser);
return result;
};
return {
__init,
onAuthStateChanged,
signInAnonymously,
};
}; };
const __init = () => { const database = () => {
const demoResumeId = 'demore';
const emptyResumeId = 'mtre01';
const __init = () => {
resumesDictionary = {}; resumesDictionary = {};
useDemoResume = false; useDemoResume = false;
onAuthStateChangedObservers = [];
const demoResume = __readFile('../src/data/demoState.json'); const demoResume = __readFile('../src/data/demoState.json');
resumesDictionary[demoResumeId] = demoResume; resumesDictionary[demoResumeId] = demoResume;
@ -32,58 +62,38 @@ const __init = () => {
date.setMonth(date.getMonth() - 2); date.setMonth(date.getMonth() - 2);
resume.createdAt = date.valueOf(); resume.createdAt = date.valueOf();
} }
}; };
const __readFile = (fileRelativePath) => { const __readFile = (fileRelativePath) => {
const fileAbsolutePath = path.resolve(__dirname, fileRelativePath); const fileAbsolutePath = path.resolve(__dirname, fileRelativePath);
const fileBuffer = fs.readFileSync(fileAbsolutePath); const fileBuffer = fs.readFileSync(fileAbsolutePath);
const fileData = JSON.parse(fileBuffer); const fileData = JSON.parse(fileBuffer);
return fileData; return fileData;
}; };
const __getResume = () => { const __getResume = () => {
return useDemoResume return useDemoResume
? resumesDictionary[demoResumeId] ? resumesDictionary[demoResumeId]
: resumesDictionary[emptyResumeId]; : 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,
);
}; };
};
const signInAnonymously = async () => { const __useDemoResume = (value) => {
onAuthStateChangedObservers.forEach((observer) => observer(testUser)); useDemoResume = value;
};
var result = await Promise.resolve(testUser); return {
return result; __init,
}; __getResume,
__useDemoResume,
export default {
database: jest.fn().mockReturnValue({
ref: jest.fn().mockReturnValue({ ref: jest.fn().mockReturnValue({
once: jest.fn().mockResolvedValue({ once: jest.fn().mockResolvedValue({
val: jest.fn(__getResume), val: jest.fn(__getResume),
}), }),
}), }),
}), };
auth: jest.fn().mockReturnValue({
onAuthStateChanged: onAuthStateChanged,
signInAnonymously: signInAnonymously,
}),
}; };
export { __init, __useDemoResume, __getResumeId }; export default {
auth,
database,
};

View File

@ -1,11 +1,7 @@
import React from 'react'; import React from 'react';
import { render, cleanup } from '@testing-library/react'; import { act, render, cleanup } from '@testing-library/react';
import firebase, { import firebaseMock from 'gatsby-plugin-firebase';
__init as firebaseMockInit,
__useDemoResume as firebaseMockUseDemoResume,
__getResumeId as firebaseMockGetResumeId,
} from 'gatsby-plugin-firebase';
import { UserProvider } from '../../../contexts/UserContext'; import { UserProvider } from '../../../contexts/UserContext';
import { DatabaseProvider } from '../../../contexts/DatabaseContext'; import { DatabaseProvider } from '../../../contexts/DatabaseContext';
@ -15,29 +11,34 @@ import { StorageProvider } from '../../../contexts/StorageContext';
import Builder from '../builder'; import Builder from '../builder';
beforeEach(() => { beforeEach(() => {
firebaseMockInit(); firebaseMock.auth().__init();
firebaseMock.database().__init();
}); });
afterEach(cleanup); afterEach(cleanup);
it('renders correctly', async () => { it('renders correctly', async () => {
firebaseMockUseDemoResume(true); firebaseMock.database().__useDemoResume(true);
const resumeId = firebaseMockGetResumeId(); const resume = firebaseMock.database().__getResume();
const container = render( const element = (
<UserProvider> <UserProvider>
<DatabaseProvider> <DatabaseProvider>
<ResumeProvider> <ResumeProvider>
<StorageProvider> <StorageProvider>
<Builder id={resumeId} /> <Builder id={resume.id} />
</StorageProvider> </StorageProvider>
</ResumeProvider> </ResumeProvider>
</DatabaseProvider> </DatabaseProvider>
</UserProvider>, </UserProvider>
); );
let container = null;
await firebase.auth().signInAnonymously(); act(() => {
container = render(element);
});
await firebaseMock.auth().signInAnonymously();
expect(container).toBeTruthy(); expect(container).toBeTruthy();
//expect(container).toBeInTheDocument();
}); });