mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-16 09:41:31 +10:00
Firebase mock: refactoring to mock functions with specific arguments
This commit is contained in:
@ -1,34 +1,33 @@
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
const testUser = {
|
const __testUser = {
|
||||||
email: 'test.user@noemail.com',
|
email: 'test.user@noemail.com',
|
||||||
name: 'Test User',
|
name: 'Test User',
|
||||||
uid: 'testuser123',
|
uid: 'testuser123',
|
||||||
};
|
};
|
||||||
let onAuthStateChangedObservers = [];
|
let __onAuthStateChangedObservers = [];
|
||||||
let resumesDictionary = {};
|
let __resumesDictionary = {};
|
||||||
let useDemoResume = false;
|
|
||||||
|
|
||||||
const auth = () => {
|
const auth = () => {
|
||||||
const __init = () => {
|
const __init = () => {
|
||||||
onAuthStateChangedObservers = [];
|
__onAuthStateChangedObservers = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
const onAuthStateChanged = (observer) => {
|
const onAuthStateChanged = (observer) => {
|
||||||
onAuthStateChangedObservers.push(observer);
|
__onAuthStateChangedObservers.push(observer);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
onAuthStateChangedObservers = onAuthStateChangedObservers.filter(
|
__onAuthStateChangedObservers = __onAuthStateChangedObservers.filter(
|
||||||
(observer) => observer !== observer,
|
(observer) => observer !== observer,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const signInAnonymously = async () => {
|
const signInAnonymously = async () => {
|
||||||
onAuthStateChangedObservers.forEach((observer) => observer(testUser));
|
__onAuthStateChangedObservers.forEach((observer) => observer(__testUser));
|
||||||
|
|
||||||
var result = await Promise.resolve(testUser);
|
var result = await Promise.resolve(__testUser);
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -40,24 +39,23 @@ const auth = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const database = () => {
|
const database = () => {
|
||||||
const demoResumeId = 'demore';
|
const __demoResumeId = 'demore';
|
||||||
const emptyResumeId = 'mtre01';
|
const __emptyResumeId = 'mtre01';
|
||||||
|
|
||||||
const __init = () => {
|
const __init = () => {
|
||||||
resumesDictionary = {};
|
__resumesDictionary = {};
|
||||||
useDemoResume = false;
|
|
||||||
|
|
||||||
const demoResume = __readFile('../src/data/demoState.json');
|
const demoResume = __readFile('../src/data/demoState.json');
|
||||||
resumesDictionary[demoResumeId] = demoResume;
|
__resumesDictionary[__demoResumeId] = demoResume;
|
||||||
const emptyResume = __readFile('../src/data/initialState.json');
|
const emptyResume = __readFile('../src/data/initialState.json');
|
||||||
resumesDictionary[emptyResumeId] = emptyResume;
|
__resumesDictionary[__emptyResumeId] = emptyResume;
|
||||||
|
|
||||||
for (var key in resumesDictionary) {
|
for (var key in __resumesDictionary) {
|
||||||
const resume = resumesDictionary[key];
|
const resume = __resumesDictionary[key];
|
||||||
|
|
||||||
resume.id = key;
|
resume.id = key;
|
||||||
resume.name = `Test Resume ${key}`;
|
resume.name = `Test Resume ${key}`;
|
||||||
resume.user = testUser.uid;
|
resume.user = __testUser.uid;
|
||||||
|
|
||||||
let date = new Date('December 15, 2020 11:20:25');
|
let date = new Date('December 15, 2020 11:20:25');
|
||||||
resume.updatedAt = date.valueOf();
|
resume.updatedAt = date.valueOf();
|
||||||
@ -73,25 +71,71 @@ const database = () => {
|
|||||||
return fileData;
|
return fileData;
|
||||||
};
|
};
|
||||||
|
|
||||||
const __getResume = () => {
|
const ref = (path) => {
|
||||||
return useDemoResume
|
if (!path) {
|
||||||
? resumesDictionary[demoResumeId]
|
throw new Error('Not implemented.');
|
||||||
: resumesDictionary[emptyResumeId];
|
}
|
||||||
};
|
|
||||||
|
|
||||||
const __useDemoResume = (value) => {
|
const resumesPath = path.startsWith('resumes/');
|
||||||
useDemoResume = value;
|
const usersPath = path.startsWith('users/');
|
||||||
|
if (!resumesPath && !usersPath) {
|
||||||
|
throw new Error('Unknown Reference path.');
|
||||||
|
}
|
||||||
|
|
||||||
|
const databaseLocationId = path.substring(path.indexOf('/') + 1);
|
||||||
|
if (!databaseLocationId) {
|
||||||
|
throw new Error('Unknown database location id.');
|
||||||
|
}
|
||||||
|
|
||||||
|
const once = async (eventType) => {
|
||||||
|
if (!eventType) {
|
||||||
|
throw new Error('Event type must be provided.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eventType !== 'value') {
|
||||||
|
throw new Error('Unknown event type.');
|
||||||
|
}
|
||||||
|
|
||||||
|
const val = () => {
|
||||||
|
if (resumesPath) {
|
||||||
|
return __resumesDictionary[databaseLocationId]
|
||||||
|
? __resumesDictionary[databaseLocationId]
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usersPath) {
|
||||||
|
return __testUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Promise.resolve({ val });
|
||||||
|
};
|
||||||
|
|
||||||
|
const set = (value) => {
|
||||||
|
if (resumesPath) {
|
||||||
|
if (value === null) {
|
||||||
|
delete __resumesDictionary[databaseLocationId];
|
||||||
|
} else {
|
||||||
|
__resumesDictionary[databaseLocationId] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.resolve();
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
once,
|
||||||
|
set,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
__demoResumeId,
|
||||||
|
__emptyResumeId,
|
||||||
__init,
|
__init,
|
||||||
__getResume,
|
ref,
|
||||||
__useDemoResume,
|
|
||||||
ref: jest.fn().mockReturnValue({
|
|
||||||
once: jest.fn().mockResolvedValue({
|
|
||||||
val: jest.fn(__getResume),
|
|
||||||
}),
|
|
||||||
}),
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -9,8 +9,6 @@ import { ResumeProvider } from '../../../contexts/ResumeContext';
|
|||||||
import { StorageProvider } from '../../../contexts/StorageContext';
|
import { StorageProvider } from '../../../contexts/StorageContext';
|
||||||
import Builder from '../builder';
|
import Builder from '../builder';
|
||||||
|
|
||||||
let resume = null;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
firebaseMock.auth().__init();
|
firebaseMock.auth().__init();
|
||||||
firebaseMock.database().__init();
|
firebaseMock.database().__init();
|
||||||
@ -19,10 +17,15 @@ beforeEach(() => {
|
|||||||
afterEach(cleanup);
|
afterEach(cleanup);
|
||||||
|
|
||||||
describe('builder', () => {
|
describe('builder', () => {
|
||||||
|
let resumeId = null;
|
||||||
|
let resume = null;
|
||||||
|
|
||||||
describe('with demo resume', () => {
|
describe('with demo resume', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
firebaseMock.database().__useDemoResume(true);
|
resumeId = firebaseMock.database().__demoResumeId;
|
||||||
resume = firebaseMock.database().__getResume();
|
resume = (
|
||||||
|
await firebaseMock.database().ref(`resumes/${resumeId}`).once('value')
|
||||||
|
).val();
|
||||||
|
|
||||||
render(
|
render(
|
||||||
<UserProvider>
|
<UserProvider>
|
||||||
@ -59,8 +62,10 @@ describe('builder', () => {
|
|||||||
|
|
||||||
describe('with empty resume', () => {
|
describe('with empty resume', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
firebaseMock.database().__useDemoResume(false);
|
resumeId = firebaseMock.database().__emptyResumeId;
|
||||||
resume = firebaseMock.database().__getResume();
|
resume = (
|
||||||
|
await firebaseMock.database().ref(`resumes/${resumeId}`).once('value')
|
||||||
|
).val();
|
||||||
|
|
||||||
render(
|
render(
|
||||||
<UserProvider>
|
<UserProvider>
|
||||||
|
|||||||
Reference in New Issue
Block a user