Skip to content

Commit 049d3f2

Browse files
feat(dashboard): i18n string extraction for 7 remaining pages (#3192)
Closes #3182
1 parent 1a30dd0 commit 049d3f2

19 files changed

Lines changed: 785 additions & 387 deletions

dashboard/src/__tests__/AccessibilityIssue309.test.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, it, expect, vi, beforeEach } from 'vitest';
2+
import { I18nProvider } from '../i18n/context';
23
import { render, screen, waitFor, within } from '@testing-library/react';
34
import { MemoryRouter, Route, Routes } from 'react-router-dom';
45
import SessionTable from '../components/overview/SessionTable';
@@ -152,9 +153,11 @@ describe('Issue 309 accessibility fixes', () => {
152153
it('renders a labeled session message input', () => {
153154
render(
154155
<MemoryRouter initialEntries={['/sessions/session-1']}>
156+
<I18nProvider>
155157
<Routes>
156158
<Route path="/sessions/:id" element={<SessionDetailPage />} />
157159
</Routes>
160+
</I18nProvider>
158161
</MemoryRouter>,
159162
);
160163

dashboard/src/__tests__/AuthKeysPage.test.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2+
import { I18nProvider } from '../i18n/context';
23
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
34
import { MemoryRouter, Route, Routes, Navigate } from 'react-router-dom';
45
import AuthKeysPage from '../pages/AuthKeysPage';
@@ -38,13 +39,15 @@ describe('AuthKeysPage', () => {
3839
function renderPage(initialPath: string = '/auth/keys'): void {
3940
render(
4041
<MemoryRouter initialEntries={[initialPath]}>
41-
<Routes>
42-
<Route
43-
path="/users"
44-
element={<Navigate to="/auth/keys" replace state={{ usersRedirect: true }} />}
45-
/>
46-
<Route path="/auth/keys" element={<AuthKeysPage />} />
47-
</Routes>
42+
<I18nProvider>
43+
<Routes>
44+
<Route
45+
path="/users"
46+
element={<Navigate to="/auth/keys" replace state={{ usersRedirect: true }} />}
47+
/>
48+
<Route path="/auth/keys" element={<AuthKeysPage />} />
49+
</Routes>
50+
</I18nProvider>
4851
</MemoryRouter>,
4952
);
5053
}
@@ -103,7 +106,7 @@ describe('AuthKeysPage', () => {
103106
});
104107

105108
fireEvent.change(screen.getByLabelText('Key Name'), { target: { value: 'ops-primary' } });
106-
fireEvent.click(screen.getByRole('button', { name: 'Create new auth key' }));
109+
fireEvent.click(screen.getByRole('button', { name: 'Create Auth Key' }));
107110

108111
await waitFor(() => {
109112
expect(mockCreateAuthKey).toHaveBeenCalledWith('ops-primary');

dashboard/src/__tests__/NewSessionPage.test.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, it, expect, vi, beforeEach } from 'vitest';
2+
import { I18nProvider } from '../i18n/context';
23
import { render, screen, fireEvent, waitFor, act } from '@testing-library/react';
34
import { MemoryRouter } from 'react-router-dom';
45
import NewSessionPage from '../pages/NewSessionPage';
@@ -38,7 +39,9 @@ function getField(name: string) {
3839
async function renderPage(): Promise<void> {
3940
render(
4041
<MemoryRouter>
42+
<I18nProvider>
4143
<NewSessionPage />
44+
</I18nProvider>
4245
</MemoryRouter>,
4346
);
4447
await waitFor(() => {

dashboard/src/__tests__/PipelineDetailPage.test.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2+
import { I18nProvider } from '../i18n/context';
23
import { render, screen, waitFor, act } from '@testing-library/react';
34
import { MemoryRouter, Route, Routes } from 'react-router-dom';
45
import PipelineDetailPage from '../pages/PipelineDetailPage';
@@ -41,9 +42,11 @@ const mockPipeline: PipelineInfo = {
4142
function renderPage(id = 'pipe-1'): void {
4243
render(
4344
<MemoryRouter initialEntries={[`/pipelines/${id}`]}>
45+
<I18nProvider>
4446
<Routes>
4547
<Route path="/pipelines/:id" element={<PipelineDetailPage />} />
4648
</Routes>
49+
</I18nProvider>
4750
</MemoryRouter>,
4851
);
4952
}

dashboard/src/__tests__/ScreenshotCapture319.test.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, it, expect, vi, beforeEach } from 'vitest';
2+
import { I18nProvider } from '../i18n/context';
23
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
34
import { MemoryRouter, Route, Routes } from 'react-router-dom';
45
import SessionDetailPage from '../pages/SessionDetailPage';
@@ -82,9 +83,11 @@ vi.mock('../components/session/ApprovalBanner', () => ({
8283
function renderPage(): void {
8384
render(
8485
<MemoryRouter initialEntries={['/sessions/session-1']}>
86+
<I18nProvider>
8587
<Routes>
8688
<Route path="/sessions/:id" element={<SessionDetailPage />} />
8789
</Routes>
90+
</I18nProvider>
8891
</MemoryRouter>,
8992
);
9093
}

dashboard/src/__tests__/SessionDetailPage.test.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, it, expect, vi, beforeEach } from 'vitest';
2+
import { I18nProvider } from '../i18n/context';
23
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
34
import { MemoryRouter, Route, Routes } from 'react-router-dom';
45
import SessionDetailPage from '../pages/SessionDetailPage';
@@ -57,9 +58,11 @@ vi.mock('../components/session/SessionSummaryCard', () => ({
5758
function renderPage(): void {
5859
render(
5960
<MemoryRouter initialEntries={['/sessions/session-1']}>
60-
<Routes>
61-
<Route path="/sessions/:id" element={<SessionDetailPage />} />
62-
</Routes>
61+
<I18nProvider>
62+
<Routes>
63+
<Route path="/sessions/:id" element={<SessionDetailPage />} />
64+
</Routes>
65+
</I18nProvider>
6366
</MemoryRouter>,
6467
);
6568
}

dashboard/src/__tests__/SessionHistoryPage.test.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest';
2+
import { I18nProvider } from '../i18n/context';
23
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
34
import { MemoryRouter } from 'react-router-dom';
45
import SessionHistoryPage from '../pages/SessionHistoryPage';
@@ -21,7 +22,9 @@ vi.mock('react-router-dom', async () => {
2122
function renderPage(initialPath = '/') {
2223
return render(
2324
<MemoryRouter initialEntries={[initialPath]}>
25+
<I18nProvider>
2426
<SessionHistoryPage />
27+
</I18nProvider>
2528
</MemoryRouter>,
2629
);
2730
}

dashboard/src/__tests__/SettingsPage.test.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2+
import { I18nProvider } from '../i18n/context';
23
import { fireEvent, render, screen } from '@testing-library/react';
34
import SettingsPage from '../pages/SettingsPage';
45

@@ -26,7 +27,7 @@ describe('SettingsPage', () => {
2627
});
2728

2829
function renderPage(): void {
29-
render(<SettingsPage />);
30+
render(<I18nProvider><SettingsPage /></I18nProvider>);
3031
}
3132

3233
it('renders the settings page with header and sections', () => {

dashboard/src/__tests__/TemplatesPage.test.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/react';
77
import { BrowserRouter } from 'react-router-dom';
88
import { act } from 'react';
99
import TemplatesPage from '../pages/TemplatesPage';
10+
import { I18nProvider } from '../i18n/context';
1011
import * as client from '../api/client';
1112
import type { SessionTemplate } from '../types';
1213

@@ -50,7 +51,9 @@ const mockTemplates: SessionTemplate[] = [
5051
function renderPage() {
5152
return render(
5253
<BrowserRouter>
54+
<I18nProvider>
5355
<TemplatesPage />
56+
</I18nProvider>
5457
</BrowserRouter>,
5558
);
5659
}

dashboard/src/__tests__/a11y-pages.test.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,23 +465,27 @@ describe('a11y: page landmarks and ARIA', () => {
465465
it('steps table has aria-label after loading', async () => {
466466
render(
467467
<MemoryRouter initialEntries={['/pipelines/test-pipeline-id']}>
468+
<I18nProvider>
468469
<Routes>
469470
<Route path="/pipelines/:id" element={<PipelineDetailPage />} />
470471
</Routes>
472+
</I18nProvider>
471473
</MemoryRouter>,
472474
);
473475
await waitFor(() => {
474-
const table = document.querySelector('table[aria-label="Pipeline steps"]');
476+
const table = document.querySelector('table[aria-label="Steps"]');
475477
expect(table).not.toBeNull();
476478
}, { timeout: 3000 });
477479
});
478480

479481
it('renders a page-level h1 after loading', async () => {
480482
render(
481483
<MemoryRouter initialEntries={['/pipelines/test-pipeline-id']}>
484+
<I18nProvider>
482485
<Routes>
483486
<Route path="/pipelines/:id" element={<PipelineDetailPage />} />
484487
</Routes>
488+
</I18nProvider>
485489
</MemoryRouter>,
486490
);
487491
await waitFor(() => {

0 commit comments

Comments
 (0)