From dc18e84bc2cbfabcbde6594f6c1ba6d5b2971cc6 Mon Sep 17 00:00:00 2001 From: gianantoniopini <63844628+gianantoniopini@users.noreply.github.com> Date: Fri, 22 Jan 2021 16:42:21 +0100 Subject: [PATCH] Dashboard: updated unit tests for Delete resume --- .../database/reference.js | 11 ++- src/pages/app/__tests__/builder.test.js | 11 ++- src/pages/app/__tests__/dashboard.test.js | 71 +++++++++++++------ 3 files changed, 63 insertions(+), 30 deletions(-) diff --git a/__mocks__/gatsby-plugin-firebase/database/reference.js b/__mocks__/gatsby-plugin-firebase/database/reference.js index ea04ee40..305c82b7 100644 --- a/__mocks__/gatsby-plugin-firebase/database/reference.js +++ b/__mocks__/gatsby-plugin-firebase/database/reference.js @@ -1,6 +1,5 @@ /* eslint-disable no-underscore-dangle */ import { v4 as uuidv4 } from 'uuid'; -import { debounce } from 'lodash'; import DatabaseConstants from '../constants/database'; import DataSnapshot from './dataSnapshot'; @@ -148,11 +147,7 @@ class Reference { ? this._dataSnapshot : new DataSnapshot(() => this._getData(), snapshotValue); - const debouncedEventCallback = debounce( - this.eventCallbacks[eventType], - DatabaseConstants.defaultDelayInMilliseconds, - ); - debouncedEventCallback(snapshot); + this.eventCallbacks[eventType](snapshot); } equalTo(value) { @@ -173,7 +168,9 @@ class Reference { this.eventCallbacks[eventType] = callback; if (eventType === DatabaseConstants.valueEventType) { - this.triggerEventCallback(eventType); + setTimeout(() => { + this.triggerEventCallback(eventType); + }, DatabaseConstants.defaultDelayInMilliseconds); } return callback; diff --git a/src/pages/app/__tests__/builder.test.js b/src/pages/app/__tests__/builder.test.js index c6f0ebd5..55860935 100644 --- a/src/pages/app/__tests__/builder.test.js +++ b/src/pages/app/__tests__/builder.test.js @@ -23,6 +23,7 @@ import { } from '../../../contexts/DatabaseContext'; import { ResumeProvider } from '../../../contexts/ResumeContext'; import { StorageProvider } from '../../../contexts/StorageContext'; +import Wrapper from '../../../components/shared/Wrapper'; import Builder from '../builder'; describe('Builder', () => { @@ -60,7 +61,9 @@ describe('Builder', () => { - + + + @@ -212,6 +215,12 @@ describe('Builder', () => { await setup(DatabaseConstants.demoStateResume1Id, false, false); }); + afterEach(async () => { + await waitForElementToBeRemoved(() => + screen.getByTestId(loadingScreenTestId), + ); + }); + it('renders loading screen', () => { expect(screen.getByTestId(loadingScreenTestId)).toBeInTheDocument(); }); diff --git a/src/pages/app/__tests__/dashboard.test.js b/src/pages/app/__tests__/dashboard.test.js index f65cfbb5..385493b9 100644 --- a/src/pages/app/__tests__/dashboard.test.js +++ b/src/pages/app/__tests__/dashboard.test.js @@ -20,6 +20,7 @@ import { UserProvider } from '../../../contexts/UserContext'; import { DatabaseProvider } from '../../../contexts/DatabaseContext'; import { ResumeProvider } from '../../../contexts/ResumeContext'; import { StorageProvider } from '../../../contexts/StorageContext'; +import Wrapper from '../../../components/shared/Wrapper'; import Dashboard from '../dashboard'; describe('Dashboard', () => { @@ -46,7 +47,9 @@ describe('Dashboard', () => { - + + + @@ -67,25 +70,33 @@ describe('Dashboard', () => { await setup(); }); - it('document title', () => { - expect(document.title).toEqual('Dashboard | Reactive Resume'); + it('document title', async () => { + await waitFor(() => { + expect(document.title).toEqual('Dashboard | Reactive Resume'); + }); }); - it('create resume', () => { - expect(screen.getByText(/create resume/i)).toBeInTheDocument(); + it('create resume', async () => { + await waitFor(() => { + expect(screen.getByText(/create resume/i)).toBeInTheDocument(); + }); }); - it('preview of user resumes', () => { + it('preview of user resumes', async () => { expect(Object.keys(resumes)).toHaveLength(2); expect(Object.values(resumes)[0].user).toEqual(user.uid); - expect( - screen.getByText(Object.values(resumes)[0].name), - ).toBeInTheDocument(); + await waitFor(() => { + expect( + screen.getByText(Object.values(resumes)[0].name), + ).toBeInTheDocument(); + }); expect(Object.values(resumes)[1].user).toEqual(user.uid); - expect( - screen.getByText(Object.values(resumes)[1].name), - ).toBeInTheDocument(); + await waitFor(() => { + expect( + screen.getByText(Object.values(resumes)[1].name), + ).toBeInTheDocument(); + }); }); }); @@ -95,6 +106,10 @@ describe('Dashboard', () => { let undeletedResume = null; let resumeToDeleteId = null; + const waitForDatabaseRemoveFunctionToHaveCompleted = async () => { + await waitFor(() => mockDatabaseRemoveFunction.mock.results[0].value); + }; + beforeEach(async () => { await setup(); @@ -108,9 +123,13 @@ describe('Dashboard', () => { 'remove', ); - const resumeToDeleteMenuToggle = screen.getByTestId( - `${resumePreviewMenuToggleDataTestIdPrefix}${resumeToDeleteId}`, - ); + let resumeToDeleteMenuToggle = null; + await waitFor(() => { + resumeToDeleteMenuToggle = screen.queryByTestId( + `${resumePreviewMenuToggleDataTestIdPrefix}${resumeToDeleteId}`, + ); + return resumeToDeleteMenuToggle ? Promise.resolve() : Promise.reject(); + }); fireEvent.click(resumeToDeleteMenuToggle); const menuItems = screen.getAllByRole('menuitem'); @@ -124,26 +143,28 @@ describe('Dashboard', () => { fireEvent.click(deleteMenuItem); }); + afterEach(async () => { + await waitForDatabaseRemoveFunctionToHaveCompleted(); + }); + it('removes it from database and preview', async () => { await waitFor(() => expect(mockDatabaseRemoveFunction).toHaveBeenCalledTimes(1), ); + await waitForDatabaseRemoveFunctionToHaveCompleted(); + await waitFor(() => expect(screen.queryByText(resumeToDelete.name)).toBeNull(), ); expect(screen.getByText(undeletedResume.name)).toBeInTheDocument(); }); - /* it('displays notification', async () => { - await waitFor(() => - expect( - screen.getByText(`${resumeToDelete.name} was deleted successfully`), - ).toBeInTheDocument(), - ); + await waitFor(() => { + expect(screen.getByRole('alert')).toBeInTheDocument(); + }); }); - */ it('closes menu', () => { const menuItems = screen.queryAllByRole('menuitem'); @@ -156,6 +177,12 @@ describe('Dashboard', () => { await setup(false); }); + afterEach(async () => { + await waitForElementToBeRemoved(() => + screen.getByTestId(loadingScreenTestId), + ); + }); + it('renders loading screen', () => { expect(screen.getByTestId(loadingScreenTestId)).toBeInTheDocument(); });