HH/e2e/tests/security/arabic-rtl.spec.ts
2026-04-08 17:13:35 +03:00

94 lines
3.3 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { RoleAuthHelper, PublicFormHelper } from '../../helpers/helpers';
test.describe('Arabic / RTL Layout', () => {
test.describe.configure({ mode: 'serial' });
test('language switch sets Arabic cookie', async ({ page }) => {
await page.goto('/core/public/submit/');
await page.waitForLoadState('domcontentloaded');
const langLink = page.locator('a[href*="set-language"][href*="ar"]');
const langVisible = await langLink.isVisible().catch(() => false);
if (langVisible) {
await langLink.first().click();
await page.waitForLoadState('domcontentloaded');
} else {
await page.goto('/core/set-language/?language=ar', { waitUntil: 'domcontentloaded' });
}
const cookies = await page.context().cookies();
const langCookie = cookies.find(c => c.name === 'django_language');
expect(langCookie?.value).toBe('ar');
});
test('HTML dir attribute switches to RTL', async ({ page }) => {
await page.goto('/core/set-language/?language=ar', { waitUntil: 'domcontentloaded' });
await page.goto('/core/public/submit/');
await page.waitForLoadState('domcontentloaded');
const dir = await page.getAttribute('html', 'dir');
expect(dir).toBe('rtl');
});
test('login page renders in Arabic', async ({ page }) => {
await page.context().addCookies([
{ name: 'django_language', value: 'ar', domain: 'localhost', path: '/' },
]);
await page.goto('/core/public/submit/');
await page.waitForLoadState('domcontentloaded');
const htmlDir = await page.getAttribute('html', 'dir');
expect(htmlDir).toBe('rtl');
const body = await page.textContent('body');
expect(body).toBeTruthy();
});
test('public complaint form in Arabic', async ({ page }) => {
await page.context().addCookies([
{ name: 'django_language', value: 'ar', domain: 'localhost', path: '/' },
]);
const helper = new PublicFormHelper(page);
await helper.goToPublicLanding();
const htmlDir = await page.getAttribute('html', 'dir');
expect(htmlDir).toBe('rtl');
await helper.selectFormType('complaint');
await page.waitForLoadState('domcontentloaded');
const bodyText = await page.textContent('body');
expect(bodyText).toBeTruthy();
expect(bodyText.length).toBeGreaterThan(0);
});
test('Arabic form submission works', async ({ page }) => {
await page.context().addCookies([
{ name: 'django_language', value: 'ar', domain: 'localhost', path: '/' },
]);
const helper = new PublicFormHelper(page);
await helper.goToPublicLanding();
await helper.selectFormType('complaint');
await page.fill('#id_complainant_name', `مريض عربي ${Date.now()}`);
await page.selectOption('#id_relation_to_patient', 'patient');
await page.fill('#id_mobile_number', '0501234567');
await page.fill('#id_patient_name', 'اسم المريض');
await page.fill('#id_national_id', '1234567890');
await page.fill('#id_incident_date', '2025-01-15');
await page.fill('#id_complaint_details', 'شكوى من مريض عربي');
await page.click('#submit_btn');
await page.waitForLoadState('domcontentloaded');
const bodyText = await page.textContent('body');
expect(bodyText).not.toContain('Server Error');
expect(bodyText).not.toContain('Traceback');
});
});