2025-02-25 15:44:33 +01:00
|
|
|
import { Page, expect, test } from '@playwright/test';
|
2024-04-02 12:13:06 +02:00
|
|
|
|
2025-07-30 11:23:14 +02:00
|
|
|
import { TestLanguage, createDoc, waitForLanguageSwitch } from './utils-common';
|
2025-02-25 15:44:33 +01:00
|
|
|
|
|
|
|
|
test.describe.serial('Language', () => {
|
|
|
|
|
let page: Page;
|
|
|
|
|
|
|
|
|
|
test.beforeAll(async ({ browser }) => {
|
|
|
|
|
page = await browser.newPage();
|
|
|
|
|
});
|
2024-04-02 12:13:06 +02:00
|
|
|
|
2025-02-25 15:44:33 +01:00
|
|
|
test.afterAll(async () => {
|
|
|
|
|
await page.close();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
|
|
|
await page.goto('/');
|
|
|
|
|
await waitForLanguageSwitch(page, TestLanguage.English);
|
|
|
|
|
});
|
2024-04-02 12:13:06 +02:00
|
|
|
|
2025-02-25 15:44:33 +01:00
|
|
|
test.afterEach(async ({ page }) => {
|
|
|
|
|
// Switch back to English - important for other tests to run as expected
|
|
|
|
|
await waitForLanguageSwitch(page, TestLanguage.English);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('checks language switching', async ({ page }) => {
|
2024-04-02 12:13:06 +02:00
|
|
|
const header = page.locator('header').first();
|
2025-02-25 15:44:33 +01:00
|
|
|
|
2025-07-31 11:19:34 +02:00
|
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'en-us');
|
|
|
|
|
|
2025-02-25 15:44:33 +01:00
|
|
|
// initial language should be english
|
|
|
|
|
await expect(
|
|
|
|
|
page.getByRole('button', {
|
|
|
|
|
name: 'New doc',
|
|
|
|
|
}),
|
|
|
|
|
).toBeVisible();
|
|
|
|
|
|
|
|
|
|
// switch to french
|
|
|
|
|
await waitForLanguageSwitch(page, TestLanguage.French);
|
|
|
|
|
|
2025-07-31 11:19:34 +02:00
|
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'fr');
|
|
|
|
|
|
2024-10-04 13:27:53 +02:00
|
|
|
await expect(
|
2025-02-18 12:12:41 +01:00
|
|
|
header.getByRole('button').getByText('Français'),
|
2024-10-04 13:27:53 +02:00
|
|
|
).toBeVisible();
|
2024-04-02 12:13:06 +02:00
|
|
|
|
2024-11-13 15:11:10 +01:00
|
|
|
await expect(page.getByLabel('Se déconnecter')).toBeVisible();
|
2024-11-07 12:47:13 +01:00
|
|
|
|
2025-02-18 12:12:41 +01:00
|
|
|
await header.getByRole('button').getByText('Français').click();
|
2025-02-25 15:44:33 +01:00
|
|
|
await page.getByLabel('Deutsch').click();
|
2025-02-18 12:12:41 +01:00
|
|
|
await expect(header.getByRole('button').getByText('Deutsch')).toBeVisible();
|
2024-11-07 12:47:13 +01:00
|
|
|
|
2024-11-13 15:11:10 +01:00
|
|
|
await expect(page.getByLabel('Abmelden')).toBeVisible();
|
2025-07-31 11:19:34 +02:00
|
|
|
|
|
|
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'de');
|
2024-04-02 12:13:06 +02:00
|
|
|
});
|
2024-10-22 18:17:53 +02:00
|
|
|
|
|
|
|
|
test('checks that backend uses the same language as the frontend', async ({
|
|
|
|
|
page,
|
|
|
|
|
}) => {
|
|
|
|
|
// Helper function to intercept and assert 404 response
|
|
|
|
|
const check404Response = async (expectedDetail: string) => {
|
2025-04-10 22:54:59 +02:00
|
|
|
const interceptedBackendResponse = await page.request.get(
|
|
|
|
|
'http://localhost:8071/api/v1.0/documents/non-existent-doc-uuid/',
|
2024-10-22 18:17:53 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Assert that the intercepted error message is in the expected language
|
|
|
|
|
expect(await interceptedBackendResponse.json()).toStrictEqual({
|
|
|
|
|
detail: expectedDetail,
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Check for English 404 response
|
|
|
|
|
await check404Response('Not found.');
|
|
|
|
|
|
2025-02-25 15:44:33 +01:00
|
|
|
await waitForLanguageSwitch(page, TestLanguage.French);
|
2024-10-22 18:17:53 +02:00
|
|
|
|
|
|
|
|
// Check for French 404 response
|
|
|
|
|
await check404Response('Pas trouvé.');
|
|
|
|
|
});
|
2025-02-25 15:44:33 +01:00
|
|
|
|
|
|
|
|
test('it check translations of the slash menu when changing language', async ({
|
|
|
|
|
page,
|
|
|
|
|
browserName,
|
|
|
|
|
}) => {
|
|
|
|
|
await createDoc(page, 'doc-toolbar', browserName, 1);
|
|
|
|
|
|
|
|
|
|
const editor = page.locator('.ProseMirror');
|
2025-06-27 16:50:10 +02:00
|
|
|
|
2025-02-25 15:44:33 +01:00
|
|
|
// Trigger slash menu to show english menu
|
|
|
|
|
await editor.click();
|
|
|
|
|
await editor.fill('/');
|
|
|
|
|
await expect(page.getByText('Headings', { exact: true })).toBeVisible();
|
|
|
|
|
|
|
|
|
|
// Change language to French
|
|
|
|
|
await waitForLanguageSwitch(page, TestLanguage.French);
|
|
|
|
|
|
|
|
|
|
// Trigger slash menu to show french menu
|
2025-06-27 16:50:10 +02:00
|
|
|
await editor.locator('.bn-block-outer').last().fill('/');
|
2025-02-25 15:44:33 +01:00
|
|
|
await expect(page.getByText('Titres', { exact: true })).toBeVisible();
|
|
|
|
|
});
|
2024-04-02 12:13:06 +02:00
|
|
|
});
|