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 Auth from './gatsby-plugin-firebase/auth/auth';
|
||||||
import Database from './gatsby-plugin-firebase/database/database';
|
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 AuthConstants from './gatsby-plugin-firebase/constants/auth';
|
||||||
import DatabaseConstants from './gatsby-plugin-firebase/constants/database';
|
import DatabaseConstants from './gatsby-plugin-firebase/constants/database';
|
||||||
|
import FunctionsConstants from './gatsby-plugin-firebase/constants/functions';
|
||||||
|
|
||||||
class FirebaseStub {
|
class FirebaseStub {
|
||||||
static auth() {
|
static auth() {
|
||||||
@ -11,6 +13,10 @@ class FirebaseStub {
|
|||||||
static database() {
|
static database() {
|
||||||
return Database.instance;
|
return Database.instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static functions() {
|
||||||
|
return Functions.instance;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FirebaseStub.database.ServerValue = {};
|
FirebaseStub.database.ServerValue = {};
|
||||||
@ -21,4 +27,4 @@ Object.defineProperty(FirebaseStub.database.ServerValue, 'TIMESTAMP', {
|
|||||||
});
|
});
|
||||||
|
|
||||||
export default FirebaseStub;
|
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