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>
74 lines
2.5 KiB
TypeScript
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();
|
|
});
|
|
});
|