feat(admin): dispatch allowlisted maintenance jobs
CI and Deploy / test (push) Successful in 7m8s
CI and Deploy / deploy (push) Successful in 1m42s

This commit is contained in:
cesnimda
2026-09-01 16:53:54 +02:00
parent 3ec9ac1dad
commit 3b055b01f5
11 changed files with 328 additions and 8 deletions
+25 -1
View File
@@ -133,6 +133,17 @@ describe('AdminSystemPage', () => {
},
} as any);
}
if (url === '/admin/system/maintenance-jobs') {
return Promise.resolve({
data: [{
id: 'cv-benchmark',
title: 'CV extraction benchmark',
description: 'Runs the CV corpus benchmark.',
available: true,
runsUrl: 'https://git.example.test/actions',
}],
} as any);
}
return Promise.resolve({ data: {} } as any);
});
mockedApi.put.mockResolvedValue({
@@ -201,12 +212,25 @@ describe('AdminSystemPage', () => {
});
});
it('dispatches the allowlisted CV benchmark from the system panel', async () => {
mockedApi.post.mockResolvedValueOnce({ data: { jobId: 'cv-benchmark', status: 'queued' } } as any);
render(<I18nProvider><AdminSystemPage /></I18nProvider>);
fireEvent.click(await screen.findByRole('button', { name: /run benchmark/i }));
await waitFor(() => {
expect(mockedApi.post).toHaveBeenCalledWith('/admin/system/maintenance-jobs/cv-benchmark/runs');
});
expect(await screen.findByText(/queued in Gitea Actions/i)).toBeTruthy();
expect(screen.getByRole('link', { name: /view runs/i }).getAttribute('href')).toBe('https://git.example.test/actions');
});
it('localizes benchmark diagnostics without changing runtime values', async () => {
window.localStorage.setItem('uiLanguage', 'nb');
render(<I18nProvider><AdminSystemPage /></I18nProvider>);
expect(await screen.findByText('Gjennomgang av CV-referansetest')).toBeTruthy();
expect(screen.getByText(/Mistenkelig kontaktsted: san francisco, hobbies/i)).toBeTruthy();
expect(await screen.findByText(/Mistenkelig kontaktsted: san francisco, hobbies/i)).toBeTruthy();
expect(screen.getByText('Production')).toBeTruthy();
expect(screen.getByText(/Modell · qwen2.5:7b/i)).toBeTruthy();
fireEvent.click(screen.getByRole('tab', { name: /innstillinger/i }));