Files
makelore/tests/e2e/language-russian.spec.ts
inman f4113a872f
Some checks failed
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled
收口 Makelore 客户端变更
2026-08-12 22:43:09 +08:00

121 lines
4.8 KiB
TypeScript

import type { Page } from '@playwright/test';
import { closeElectronApp, expect, getStableWindow, test } from './fixtures/electron';
async function openSettingsFromSidebarAccountMenu(page: Page): Promise<void> {
await page.getByTestId('sidebar-member-menu-trigger').click();
await page.getByTestId('sidebar-nav-settings').click();
}
async function expectSidebarSettingsLabel(page: Page, label: string): Promise<void> {
await page.getByTestId('sidebar-member-menu-trigger').click();
await expect(page.getByTestId('sidebar-nav-settings')).toContainText(label);
await page.keyboard.press('Escape');
}
test.describe('Russian language localization', () => {
test('shows Russian language option in setup wizard', async ({ launchElectronApp }) => {
const app = await launchElectronApp();
try {
const page = await getStableWindow(app);
// Should see the setup wizard
await expect(page.getByTestId('setup-page')).toBeVisible();
// Should have Russian language button visible
const russianButton = page.locator('button', { hasText: 'Русский' });
await expect(russianButton).toBeVisible();
} finally {
await closeElectronApp(app);
}
});
test('can switch to Russian language in setup wizard', async ({ launchElectronApp }) => {
const app = await launchElectronApp();
try {
const page = await getStableWindow(app);
await expect(page.getByTestId('setup-page')).toBeVisible();
// Click Russian language button
const russianButton = page.locator('button', { hasText: 'Русский' });
await russianButton.click();
// Verify UI renders in Russian by checking for Russian-only text
// "Добро пожаловать" is unique to Russian and won't appear in English
await expect(page.locator('h2')).toContainText('Добро пожаловать');
} finally {
await closeElectronApp(app);
}
});
test('Russian language persists after skipping setup', async ({ launchElectronApp }) => {
const app = await launchElectronApp();
let relaunchedApp: Awaited<ReturnType<typeof launchElectronApp>> | null = null;
let firstAppClosed = false;
try {
const page = await getStableWindow(app);
await expect(page.getByTestId('setup-page')).toBeVisible();
// Switch to Russian
const russianButton = page.locator('button', { hasText: 'Русский' });
await russianButton.click();
// Skip setup
await page.getByTestId('setup-skip-button').click();
await expect(page.getByTestId('ai-module-selection-page')).toBeVisible();
await closeElectronApp(app);
firstAppClosed = true;
relaunchedApp = await launchElectronApp({ skipSetup: true });
const relaunchedPage = await getStableWindow(relaunchedApp);
await expect(relaunchedPage.getByTestId('ai-module-selection-page')).toBeVisible();
await relaunchedPage.getByTestId('ai-module-option-programming').click();
await expect(relaunchedPage.getByTestId('main-layout')).toBeVisible();
// Bypass authentication only for the relaunch so the persisted setting
// can be verified without weakening the production login gate.
await openSettingsFromSidebarAccountMenu(relaunchedPage);
await expect(relaunchedPage).toHaveURL(/\/settings$/);
await expect(relaunchedPage.getByRole('heading', { name: 'Настройки', exact: true })).toBeVisible();
// Verify sidebar shows Russian text (not English)
// "Настройки" is Russian-only, English is "Settings"
await expectSidebarSettingsLabel(relaunchedPage, 'Настройки');
} finally {
if (relaunchedApp) await closeElectronApp(relaunchedApp);
if (!firstAppClosed) await closeElectronApp(app);
}
});
test('can switch to Russian in Settings page', async ({ launchElectronApp }) => {
const app = await launchElectronApp({ skipSetup: true });
try {
const page = await getStableWindow(app);
await expect(page.getByTestId('ai-module-selection-page')).toBeVisible();
await page.getByTestId('ai-module-option-programming').click();
await expect(page.getByTestId('main-layout')).toBeVisible();
// Navigate to Settings (in English by default after skipSetup)
await openSettingsFromSidebarAccountMenu(page);
await expect(page).toHaveURL(/\/settings$/);
// Select Russian from the current settings control.
await page.locator('#language').selectOption('ru');
await expect(page.getByRole('heading', { name: 'Настройки', exact: true })).toBeVisible();
// Verify sidebar switched to Russian
// "Настройки" is Russian-only, English is "Settings"
await expectSidebarSettingsLabel(page, 'Настройки');
} finally {
await closeElectronApp(app);
}
});
});