89 lines
3.7 KiB
TypeScript
89 lines
3.7 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
const BASE_URL = 'http://localhost:1313';
|
|
|
|
test.describe('Language switching functionality', () => {
|
|
test('switches between languages and verifies lang attribute', async ({ page }) => {
|
|
test.skip(process.env.TEST_NO_MENUS === 'true', 'Skipping test because TEST_NO_MENUS is true');
|
|
|
|
// Go to homepage
|
|
await page.goto(BASE_URL);
|
|
|
|
// Verify initial English state
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'en');
|
|
await expect(page.getByText('Language').last()).toBeVisible();
|
|
await expect(page.getByText('Experience').first()).toBeVisible();
|
|
|
|
// Switch to Spanish
|
|
await page.locator('div#footer-language-selector button').click();
|
|
await page.getByText('Español').last().click();
|
|
|
|
// Verify Spanish
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'es');
|
|
await expect(page.getByText('Idioma').last()).toBeVisible();
|
|
await expect(page.getByText('Experiencia').first()).toBeVisible();
|
|
|
|
// Switch to French
|
|
await page.locator('div#footer-language-selector button').click();
|
|
await page.getByText('Français').last().click();
|
|
|
|
// Verify French
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'fr');
|
|
await expect(page.getByText('Langue').last()).toBeVisible();
|
|
await expect(page.getByText('Expérience').first()).toBeVisible();
|
|
});
|
|
|
|
test('maintains language when navigating to experience pages', async ({ page }) => {
|
|
// Start in Spanish
|
|
await page.goto(`${BASE_URL}/es/`);
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'es');
|
|
|
|
// Click on an experience link
|
|
await page.getByText('Ver todo').click();
|
|
|
|
// Verify URL and language maintained
|
|
await expect(page).toHaveURL(`${BASE_URL}/es/experience/`);
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'es');
|
|
await expect(page.getByText('Experiencia').first()).toBeVisible();
|
|
});
|
|
|
|
test('preserves translations across page types', async ({ page }) => {
|
|
test.skip(process.env.TEST_NO_MENUS === 'true', 'Skipping test because TEST_NO_MENUS is true');
|
|
|
|
// Go to French experience page
|
|
await page.goto(`${BASE_URL}/fr/experience`);
|
|
|
|
// Verify French state
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'fr');
|
|
await expect(page.getByText('Expérience').first()).toBeVisible();
|
|
|
|
// Navigate to home
|
|
await page.getByText('ACCUEIL').first().click();
|
|
|
|
// Verify language maintained
|
|
await expect(page.locator('html')).toHaveAttribute('lang', 'fr');
|
|
await expect(page.getByText('Langue').last()).toBeVisible();
|
|
});
|
|
|
|
test('section IDs are translated in Spanish and French', async ({ page }) => {
|
|
// Spanish
|
|
await page.goto(`${BASE_URL}/es/`);
|
|
await expect(page.locator('#sobre-mi')).toBeVisible();
|
|
await expect(page.locator('#social')).toBeVisible();
|
|
await expect(page.locator('#sobre-mi')).toBeVisible();
|
|
await expect(page.locator('#formacion-academica')).toBeVisible();
|
|
await expect(page.locator('#experiencia-laboral')).toBeVisible();
|
|
await expect(page.locator('#trabajo')).toBeVisible();
|
|
await expect(page.locator('#testimonios')).toBeVisible();
|
|
|
|
// French
|
|
await page.goto(`${BASE_URL}/fr/`);
|
|
await expect(page.locator('#section-vedette')).toBeVisible();
|
|
await expect(page.locator('#liens-plateforme')).toBeVisible();
|
|
await expect(page.locator('#a-propos')).toBeVisible();
|
|
await expect(page.locator('#formation-academique')).toBeVisible();
|
|
await expect(page.locator('#experience-professionnelle')).toBeVisible();
|
|
await expect(page.locator('#travail')).toBeVisible();
|
|
await expect(page.locator('#temoignages')).toBeVisible();
|
|
});
|
|
}); |