75 lines
2.6 KiB
TypeScript
75 lines
2.6 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('main')).toBeVisible();
|
|
await expect(page.getByText(/GGI HCM|Top biến động giá|Khu vực xu hướng/i).first()).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();
|
|
});
|
|
});
|