diff --git a/job-tracker-ui/src/end-to-end-trust-loop.test.tsx b/job-tracker-ui/src/end-to-end-trust-loop.test.tsx index 1c449d7..d2eda85 100644 --- a/job-tracker-ui/src/end-to-end-trust-loop.test.tsx +++ b/job-tracker-ui/src/end-to-end-trust-loop.test.tsx @@ -110,6 +110,20 @@ describe('end-to-end trust loop', () => { if (url === '/jobapplications/42') return Promise.resolve({ data: jobRecord } as any); if (url === '/auth/me') return Promise.resolve({ data: { roles: [], profileCvText: 'Master CV text' } } as any); if (url === '/jobapplications/42/history') return Promise.resolve({ data: [] } as any); + if (url === '/jobapplications/42/tailored-cv-draft') { + return Promise.resolve({ + data: { + templateId: 'ats-minimal', + headline: 'Backend Developer', + summary: ['Tailored for the Acme backend role'], + selectedSkills: [], + experience: [], + education: [], + customSections: [], + status: 'saved', + }, + } as any); + } if (url === '/attachments/42') return Promise.resolve({ data: [{ id: 9, fileName: 'resume.pdf', uploadDate: new Date().toISOString(), fileType: 'application/pdf', fileSize: 1234, purpose: 'resume', useForAi: true }] } as any); if (url === '/correspondence/42') return Promise.resolve({ data: correspondenceMessages } as any); if (url === '/gmail/status') return Promise.resolve({ data: { connected: true, gmailAddress: 'user@example.test', lastSyncedAt: new Date().toISOString() } } as any); @@ -207,7 +221,7 @@ describe('end-to-end trust loop', () => { fireEvent.click(screen.getByRole('tab', { name: /tailored cv/i })); - expect(await screen.findByDisplayValue('Saved CV')).toBeInTheDocument(); + expect((await screen.findAllByDisplayValue(/tailored for the acme backend role/i)).length).toBeGreaterThan(0); expect(await screen.findByDisplayValue('Saved cover letter')).toBeInTheDocument(); expect(await screen.findByDisplayValue('Saved application answer')).toBeInTheDocument(); expect(await screen.findByDisplayValue('Saved recruiter message')).toBeInTheDocument(); diff --git a/job-tracker-ui/src/setupTests.ts b/job-tracker-ui/src/setupTests.ts index 00e6cb3..b21d22f 100644 --- a/job-tracker-ui/src/setupTests.ts +++ b/job-tracker-ui/src/setupTests.ts @@ -1,4 +1,11 @@ import React from 'react'; +import { configure } from '@testing-library/react'; + +// Heavy MUI views (job table, workspace dialog, profile page) can exceed the +// 1s default async query timeout on slower machines; findBy*/waitFor assertions +// still resolve as soon as the element appears. +configure({ asyncUtilTimeout: 4000 }); +jest.setTimeout(30000); jest.mock('./api', () => ({ api: {