Files
goodgo-platform/e2e/web/navigation.spec.ts
Ho Ngoc Hai 8e82d346aa test(e2e): add 14 new web E2E test files for critical user flows
Cover auth (login, register, OAuth callbacks), search with filters,
listing detail, dashboard, analytics, create listing form, admin
dashboard/users/moderation/KYC, navigation routing, and responsive
design. Total 91 test cases using Playwright with API route mocking.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-08 13:14:17 +07:00

74 lines
2.5 KiB
TypeScript

import { test, expect } from '@playwright/test';
test.describe('Navigation and Routing', () => {
test('homepage loads and has navigation links', async ({ page }) => {
await page.goto('/');
await expect(page.getByRole('heading', { level: 1 })).toBeVisible();
// Header navigation should have links
const nav = page.locator('header nav, header');
await expect(nav.first()).toBeVisible();
});
test('navigates from homepage to search', async ({ page }) => {
await page.goto('/');
// Click on search-related link or button
const searchLink = page.getByRole('link', { name: /Tim kiem|Tìm kiếm|Search/i }).first();
if (await searchLink.isVisible()) {
await searchLink.click();
await expect(page).toHaveURL(/\/search/);
}
});
test('navigates from homepage to login', async ({ page }) => {
await page.goto('/');
const loginLink = page.getByRole('link', { name: /Dang nhap|Đăng nhập|Login/i }).first();
if (await loginLink.isVisible()) {
await loginLink.click();
await expect(page).toHaveURL(/\/login/);
}
});
test('navigates from homepage to register', async ({ page }) => {
await page.goto('/');
const registerLink = page.getByRole('link', { name: /Dang ky|Đăng ký|Register/i }).first();
if (await registerLink.isVisible()) {
await registerLink.click();
await expect(page).toHaveURL(/\/register/);
}
});
test('login page links to register and vice versa', async ({ page }) => {
await page.goto('/login');
await page.getByRole('link', { name: 'Đăng ký' }).click();
await expect(page).toHaveURL(/\/register/);
await page.getByRole('link', { name: 'Đăng nhập' }).click();
await expect(page).toHaveURL(/\/login/);
});
test('404 page does not crash', async ({ page }) => {
const response = await page.goto('/nonexistent-page-xyz');
// Page should load (even if 404)
await expect(page.locator('body')).toBeVisible();
// Should either show 404 or redirect
expect(response?.status()).toBeLessThan(500);
});
test('search page with query params loads correctly', async ({ page }) => {
await page.route('**/listings**', (route) =>
route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ data: [], total: 0, page: 1, limit: 12, totalPages: 0 }),
}),
);
await page.goto('/search?transactionType=SALE&city=Ho+Chi+Minh');
await expect(page.getByRole('heading', { name: 'Tìm kiếm bất động sản' })).toBeVisible();
});
});