Dashboard page: unit tests separated in different files

This commit is contained in:
gianantoniopini
2021-02-01 18:00:52 +01:00
parent 5ee077dac5
commit e39026c8b4
6 changed files with 583 additions and 483 deletions

View File

@ -0,0 +1,103 @@
import {
fireEvent,
queryByText,
screen,
waitFor,
} from '@testing-library/react';
import FirebaseStub, { DatabaseConstants } from 'gatsby-plugin-firebase';
import { menuToggleDataTestIdPrefix as resumePreviewMenuToggleDataTestIdPrefix } from '../../../components/dashboard/ResumePreview';
import {
setupWithFetchMockAndWaitForLoadingScreenToDisappear,
waitForResumeToBeRenderedInPreview,
expectResumeToBeRenderedInPreview,
unsplashPhotoResponseUrl,
} from './helpers/dashboard';
async function setup() {
const user = DatabaseConstants.user1;
const userResumes = await setupWithFetchMockAndWaitForLoadingScreenToDisappear(
user,
);
const [resumeToDuplicate] = Object.values(userResumes).filter(
(resume) => resume.id === DatabaseConstants.demoStateResume1Id,
);
const resumeToDuplicateId = resumeToDuplicate.id;
const duplicateResumeName = `${resumeToDuplicate.name} Copy`;
const resumeToDuplicateMenuToggle = await screen.findByTestId(
`${resumePreviewMenuToggleDataTestIdPrefix}${resumeToDuplicateId}`,
);
fireEvent.click(resumeToDuplicateMenuToggle);
const menuItems = screen.getAllByRole('menuitem');
let duplicateMenuItem = null;
for (let index = 0; index < menuItems.length; index++) {
if (queryByText(menuItems[index], /duplicate/i)) {
duplicateMenuItem = menuItems[index];
break;
}
}
fireEvent.click(duplicateMenuItem);
return { user, resumeToDuplicate, duplicateResumeName };
}
it('renders duplicate resume in preview', async () => {
const { duplicateResumeName } = await setup();
await waitFor(() =>
expect(
expectResumeToBeRenderedInPreview(duplicateResumeName),
).resolves.toBeUndefined(),
);
});
it('adds duplicate resume to database', async () => {
const now = new Date().getTime();
const { user, resumeToDuplicate, duplicateResumeName } = await setup();
await waitForResumeToBeRenderedInPreview(duplicateResumeName);
const actualUserResumes = (
await FirebaseStub.database()
.ref(DatabaseConstants.resumesPath)
.orderByChild('user')
.equalTo(user.uid)
.once('value')
).val();
expect(Object.values(actualUserResumes)).toHaveLength(3);
const actualUserResumesFiltered = Object.values(actualUserResumes).filter(
(resume) =>
resume.name === duplicateResumeName && resume.id !== resumeToDuplicate.id,
);
expect(actualUserResumesFiltered).toHaveLength(1);
const createdResume = actualUserResumesFiltered[0];
expect(createdResume.id).toBeTruthy();
expect(createdResume.preview).toBeTruthy();
expect(createdResume.preview).toEqual(unsplashPhotoResponseUrl);
expect(createdResume.createdAt).toBeTruthy();
expect(createdResume.createdAt).toBeGreaterThanOrEqual(now);
expect(createdResume.createdAt).toEqual(createdResume.updatedAt);
const expectedResume = {
...resumeToDuplicate,
id: createdResume.id,
name: createdResume.name,
preview: createdResume.preview,
createdAt: createdResume.createdAt,
updatedAt: createdResume.updatedAt,
};
expect(createdResume).toEqual(expectedResume);
});
it('closes menu', async () => {
const { duplicateResumeName } = await setup();
const menuItems = screen.queryAllByRole('menuitem');
expect(menuItems).toHaveLength(0);
await waitForResumeToBeRenderedInPreview(duplicateResumeName);
});