test: stabilize generated draft workflow coverage
This commit is contained in:
@@ -7,6 +7,8 @@ import { ToastProvider } from './toast';
|
|||||||
import JobDetailsDialog from './components/JobDetailsDialog';
|
import JobDetailsDialog from './components/JobDetailsDialog';
|
||||||
import { api } from './api';
|
import { api } from './api';
|
||||||
|
|
||||||
|
jest.setTimeout(15000);
|
||||||
|
|
||||||
jest.mock('./api', () => ({
|
jest.mock('./api', () => ({
|
||||||
api: {
|
api: {
|
||||||
get: jest.fn(),
|
get: jest.fn(),
|
||||||
@@ -33,6 +35,12 @@ function renderDialog() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
Object.assign(navigator, {
|
||||||
|
clipboard: {
|
||||||
|
writeText: jest.fn().mockResolvedValue(undefined),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
mockedApi.get.mockImplementation((url: string) => {
|
mockedApi.get.mockImplementation((url: string) => {
|
||||||
if (url === '/jobapplications/42') {
|
if (url === '/jobapplications/42') {
|
||||||
return Promise.resolve({ data: { id: 42, jobTitle: 'Backend Developer', status: 'Applied', dateApplied: new Date().toISOString(), daysSince: 3, company: { name: 'Acme', recruiterEmail: 'recruiter@acme.test' }, tailoredCvText: '', shortSummary: 'summary' } } as any);
|
return Promise.resolve({ data: { id: 42, jobTitle: 'Backend Developer', status: 'Applied', dateApplied: new Date().toISOString(), daysSince: 3, company: { name: 'Acme', recruiterEmail: 'recruiter@acme.test' }, tailoredCvText: '', shortSummary: 'summary' } } as any);
|
||||||
@@ -49,20 +57,26 @@ beforeEach(() => {
|
|||||||
mockedApi.put.mockResolvedValue({ data: {} } as any);
|
mockedApi.put.mockResolvedValue({ data: {} } as any);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jest.clearAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
test('generated application package can be edited and saved', async () => {
|
test('generated application package can be edited and saved', async () => {
|
||||||
renderDialog();
|
renderDialog();
|
||||||
|
|
||||||
fireEvent.click(await screen.findByRole('tab', { name: /tailored cv/i }));
|
fireEvent.click(await screen.findByRole('tab', { name: /tailored cv/i }));
|
||||||
fireEvent.click(await screen.findByRole('button', { name: /generate application package/i }));
|
expect(await screen.findByRole('button', { name: /generate application package/i })).toBeInTheDocument();
|
||||||
|
|
||||||
|
fireEvent.click(screen.getByRole('button', { name: /generate application package/i }));
|
||||||
|
|
||||||
expect(await screen.findByDisplayValue('Generated CV')).toBeInTheDocument();
|
expect(await screen.findByDisplayValue('Generated CV')).toBeInTheDocument();
|
||||||
const coverLetter = await screen.findByDisplayValue('Draft letter');
|
const coverLetter = await screen.findByDisplayValue('Draft letter');
|
||||||
fireEvent.change(coverLetter, { target: { value: 'Edited cover letter' } });
|
fireEvent.change(coverLetter, { target: { value: 'Edited cover letter' } });
|
||||||
|
|
||||||
const saveButtons = screen.getAllByRole('button', { name: /^save$/i });
|
const saveButtons = await screen.findAllByRole('button', { name: /^save$/i });
|
||||||
fireEvent.click(saveButtons[0]);
|
fireEvent.click(saveButtons[0]);
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(mockedApi.put).toHaveBeenCalled();
|
expect(mockedApi.put).toHaveBeenCalledWith('/jobapplications/42/application-drafts', { coverLetterText: 'Edited cover letter' });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user