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');
};
const createMilestone = async (page: any, name: string) => {
const createMilestone = async (page: any, projectName: string, name: string) => {
console.log(`📌 Creating milestone: ${name}`);
// Navigate to first project and create milestone
await page.goto(`${BASE_URL}/projects`);
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.click('button:has-text("Milestones")');
await page.click('button:has-text("+ New")');
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.waitForTimeout(1000);
console.log('✅ Milestone created');
@@ -111,7 +109,7 @@ test.describe('Propose Management', () => {
// Verify detail page
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();
// Edit propose
@@ -138,7 +136,7 @@ test.describe('Propose Management', () => {
await createProject(page, projectName);
// Create milestone for accept
await createMilestone(page, `Milestone for Accept ${TS}`);
await createMilestone(page, projectName, `Milestone for Accept ${TS}`);
// Create propose
await page.goto(`${BASE_URL}/proposes`);
@@ -167,7 +165,7 @@ test.describe('Propose Management', () => {
// Verify status changed
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');
});
@@ -193,19 +191,19 @@ test.describe('Propose Management', () => {
await page.click(`.milestone-card:has-text("${proposeTitle}")`);
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.waitForSelector('.modal:has-text("Reject Propose")', { timeout: 10000 });
await page.click('.modal button:has-text("Confirm Reject")');
await page.waitForTimeout(1000);
// Verify status changed
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.waitForSelector('.modal:has-text("Reopen Propose")', { timeout: 10000 });
await page.click('.modal button:has-text("Confirm Reopen")');
await page.waitForTimeout(1000);
// Verify back to open
@@ -219,7 +217,7 @@ test.describe('Propose Management', () => {
await login(page);
const projectName = `Edit Hidden Project ${TS}`;
await createProject(page, projectName);
await createMilestone(page, `Milestone ${TS}`);
await createMilestone(page, projectName, `Milestone ${TS}`);
// Create and accept propose
await page.goto(`${BASE_URL}/proposes`);
@@ -236,7 +234,8 @@ test.describe('Propose Management', () => {
// 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.waitForTimeout(1000);