68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
const mockTasksData = {
|
|
code: 200,
|
|
data: {
|
|
records: [
|
|
{
|
|
taskNum: 'T001',
|
|
taskName: '学习 Vue3',
|
|
reportCount: 3,
|
|
fragmentCount: 5,
|
|
effectiveTime: '2h 30m',
|
|
},
|
|
{
|
|
taskNum: 'T002',
|
|
taskName: '学习 TypeScript',
|
|
reportCount: 1,
|
|
fragmentCount: 2,
|
|
effectiveTime: '1h 15m',
|
|
},
|
|
],
|
|
},
|
|
};
|
|
const mockTasksEmpty = { code: 200, data: { records: [] } };
|
|
const mockFeed = { code: 200, data: [] };
|
|
|
|
test.describe('Review page', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.route('**/api/tasks**', (route) =>
|
|
route.fulfill({
|
|
status: 200,
|
|
contentType: 'application/json',
|
|
body: JSON.stringify(mockTasksData),
|
|
}),
|
|
);
|
|
await page.route('**/api/review/feed**', (route) =>
|
|
route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(mockFeed) }),
|
|
);
|
|
|
|
await page.goto('/login');
|
|
await page.evaluate(() => localStorage.setItem('isLoggedIn', 'true'));
|
|
await page.goto('/review');
|
|
await page.waitForSelector('.review-page', { timeout: 10_000 });
|
|
});
|
|
|
|
test('displays summary metrics and task table', async ({ page }) => {
|
|
await expect(page.locator('.metric-card')).toHaveCount(3);
|
|
// Check metric values
|
|
await expect(page.locator('.metric-card').first().locator('strong')).toContainText('2');
|
|
// Check table rows
|
|
await expect(page.locator('.el-table__row')).toHaveCount(2);
|
|
});
|
|
|
|
test('shows empty state when no tasks', async ({ page }) => {
|
|
await page.route('**/api/tasks**', (route) =>
|
|
route.fulfill({
|
|
status: 200,
|
|
contentType: 'application/json',
|
|
body: JSON.stringify(mockTasksEmpty),
|
|
}),
|
|
);
|
|
|
|
await page.goto('/review');
|
|
await page.waitForSelector('.review-page', { timeout: 10_000 });
|
|
await expect(page.locator('.metric-card').first().locator('strong')).toContainText('0');
|
|
});
|
|
});
|