test(e2e): align web specs with current app routes

This commit is contained in:
Ho Ngoc Hai
2026-05-04 20:11:09 +07:00
parent f112045826
commit 39156fc107
21 changed files with 334 additions and 458 deletions

View File

@@ -1,4 +1,5 @@
import { test, expect } from '@playwright/test';
import { mockAuthenticatedUser } from './support/auth';
const mockMarketReport = {
districts: [
@@ -29,17 +30,19 @@ const mockTrends = {
};
test.describe('Analytics Page', () => {
test.beforeEach(async ({ page }) => {
await page.route('**/analytics/market-report**', (route) =>
test.beforeEach(async ({ page, context, baseURL }) => {
await mockAuthenticatedUser(page, context, baseURL, { role: 'AGENT' });
await page.route('**/api/v1/analytics/market-report**', (route) =>
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(mockMarketReport) }),
);
await page.route('**/analytics/heatmap**', (route) =>
await page.route('**/api/v1/analytics/heatmap**', (route) =>
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(mockHeatmap) }),
);
await page.route('**/analytics/district-stats**', (route) =>
await page.route('**/api/v1/analytics/district-stats**', (route) =>
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(mockDistrictStats) }),
);
await page.route('**/analytics/price-trends**', (route) =>
await page.route('**/api/v1/analytics/price-trend**', (route) =>
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(mockTrends) }),
);
});
@@ -56,7 +59,8 @@ test.describe('Analytics Page', () => {
test('displays tabs for different views', async ({ page }) => {
await page.goto('/analytics');
await expect(page.getByRole('tab', { name: /Overview/i }).or(page.getByText('Overview'))).toBeVisible({ timeout: 10000 });
await expect(page.getByRole('tab', { name: /Tổng quan/i })).toBeVisible({ timeout: 10000 });
await expect(page.getByRole('tab', { name: /Xu hướng giá/i })).toBeVisible();
});
test('switches city when selector clicked', async ({ page }) => {
@@ -71,10 +75,10 @@ test.describe('Analytics Page', () => {
});
test('handles empty data gracefully', async ({ page }) => {
await page.route('**/analytics/market-report**', (route) =>
await page.route('**/api/v1/analytics/market-report**', (route) =>
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ districts: [] }) }),
);
await page.route('**/analytics/heatmap**', (route) =>
await page.route('**/api/v1/analytics/heatmap**', (route) =>
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ dataPoints: [] }) }),
);