Jest mocks: added @reach/router and stub for Firebase auth signOut method

This commit is contained in:
gianantoniopini
2021-05-13 16:53:04 +02:00
parent ffb8ae45e0
commit d11d414504
5 changed files with 100 additions and 14 deletions

View File

@ -1,8 +1,14 @@
import { fireEvent, screen } from '@testing-library/react';
import { navigate as mockNavigateFunction } from '@reach/router';
import { fireEvent, screen, waitFor } from '@testing-library/react';
import FirebaseStub, { DatabaseConstants } from 'gatsby-plugin-firebase';
import FirebaseStub, {
DatabaseConstants,
FunctionsConstants,
} from 'gatsby-plugin-firebase';
import { setupAndWait } from './helpers/builder';
import { delay } from '../../../utils/index';
import { setupAndWait, findAndDismissNotification } from './helpers/builder';
const testTimeoutInMilliseconds = 20000;
jest.setTimeout(testTimeoutInMilliseconds);
@ -11,37 +17,75 @@ async function setup() {
const resumeId = DatabaseConstants.demoStateResume1Id;
await setupAndWait(resumeId, true, true);
const button = screen.getByRole('button', {
name: /Delete Account/i,
const mockFirebaseDeleteUserCloudFunction = jest.fn(async () => {
await delay(FunctionsConstants.defaultDelayInMilliseconds);
});
const mockFirebaseFunctionsHttpsCallable = jest.fn((name) =>
name === FunctionsConstants.deleteUserFunctionName
? mockFirebaseDeleteUserCloudFunction
: undefined,
);
FirebaseStub.functions().httpsCallable = mockFirebaseFunctionsHttpsCallable;
const mockFirebaseUserDelete = jest.spyOn(
const mockFirebaseCurrentUserDelete = jest.spyOn(
FirebaseStub.auth().currentUser,
'delete',
);
const button = screen.getByRole('button', {
name: /Delete Account/i,
});
return {
button,
mockFirebaseUserDelete,
mockFirebaseCurrentUserDelete,
mockFirebaseDeleteUserCloudFunction,
};
}
test('prompts for confirmation', async () => {
const { button, mockFirebaseUserDelete } = await setup();
const {
button,
mockFirebaseDeleteUserCloudFunction,
mockFirebaseCurrentUserDelete,
} = await setup();
fireEvent.click(button);
expect(button).toHaveTextContent('Are you sure?');
expect(mockFirebaseUserDelete).not.toHaveBeenCalled();
await waitFor(() =>
expect(mockFirebaseDeleteUserCloudFunction).not.toHaveBeenCalledTimes(1),
);
await waitFor(() =>
expect(mockFirebaseCurrentUserDelete).not.toHaveBeenCalled(),
);
});
/*
test('calls Firebase user delete', async () => {
const { button, mockFirebaseUserDelete } = await setup();
test('calls Firebase delete user cloud function', async () => {
const { button, mockFirebaseDeleteUserCloudFunction } = await setup();
fireEvent.click(button);
fireEvent.click(button);
expect(mockFirebaseUserDelete).toHaveBeenCalledTimes(1);
await waitFor(() => expect(mockNavigateFunction).toHaveBeenCalledTimes(1));
await findAndDismissNotification();
await waitFor(() =>
expect(mockFirebaseDeleteUserCloudFunction).toHaveBeenCalledTimes(1),
);
});
test('calls Firebase current user delete', async () => {
const { button, mockFirebaseCurrentUserDelete } = await setup();
fireEvent.click(button);
fireEvent.click(button);
await waitFor(() => expect(mockNavigateFunction).toHaveBeenCalledTimes(1));
await findAndDismissNotification();
await waitFor(() =>
expect(mockFirebaseCurrentUserDelete).toHaveBeenCalledTimes(1),
);
});
*/