Files
flights_web/tests/e2e-angular/popular-requests.spec.ts
T
gnezim 375bcfb0fa Add e2e test suite from flights-front with Angular API mocks
Copies Playwright e2e tests (58 specs, 300+ tests) designed for cross-app
testing. Adapts API mocks to match real Aeroflot dictionary format (title
objects with multilingual keys), adds board/schedule/days endpoint mocks,
and provides Angular-specific Playwright config on port 4203.
2026-04-15 23:07:44 +03:00

84 lines
2.7 KiB
TypeScript

import { test, expect } from '@playwright/test';
test.describe('Popular Requests (US-7)', () => {
test.beforeEach(async ({ page }) => {
await page.goto('http://localhost:3000/ru-ru/onlineboard');
await page.waitForLoadState('networkidle');
});
test('should display popular requests section', async ({ page }) => {
const section = page.locator('[data-testid="popular-requests"]');
const exists = await section.isVisible().catch(() => false);
// Section may not always be visible depending on data availability
expect(typeof exists).toBe('boolean');
});
test('should show popular route cards', async ({ page }) => {
const routes = page.locator('[data-testid="popular-request-card"]');
const count = await routes.count();
// Component may have 0 or more cards
expect(count >= 0).toBe(true);
});
test('should handle click on popular route', async ({ page }) => {
const firstRoute = page.locator('[data-testid="popular-request-card"]').first();
const exists = await firstRoute.isVisible().catch(() => false);
if (exists) {
await firstRoute.click();
// Should trigger search or navigation
await page.waitForLoadState('networkidle');
}
// Test completes successfully if no errors occur
expect(true).toBe(true);
});
test('should display route information', async ({ page }) => {
const routes = page.locator('[data-testid="popular-request-card"]');
const count = await routes.count();
expect(count >= 0).toBe(true);
});
test('should be responsive on mobile', async ({ page }) => {
await page.setViewportSize({ width: 375, height: 667 });
await page.goto('http://localhost:3000/ru-ru/onlineboard');
await page.waitForLoadState('networkidle');
const section = page.locator('[data-testid="popular-requests"]');
const exists = await section.isVisible().catch(() => false);
expect(typeof exists).toBe('boolean');
});
test('should be responsive on tablet', async ({ page }) => {
await page.setViewportSize({ width: 768, height: 1024 });
await page.goto('http://localhost:3000/ru-ru/onlineboard');
await page.waitForLoadState('networkidle');
const routes = page.locator('[data-testid="popular-request-card"]');
const count = await routes.count();
expect(count >= 0).toBe(true);
});
test('should render without errors', async ({ page }) => {
// Check for JavaScript errors
const errors: string[] = [];
page.on('console', (msg) => {
if (msg.type() === 'error') {
errors.push(msg.text());
}
});
await page.goto('http://localhost:3000/ru-ru/onlineboard');
await page.waitForLoadState('networkidle');
// Component should render without throwing errors
expect(errors.length).toBe(0);
});
});