test: align propose e2e with current UI

This commit is contained in:
zhi
2026-03-20 11:38:12 +00:00
parent e41676fa5e
commit d8007fab3d

View File

@@ -57,17 +57,15 @@ test.describe('Propose Management', () => {
console.log('✅ Project created'); console.log('✅ Project created');
}; };
const createMilestone = async (page: any, name: string) => { const createMilestone = async (page: any, projectName: string, name: string) => {
console.log(`📌 Creating milestone: ${name}`); console.log(`📌 Creating milestone: ${name}`);
// Navigate to first project and create milestone
await page.goto(`${BASE_URL}/projects`); await page.goto(`${BASE_URL}/projects`);
await page.waitForLoadState('networkidle'); await page.waitForLoadState('networkidle');
await page.click('.project-card:first-child'); await page.click(`.project-card:has-text("${projectName}")`);
await page.waitForURL(/\/projects\/\d+/, { timeout: 10000 }); await page.waitForURL(/\/projects\/\d+/, { timeout: 10000 });
await page.click('button:has-text("Milestones")');
await page.click('button:has-text("+ New")'); await page.click('button:has-text("+ New")');
await page.waitForSelector('.modal', { timeout: 10000 }); await page.waitForSelector('.modal', { timeout: 10000 });
await page.fill('.modal input[placeholder*="Milestone title"]', name); await page.fill('input[data-testid="milestone-title-input"]', name);
await page.click('.modal button:has-text("Create")'); await page.click('.modal button:has-text("Create")');
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
console.log('✅ Milestone created'); console.log('✅ Milestone created');
@@ -111,7 +109,7 @@ test.describe('Propose Management', () => {
// Verify detail page // Verify detail page
await expect(page.locator('h2')).toContainText(proposeTitle); await expect(page.locator('h2')).toContainText(proposeTitle);
await expect(page.locator('.project-desc')).toContainText(proposeDesc); await expect(page.locator('.section').filter({ has: page.locator('h3:has-text("Description")') }).locator('p')).toContainText(proposeDesc);
await expect(page.locator('.badge:has-text("open")')).toBeVisible(); await expect(page.locator('.badge:has-text("open")')).toBeVisible();
// Edit propose // Edit propose
@@ -138,7 +136,7 @@ test.describe('Propose Management', () => {
await createProject(page, projectName); await createProject(page, projectName);
// Create milestone for accept // Create milestone for accept
await createMilestone(page, `Milestone for Accept ${TS}`); await createMilestone(page, projectName, `Milestone for Accept ${TS}`);
// Create propose // Create propose
await page.goto(`${BASE_URL}/proposes`); await page.goto(`${BASE_URL}/proposes`);
@@ -167,7 +165,7 @@ test.describe('Propose Management', () => {
// Verify status changed // Verify status changed
await expect(page.locator('.badge:has-text("accepted")')).toBeVisible({ timeout: 10000 }); await expect(page.locator('.badge:has-text("accepted")')).toBeVisible({ timeout: 10000 });
await expect(page.locator('.project-meta:has-text("Task:")')).toBeVisible(); await expect(page.locator('button:has-text("View Generated Task")')).toBeVisible();
console.log('✅ Propose accept test passed'); console.log('✅ Propose accept test passed');
}); });
@@ -193,19 +191,19 @@ test.describe('Propose Management', () => {
await page.click(`.milestone-card:has-text("${proposeTitle}")`); await page.click(`.milestone-card:has-text("${proposeTitle}")`);
await page.waitForURL(/\/proposes\/\d+/, { timeout: 10000 }); await page.waitForURL(/\/proposes\/\d+/, { timeout: 10000 });
// Reject propose // Reject propose (current UI uses prompt, not modal)
page.once('dialog', async (dialog) => {
expect(dialog.type()).toBe('prompt');
await dialog.accept('Rejected by automated test');
});
await page.click('button:has-text("Reject")'); await page.click('button:has-text("Reject")');
await page.waitForSelector('.modal:has-text("Reject Propose")', { timeout: 10000 });
await page.click('.modal button:has-text("Confirm Reject")');
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
// Verify status changed // Verify status changed
await expect(page.locator('.badge:has-text("rejected")')).toBeVisible({ timeout: 10000 }); await expect(page.locator('.badge:has-text("rejected")')).toBeVisible({ timeout: 10000 });
// Reopen propose // Reopen propose (current UI is direct action, no modal)
await page.click('button:has-text("Reopen")'); await page.click('button:has-text("Reopen")');
await page.waitForSelector('.modal:has-text("Reopen Propose")', { timeout: 10000 });
await page.click('.modal button:has-text("Confirm Reopen")');
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
// Verify back to open // Verify back to open
@@ -219,7 +217,7 @@ test.describe('Propose Management', () => {
await login(page); await login(page);
const projectName = `Edit Hidden Project ${TS}`; const projectName = `Edit Hidden Project ${TS}`;
await createProject(page, projectName); await createProject(page, projectName);
await createMilestone(page, `Milestone ${TS}`); await createMilestone(page, projectName, `Milestone ${TS}`);
// Create and accept propose // Create and accept propose
await page.goto(`${BASE_URL}/proposes`); await page.goto(`${BASE_URL}/proposes`);
@@ -236,7 +234,8 @@ test.describe('Propose Management', () => {
// Accept // Accept
await page.click('button:has-text("Accept")'); await page.click('button:has-text("Accept")');
await page.selectOption('.modal select', { index: 0 }); await page.waitForSelector('.modal:has-text("Accept Propose")', { timeout: 10000 });
await page.selectOption('.modal select', { label: `Milestone ${TS}` });
await page.click('.modal button:has-text("Confirm Accept")'); await page.click('.modal button:has-text("Confirm Accept")');
await page.waitForTimeout(1000); await page.waitForTimeout(1000);