feat: Implement dynamic test-fix execution phase with adaptive task generation

- Added Phase 2: Test-Cycle Execution documentation outlining the process for dynamic test-fix execution, including agent roles, core responsibilities, intelligent strategy engine, and progressive testing.
- Introduced new PowerShell scripts for analyzing TypeScript errors, focusing on error categorization and reporting.
- Created end-to-end tests for the Help Page, ensuring content visibility, documentation navigation, internationalization support, and accessibility compliance.
This commit is contained in:
catlog22
2026-02-07 17:01:30 +08:00
parent 4ce4419ea6
commit ba5f4eba84
70 changed files with 7288 additions and 488 deletions

View File

@@ -403,4 +403,161 @@ test.describe('[Memory] - Memory Management Tests', () => {
monitoring.assertClean({ allowWarnings: true });
monitoring.stop();
});
// ========================================
// API Error Scenarios
// ========================================
test('L3.11 - API Error - 400 Bad Request', async ({ page }) => {
const monitoring = setupEnhancedMonitoring(page);
// Mock API to return 400
await page.route('**/api/memory', (route) => {
route.fulfill({
status: 400,
contentType: 'application/json',
body: JSON.stringify({ error: 'Bad Request', message: 'Invalid memory data' }),
});
});
await page.goto('/memory', { waitUntil: 'networkidle' as const });
// Try to create a memory
const createButton = page.getByRole('button', { name: /create|new|add/i });
const hasCreateButton = await createButton.isVisible().catch(() => false);
if (hasCreateButton) {
await createButton.click();
const submitButton = page.getByRole('button', { name: /create|save/i });
await submitButton.click();
// Verify error message
const errorMessage = page.getByText(/invalid|bad request|输入无效/i);
await page.unroute('**/api/memory');
const hasError = await errorMessage.isVisible().catch(() => false);
expect(hasError).toBe(true);
}
monitoring.assertClean({ ignoreAPIPatterns: ['/api/memory'], allowWarnings: true });
monitoring.stop();
});
test('L3.12 - API Error - 401 Unauthorized', async ({ page }) => {
const monitoring = setupEnhancedMonitoring(page);
// Mock API to return 401
await page.route('**/api/memory', (route) => {
route.fulfill({
status: 401,
contentType: 'application/json',
body: JSON.stringify({ error: 'Unauthorized', message: 'Authentication required' }),
});
});
await page.goto('/memory', { waitUntil: 'networkidle' as const });
// Verify auth error
const authError = page.getByText(/unauthorized|not authenticated|未经授权/i);
await page.unroute('**/api/memory');
const hasError = await authError.isVisible().catch(() => false);
expect(hasError).toBe(true);
monitoring.assertClean({ ignoreAPIPatterns: ['/api/memory'], allowWarnings: true });
monitoring.stop();
});
test('L3.13 - API Error - 403 Forbidden', async ({ page }) => {
const monitoring = setupEnhancedMonitoring(page);
// Mock API to return 403
await page.route('**/api/memory', (route) => {
route.fulfill({
status: 403,
contentType: 'application/json',
body: JSON.stringify({ error: 'Forbidden', message: 'Access denied' }),
});
});
await page.goto('/memory', { waitUntil: 'networkidle' as const });
// Verify forbidden message
const errorMessage = page.getByText(/forbidden|not allowed|禁止访问/i);
await page.unroute('**/api/memory');
const hasError = await errorMessage.isVisible().catch(() => false);
expect(hasError).toBe(true);
monitoring.assertClean({ ignoreAPIPatterns: ['/api/memory'], allowWarnings: true });
monitoring.stop();
});
test('L3.14 - API Error - 404 Not Found', async ({ page }) => {
const monitoring = setupEnhancedMonitoring(page);
// Mock API to return 404
await page.route('**/api/memory/nonexistent', (route) => {
route.fulfill({
status: 404,
contentType: 'application/json',
body: JSON.stringify({ error: 'Not Found', message: 'Memory not found' }),
});
});
// Try to access a non-existent memory
await page.goto('/memory/nonexistent-memory-id', { waitUntil: 'networkidle' as const });
// Verify not found message
const errorMessage = page.getByText(/not found|doesn't exist|未找到/i);
await page.unroute('**/api/memory/nonexistent');
const hasError = await errorMessage.isVisible().catch(() => false);
expect(hasError).toBe(true);
monitoring.assertClean({ ignoreAPIPatterns: ['/api/memory'], allowWarnings: true });
monitoring.stop();
});
test('L3.15 - API Error - 500 Internal Server Error', async ({ page }) => {
const monitoring = setupEnhancedMonitoring(page);
// Mock API to return 500
await page.route('**/api/memory', (route) => {
route.fulfill({
status: 500,
contentType: 'application/json',
body: JSON.stringify({ error: 'Internal Server Error' }),
});
});
await page.goto('/memory', { waitUntil: 'networkidle' as const });
// Verify server error message
const errorMessage = page.getByText(/server error|try again|服务器错误/i);
await page.unroute('**/api/memory');
const hasError = await errorMessage.isVisible().catch(() => false);
expect(hasError).toBe(true);
monitoring.assertClean({ ignoreAPIPatterns: ['/api/memory'], allowWarnings: true });
monitoring.stop();
});
test('L3.16 - API Error - Network Timeout', async ({ page }) => {
const monitoring = setupEnhancedMonitoring(page);
// Mock API timeout
await page.route('**/api/memory', () => {
// Never fulfill - simulate timeout
});
await page.goto('/memory', { waitUntil: 'networkidle' as const });
// Wait for timeout handling
await page.waitForTimeout(3000);
// Verify timeout message
const timeoutMessage = page.getByText(/timeout|network error|unavailable|网络超时/i);
await page.unroute('**/api/memory');
const hasTimeout = await timeoutMessage.isVisible().catch(() => false);
monitoring.assertClean({ ignoreAPIPatterns: ['/api/memory'], allowWarnings: true });
monitoring.stop();
});
});