Dashboard: updated unit tests for Delete resume

This commit is contained in:
gianantoniopini
2021-01-22 16:42:21 +01:00
parent cb2aeec70a
commit dc18e84bc2
3 changed files with 63 additions and 30 deletions

View File

@ -1,6 +1,5 @@
/* eslint-disable no-underscore-dangle */ /* eslint-disable no-underscore-dangle */
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { debounce } from 'lodash';
import DatabaseConstants from '../constants/database'; import DatabaseConstants from '../constants/database';
import DataSnapshot from './dataSnapshot'; import DataSnapshot from './dataSnapshot';
@ -148,11 +147,7 @@ class Reference {
? this._dataSnapshot ? this._dataSnapshot
: new DataSnapshot(() => this._getData(), snapshotValue); : new DataSnapshot(() => this._getData(), snapshotValue);
const debouncedEventCallback = debounce( this.eventCallbacks[eventType](snapshot);
this.eventCallbacks[eventType],
DatabaseConstants.defaultDelayInMilliseconds,
);
debouncedEventCallback(snapshot);
} }
equalTo(value) { equalTo(value) {
@ -173,7 +168,9 @@ class Reference {
this.eventCallbacks[eventType] = callback; this.eventCallbacks[eventType] = callback;
if (eventType === DatabaseConstants.valueEventType) { if (eventType === DatabaseConstants.valueEventType) {
this.triggerEventCallback(eventType); setTimeout(() => {
this.triggerEventCallback(eventType);
}, DatabaseConstants.defaultDelayInMilliseconds);
} }
return callback; return callback;

View File

@ -23,6 +23,7 @@ import {
} from '../../../contexts/DatabaseContext'; } from '../../../contexts/DatabaseContext';
import { ResumeProvider } from '../../../contexts/ResumeContext'; import { ResumeProvider } from '../../../contexts/ResumeContext';
import { StorageProvider } from '../../../contexts/StorageContext'; import { StorageProvider } from '../../../contexts/StorageContext';
import Wrapper from '../../../components/shared/Wrapper';
import Builder from '../builder'; import Builder from '../builder';
describe('Builder', () => { describe('Builder', () => {
@ -60,7 +61,9 @@ describe('Builder', () => {
<DatabaseProvider> <DatabaseProvider>
<ResumeProvider> <ResumeProvider>
<StorageProvider> <StorageProvider>
<Builder id={resumeId} /> <Wrapper>
<Builder id={resumeId} />
</Wrapper>
</StorageProvider> </StorageProvider>
</ResumeProvider> </ResumeProvider>
</DatabaseProvider> </DatabaseProvider>
@ -212,6 +215,12 @@ describe('Builder', () => {
await setup(DatabaseConstants.demoStateResume1Id, false, false); await setup(DatabaseConstants.demoStateResume1Id, false, false);
}); });
afterEach(async () => {
await waitForElementToBeRemoved(() =>
screen.getByTestId(loadingScreenTestId),
);
});
it('renders loading screen', () => { it('renders loading screen', () => {
expect(screen.getByTestId(loadingScreenTestId)).toBeInTheDocument(); expect(screen.getByTestId(loadingScreenTestId)).toBeInTheDocument();
}); });

View File

@ -20,6 +20,7 @@ import { UserProvider } from '../../../contexts/UserContext';
import { DatabaseProvider } from '../../../contexts/DatabaseContext'; import { DatabaseProvider } from '../../../contexts/DatabaseContext';
import { ResumeProvider } from '../../../contexts/ResumeContext'; import { ResumeProvider } from '../../../contexts/ResumeContext';
import { StorageProvider } from '../../../contexts/StorageContext'; import { StorageProvider } from '../../../contexts/StorageContext';
import Wrapper from '../../../components/shared/Wrapper';
import Dashboard from '../dashboard'; import Dashboard from '../dashboard';
describe('Dashboard', () => { describe('Dashboard', () => {
@ -46,7 +47,9 @@ describe('Dashboard', () => {
<DatabaseProvider> <DatabaseProvider>
<ResumeProvider> <ResumeProvider>
<StorageProvider> <StorageProvider>
<Dashboard user={user} /> <Wrapper>
<Dashboard user={user} />
</Wrapper>
</StorageProvider> </StorageProvider>
</ResumeProvider> </ResumeProvider>
</DatabaseProvider> </DatabaseProvider>
@ -67,25 +70,33 @@ describe('Dashboard', () => {
await setup(); await setup();
}); });
it('document title', () => { it('document title', async () => {
expect(document.title).toEqual('Dashboard | Reactive Resume'); await waitFor(() => {
expect(document.title).toEqual('Dashboard | Reactive Resume');
});
}); });
it('create resume', () => { it('create resume', async () => {
expect(screen.getByText(/create resume/i)).toBeInTheDocument(); 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.keys(resumes)).toHaveLength(2);
expect(Object.values(resumes)[0].user).toEqual(user.uid); expect(Object.values(resumes)[0].user).toEqual(user.uid);
expect( await waitFor(() => {
screen.getByText(Object.values(resumes)[0].name), expect(
).toBeInTheDocument(); screen.getByText(Object.values(resumes)[0].name),
).toBeInTheDocument();
});
expect(Object.values(resumes)[1].user).toEqual(user.uid); expect(Object.values(resumes)[1].user).toEqual(user.uid);
expect( await waitFor(() => {
screen.getByText(Object.values(resumes)[1].name), expect(
).toBeInTheDocument(); screen.getByText(Object.values(resumes)[1].name),
).toBeInTheDocument();
});
}); });
}); });
@ -95,6 +106,10 @@ describe('Dashboard', () => {
let undeletedResume = null; let undeletedResume = null;
let resumeToDeleteId = null; let resumeToDeleteId = null;
const waitForDatabaseRemoveFunctionToHaveCompleted = async () => {
await waitFor(() => mockDatabaseRemoveFunction.mock.results[0].value);
};
beforeEach(async () => { beforeEach(async () => {
await setup(); await setup();
@ -108,9 +123,13 @@ describe('Dashboard', () => {
'remove', 'remove',
); );
const resumeToDeleteMenuToggle = screen.getByTestId( let resumeToDeleteMenuToggle = null;
`${resumePreviewMenuToggleDataTestIdPrefix}${resumeToDeleteId}`, await waitFor(() => {
); resumeToDeleteMenuToggle = screen.queryByTestId(
`${resumePreviewMenuToggleDataTestIdPrefix}${resumeToDeleteId}`,
);
return resumeToDeleteMenuToggle ? Promise.resolve() : Promise.reject();
});
fireEvent.click(resumeToDeleteMenuToggle); fireEvent.click(resumeToDeleteMenuToggle);
const menuItems = screen.getAllByRole('menuitem'); const menuItems = screen.getAllByRole('menuitem');
@ -124,26 +143,28 @@ describe('Dashboard', () => {
fireEvent.click(deleteMenuItem); fireEvent.click(deleteMenuItem);
}); });
afterEach(async () => {
await waitForDatabaseRemoveFunctionToHaveCompleted();
});
it('removes it from database and preview', async () => { it('removes it from database and preview', async () => {
await waitFor(() => await waitFor(() =>
expect(mockDatabaseRemoveFunction).toHaveBeenCalledTimes(1), expect(mockDatabaseRemoveFunction).toHaveBeenCalledTimes(1),
); );
await waitForDatabaseRemoveFunctionToHaveCompleted();
await waitFor(() => await waitFor(() =>
expect(screen.queryByText(resumeToDelete.name)).toBeNull(), expect(screen.queryByText(resumeToDelete.name)).toBeNull(),
); );
expect(screen.getByText(undeletedResume.name)).toBeInTheDocument(); expect(screen.getByText(undeletedResume.name)).toBeInTheDocument();
}); });
/*
it('displays notification', async () => { it('displays notification', async () => {
await waitFor(() => await waitFor(() => {
expect( expect(screen.getByRole('alert')).toBeInTheDocument();
screen.getByText(`${resumeToDelete.name} was deleted successfully`), });
).toBeInTheDocument(),
);
}); });
*/
it('closes menu', () => { it('closes menu', () => {
const menuItems = screen.queryAllByRole('menuitem'); const menuItems = screen.queryAllByRole('menuitem');
@ -156,6 +177,12 @@ describe('Dashboard', () => {
await setup(false); await setup(false);
}); });
afterEach(async () => {
await waitForElementToBeRemoved(() =>
screen.getByTestId(loadingScreenTestId),
);
});
it('renders loading screen', () => { it('renders loading screen', () => {
expect(screen.getByTestId(loadingScreenTestId)).toBeInTheDocument(); expect(screen.getByTestId(loadingScreenTestId)).toBeInTheDocument();
}); });