mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-21 20:21:32 +10:00
Dashboard page: unit tests separated in different files
This commit is contained in:
103
src/pages/app/__tests__/dashboard.duplicateResume.test.js
Normal file
103
src/pages/app/__tests__/dashboard.duplicateResume.test.js
Normal 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);
|
||||
});
|
||||
Reference in New Issue
Block a user