fix(i18n): localize generated labels without changing saved content
This commit is contained in:
@@ -98,6 +98,20 @@ function action(row: JobApplication, language: Sample['language'] = 'en') {
|
||||
: signal.actionKey === 'interview-prep' ? t.jobTableInterviewStage : signal.actionKey === 'follow-up' ? t.jobTableFollowUp : t.jobTableReadiness;
|
||||
return `${label}: ${row.jobTitle}`;
|
||||
}
|
||||
function fixtureReason(row: JobApplication, language: Sample['language']) {
|
||||
if (language === 'en') return row.workflowSignal!.reason;
|
||||
const t = translations[language];
|
||||
switch (row.workflowSignal!.actionKey) {
|
||||
case 'package-work': return t.reminderReasonCvAndAnswers;
|
||||
case 'interview-prep': return t.reminderReasonInterview;
|
||||
case 'review-readiness': return t.reminderReasonNoGaps;
|
||||
default: {
|
||||
const feedback = /^Feedback requested (\d+)d ago$/.exec(row.workflowSignal!.reason);
|
||||
expect(feedback).not.toBeNull();
|
||||
return text(t.reminderReasonFeedbackDays, { days: feedback![1] });
|
||||
}
|
||||
}
|
||||
}
|
||||
function requests(session: Session, method: string, path: string) { return session.requests.filter(request => request.method === method && request.path === path); }
|
||||
function hold() { let release!: () => void; const pending = new Promise<void>(resolve => { release = resolve; }); return { pending, release }; }
|
||||
async function keyboard(page: Page, control: Locator) { await control.focus(); await expect(control).toBeFocused(); await page.keyboard.press('Enter'); }
|
||||
@@ -261,7 +275,7 @@ test('[P7-05 Reminders] committed PATCH204 followed by a failed reload retries o
|
||||
} finally { gate.release(); }
|
||||
});
|
||||
|
||||
test('[P7-05 Reminders] live EN/Bokmal translates status/date controls and preserves raw reasons without a page-triggered refetch', async ({ page, session }, info) => {
|
||||
test('[P7-05 Reminders] live EN/Bokmal translates status/date controls and generated reasons without a page-triggered refetch', async ({ page, session }, info) => {
|
||||
test.setTimeout(90_000); const { rows } = await groups(page.request, session.owner);
|
||||
await enter(page, session.owner); await expect(region(page).getByRole('article')).toHaveCount(4);
|
||||
await expect.poll(() => requests(session, 'GET', '/api/jobapplications/reminders').length).toBeGreaterThanOrEqual(2);
|
||||
@@ -269,7 +283,7 @@ test('[P7-05 Reminders] live EN/Bokmal translates status/date controls and prese
|
||||
const preference = response(page, 'PUT', `${apiUrl}/auth/preferences/language`);
|
||||
await keyboard(page, page.locator('header').getByRole('button', { name: 'Norsk', exact: true })); expect((await preference).status()).toBe(204);
|
||||
await expect(page.locator('html')).toHaveAttribute('lang', 'nb-NO'); await expect(region(page, 'nb').getByRole('article')).toHaveCount(4);
|
||||
for (const row of rows) await expect(article(page, row.jobTitle)).toContainText(row.workflowSignal!.reason);
|
||||
for (const row of rows) await expect(article(page, row.jobTitle)).toContainText(fixtureReason(row, 'nb'));
|
||||
await expect(article(page, rows[1].jobTitle).getByText(translations.nb.statusInterview, { exact: true })).toBeVisible();
|
||||
const authoritative = (await read(page.request)).find(row => row.id === rows[3].id)!;
|
||||
const date = await page.evaluate(value => new Date(value).toLocaleDateString('nb-NO'), authoritative.followUpAt!);
|
||||
@@ -297,7 +311,7 @@ test('[P7-05 Reminders] eight finite bilingual theme widths preserve long rows a
|
||||
await enter(page, session.owner, sample); await expect(region(page, sample.language).getByRole('article')).toHaveCount(4);
|
||||
for (const row of rows) {
|
||||
await expect(article(page, row.jobTitle).getByRole('heading', { level: 4 })).toContainText(row.jobTitle);
|
||||
await expect(article(page, row.jobTitle)).toContainText(row.workflowSignal!.reason);
|
||||
await expect(article(page, row.jobTitle)).toContainText(fixtureReason(row, sample.language));
|
||||
const open = article(page, row.jobTitle).getByRole('button', { name: action(row, sample.language), exact: true });
|
||||
await open.scrollIntoViewIfNeeded(); await open.focus(); await expect(open).toBeFocused();
|
||||
for (const days of [3, 7]) { await snooze(page, row, days, sample.language).focus(); await expect(snooze(page, row, days, sample.language)).toBeFocused(); }
|
||||
|
||||
Reference in New Issue
Block a user