mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-21 20:21:32 +10:00
104 lines
3.3 KiB
JavaScript
104 lines
3.3 KiB
JavaScript
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);
|
|
});
|