import { test, expect } from '@playwright/test'; test.describe('Sites', () => { test('can view sites list', async ({ page }) => { await page.goto('/sites'); await expect(page).toHaveURL(/\/sites/); await expect(page.locator('body')).toBeVisible(); }); test('can create a new site', async ({ page }) => { await page.goto('/sites'); // Look for "New Site" or "Add Site" button const newSiteButton = page.locator( 'a[href*="/sites/new"], button:has-text("New Site"), button:has-text("Add Site"), a:has-text("New Site")' ).first(); if (await newSiteButton.isVisible({ timeout: 2000 }).catch(() => false)) { await newSiteButton.click(); await page.waitForTimeout(500); // Check if we navigated to new site page if ((await page.url()).includes('/new')) { await expect(page).toHaveURL(/\/sites\/new/); // Fill in site form const nameInput = page.locator('input[name*="name"], input[id*="name"]').first(); if (await nameInput.isVisible({ timeout: 2000 }).catch(() => false)) { await nameInput.fill(`E2E Test Site ${Date.now()}`); // Try to find and click save/create button const saveButton = page.locator( 'button[type="submit"], button:has-text("Save"), button:has-text("Create")' ).first(); if (await saveButton.isVisible()) { await saveButton.click(); await page.waitForTimeout(1000); } } } } }); test('can view site details', async ({ page }) => { await page.goto('/sites'); // Find first site link (exclude "new" link) const firstSite = page.locator('a[href*="/sites/"]:not([href*="/sites/new"])').first(); if (await firstSite.isVisible({ timeout: 2000 }).catch(() => false)) { const href = await firstSite.getAttribute('href'); if (href && !href.includes('#!') && !href.endsWith('/sites')) { await firstSite.click(); await page.waitForTimeout(500); } } }); test('can navigate to site edit page', async ({ page }) => { await page.goto('/sites'); // Find first site const firstSite = page.locator('a[href*="/sites/"]').first(); if (await firstSite.isVisible()) { await firstSite.click(); // Look for edit button on detail page const editButton = page.locator( 'a[href*="/edit"], button:has-text("Edit"), a:has-text("Edit")' ).first(); if (await editButton.isVisible()) { await editButton.click(); await expect(page).toHaveURL(/\/sites\/[^\/]+\/edit/); } } }); });