mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-22 12:41:31 +10:00
Delete Account: started adding unit tests
This commit is contained in:
@ -1,7 +1,9 @@
|
||||
import Auth from './gatsby-plugin-firebase/auth/auth';
|
||||
import Database from './gatsby-plugin-firebase/database/database';
|
||||
import Functions from './gatsby-plugin-firebase/functions/functions';
|
||||
import AuthConstants from './gatsby-plugin-firebase/constants/auth';
|
||||
import DatabaseConstants from './gatsby-plugin-firebase/constants/database';
|
||||
import FunctionsConstants from './gatsby-plugin-firebase/constants/functions';
|
||||
|
||||
class FirebaseStub {
|
||||
static auth() {
|
||||
@ -11,6 +13,10 @@ class FirebaseStub {
|
||||
static database() {
|
||||
return Database.instance;
|
||||
}
|
||||
|
||||
static functions() {
|
||||
return Functions.instance;
|
||||
}
|
||||
}
|
||||
|
||||
FirebaseStub.database.ServerValue = {};
|
||||
@ -21,4 +27,4 @@ Object.defineProperty(FirebaseStub.database.ServerValue, 'TIMESTAMP', {
|
||||
});
|
||||
|
||||
export default FirebaseStub;
|
||||
export { AuthConstants, DatabaseConstants };
|
||||
export { AuthConstants, DatabaseConstants, FunctionsConstants };
|
||||
|
||||
15
__mocks__/gatsby-plugin-firebase/constants/functions.js
Normal file
15
__mocks__/gatsby-plugin-firebase/constants/functions.js
Normal file
@ -0,0 +1,15 @@
|
||||
const deleteUserFunctionName = 'deleteUser';
|
||||
|
||||
const defaultDelayInMilliseconds = 2000;
|
||||
|
||||
class Functions {
|
||||
static get deleteUserFunctionName() {
|
||||
return deleteUserFunctionName;
|
||||
}
|
||||
|
||||
static get defaultDelayInMilliseconds() {
|
||||
return defaultDelayInMilliseconds;
|
||||
}
|
||||
}
|
||||
|
||||
export default Functions;
|
||||
54
__mocks__/gatsby-plugin-firebase/functions/functions.js
Normal file
54
__mocks__/gatsby-plugin-firebase/functions/functions.js
Normal file
@ -0,0 +1,54 @@
|
||||
/* eslint-disable no-underscore-dangle */
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
import FunctionsConstants from '../constants/functions';
|
||||
import HttpsCallableResult from './httpsCallableResult';
|
||||
import { delay } from '../../../src/utils/index';
|
||||
|
||||
const singleton = Symbol('');
|
||||
const singletonEnforcer = Symbol('');
|
||||
|
||||
const deleteUser = async () => {
|
||||
await delay(FunctionsConstants.defaultDelayInMilliseconds);
|
||||
|
||||
return new HttpsCallableResult(true);
|
||||
};
|
||||
|
||||
class Functions {
|
||||
constructor(enforcer) {
|
||||
if (enforcer !== singletonEnforcer) {
|
||||
throw new Error('Cannot construct singleton');
|
||||
}
|
||||
|
||||
this._uuid = uuidv4();
|
||||
|
||||
this._httpsCallables = {};
|
||||
this._httpsCallables[
|
||||
FunctionsConstants.deleteUserFunctionName
|
||||
] = deleteUser;
|
||||
}
|
||||
|
||||
static get instance() {
|
||||
if (!this[singleton]) {
|
||||
this[singleton] = new Functions(singletonEnforcer);
|
||||
}
|
||||
|
||||
return this[singleton];
|
||||
}
|
||||
|
||||
get uuid() {
|
||||
return this._uuid;
|
||||
}
|
||||
|
||||
httpsCallable(name) {
|
||||
if (!name) {
|
||||
throw new Error('name must be provided.');
|
||||
} else if (typeof name !== 'string') {
|
||||
throw new Error('name should be a string.');
|
||||
}
|
||||
|
||||
return this._httpsCallables[name];
|
||||
}
|
||||
}
|
||||
|
||||
export default Functions;
|
||||
@ -0,0 +1,19 @@
|
||||
/* eslint-disable no-underscore-dangle */
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
class HttpsCallableResult {
|
||||
constructor(data) {
|
||||
this._uuid = uuidv4();
|
||||
this._data = data;
|
||||
}
|
||||
|
||||
get data() {
|
||||
return this._data;
|
||||
}
|
||||
|
||||
get uuid() {
|
||||
return this._uuid;
|
||||
}
|
||||
}
|
||||
|
||||
export default HttpsCallableResult;
|
||||
@ -0,0 +1,36 @@
|
||||
import { fireEvent, screen } from '@testing-library/react';
|
||||
|
||||
import FirebaseStub, { DatabaseConstants } from 'gatsby-plugin-firebase';
|
||||
|
||||
import { setupAndWait } from './helpers/builder';
|
||||
|
||||
const testTimeoutInMilliseconds = 20000;
|
||||
jest.setTimeout(testTimeoutInMilliseconds);
|
||||
|
||||
async function setup() {
|
||||
const resumeId = DatabaseConstants.demoStateResume1Id;
|
||||
await setupAndWait(resumeId, true, true);
|
||||
|
||||
const button = screen.getByRole('button', {
|
||||
name: /Delete Account/i,
|
||||
});
|
||||
|
||||
const mockFirebaseFunctionsHttpsCallable = jest.spyOn(
|
||||
FirebaseStub.functions(),
|
||||
'httpsCallable',
|
||||
);
|
||||
|
||||
return {
|
||||
button,
|
||||
mockFirebaseFunctionsHttpsCallable,
|
||||
};
|
||||
}
|
||||
|
||||
test('prompts for confirmation', async () => {
|
||||
const { button, mockFirebaseFunctionsHttpsCallable } = await setup();
|
||||
|
||||
fireEvent.click(button);
|
||||
|
||||
expect(button).toHaveTextContent('Are you sure?');
|
||||
expect(mockFirebaseFunctionsHttpsCallable).not.toHaveBeenCalled();
|
||||
});
|
||||
Reference in New Issue
Block a user