fix(ui): retain locale-aware document review labels
This commit is contained in:
@@ -5,6 +5,7 @@ import { createMemoryRouter, RouterProvider } from 'react-router-dom';
|
||||
|
||||
import CvBuilderEditor from './views/CvBuilderEditor';
|
||||
import { I18nProvider } from './i18n/I18nProvider';
|
||||
import { translations } from './i18n/translations';
|
||||
import { ToastProvider } from './toast';
|
||||
import { api } from './api';
|
||||
import { emptyCvVariantSettings } from './cvBuilder';
|
||||
@@ -1117,6 +1118,17 @@ test('changing whole-document output language discards the previous-language rev
|
||||
expect(mockedApi.post.mock.calls.filter(([url]) => url === '/cv/ai/assist')).toHaveLength(1);
|
||||
});
|
||||
|
||||
test('whole-document review labels follow UI language without translating or discarding the proposal', async () => {
|
||||
await reviewDocumentSuggestion(JSON.stringify([{ id: 'headline', items: ['Reviewed headline'] }]));
|
||||
const review = screen.getByText('Review 1 proposed change(s)').closest('.MuiPaper-root') as HTMLElement;
|
||||
expect(within(review).getByText('Headline override')).toBeVisible();
|
||||
act(() => window.dispatchEvent(new StorageEvent('storage', { key: 'uiLanguage', newValue: 'nb' })));
|
||||
expect(within(review).getByText(translations.nb.cvEditorHeadlineOverride)).toBeVisible();
|
||||
expect(within(review).getByText('Reviewed headline')).toBeVisible();
|
||||
expect(mockedApi.post.mock.calls.filter(([url]) => url === '/cv/ai/assist')).toHaveLength(1);
|
||||
expect(mockedApi.post.mock.calls.filter(([url]) => url === '/cv/variants/3/ai/apply')).toHaveLength(0);
|
||||
});
|
||||
|
||||
test.each(['Apply', 'Reject'])('[PRES-C11 PRES-C07] whole-document AI %s changes only an explicitly accepted CV override', async action => {
|
||||
await reviewDocumentSuggestion(JSON.stringify([{ id: 'headline', items: ['Reviewed headline'] }]));
|
||||
expect(await screen.findByText('Review 1 proposed change(s)')).toBeInTheDocument();
|
||||
|
||||
@@ -985,7 +985,8 @@ function DocumentAiTab({ settings, outline, onGenerate, onAccept }: CvAiCallback
|
||||
<Stack spacing={1} sx={{ maxHeight: 360, overflowY: "auto" }}>
|
||||
{changed.map((block) => {
|
||||
const original = originals.find((item) => item.id === block.id);
|
||||
return <Paper key={block.id} variant="outlined" sx={{ p: 1 }}><Typography variant="caption" sx={{ fontWeight: 800 }}>{block.title ?? original?.title ?? block.id}</Typography><Box sx={{ display: "grid", gridTemplateColumns: { xs: "1fr", sm: "1fr 1fr" }, gap: 1, mt: 0.5 }}><Typography variant="body2" sx={{ whiteSpace: "pre-wrap", color: "text.secondary" }}>{[original?.subtitle, ...(original?.items ?? [])].filter(Boolean).join("\n")}</Typography><Typography variant="body2" sx={{ whiteSpace: "pre-wrap" }}>{[block.subtitle, ...(block.items ?? [])].filter(Boolean).join("\n")}</Typography></Box></Paper>;
|
||||
const label = block.title ?? original?.title ?? (block.id === "headline" ? t("cvEditorHeadlineOverride") : block.id);
|
||||
return <Paper key={block.id} variant="outlined" sx={{ p: 1 }}><Typography variant="caption" sx={{ fontWeight: 800 }}>{label}</Typography><Box sx={{ display: "grid", gridTemplateColumns: { xs: "1fr", sm: "1fr 1fr" }, gap: 1, mt: 0.5 }}><Typography variant="body2" sx={{ whiteSpace: "pre-wrap", color: "text.secondary" }}>{[original?.subtitle, ...(original?.items ?? [])].filter(Boolean).join("\n")}</Typography><Typography variant="body2" sx={{ whiteSpace: "pre-wrap" }}>{[block.subtitle, ...(block.items ?? [])].filter(Boolean).join("\n")}</Typography></Box></Paper>;
|
||||
})}
|
||||
</Stack>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user