/** * Worktree Integration E2E Test * * Happy path: Display worktree selector with main branch */ import { test, expect } from '@playwright/test'; import * as fs from 'fs'; import { waitForNetworkIdle, createTestGitRepo, cleanupTempDir, createTempDirPath, setupProjectWithPath, waitForBoardView, authenticateForTests, } from '../utils'; const TEST_TEMP_DIR = createTempDirPath('worktree-tests'); interface TestRepo { path: string; cleanup: () => Promise; } test.describe('Worktree Integration', () => { let testRepo: TestRepo; test.beforeAll(async () => { if (!fs.existsSync(TEST_TEMP_DIR)) { fs.mkdirSync(TEST_TEMP_DIR, { recursive: true }); } }); test.beforeEach(async () => { testRepo = await createTestGitRepo(TEST_TEMP_DIR); }); test.afterEach(async () => { if (testRepo) { await testRepo.cleanup(); } }); test.afterAll(async () => { cleanupTempDir(TEST_TEMP_DIR); }); test('should display worktree selector with main branch', async ({ page }) => { await setupProjectWithPath(page, testRepo.path); await authenticateForTests(page); await page.goto('/'); await page.waitForLoadState('load'); await waitForNetworkIdle(page); await waitForBoardView(page); // Wait for the worktree selector to appear (indicates API call completed) const branchLabel = page.getByText('Branch:'); await expect(branchLabel).toBeVisible({ timeout: 10000 }); // Wait for the main branch button to appear // This ensures the worktree API has returned data with the main branch const mainBranchButton = page.locator('[data-testid="worktree-branch-main"]'); await expect(mainBranchButton).toBeVisible({ timeout: 15000 }); // Verify the branch name is displayed await expect(mainBranchButton).toContainText('main'); }); });