diff --git a/tests/propose.spec.ts b/tests/propose.spec.ts index 1bfc0bc..4d21947 100644 --- a/tests/propose.spec.ts +++ b/tests/propose.spec.ts @@ -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);