import { test, expect } from '@playwright/test'; test.describe('Maintenance Windows', () => { test('can view maintenance windows page', async ({ page }) => { await page.goto('/maintenance'); await expect(page).toHaveURL(/\/maintenance/); await expect(page.locator('body')).toBeVisible(); }); test('can create a new maintenance window', async ({ page }) => { await page.goto('/maintenance'); // Look for "New" or "Schedule Maintenance" button const newButton = page.locator( 'a[href*="/maintenance/new"], button:has-text("New"), button:has-text("Schedule"), a:has-text("New")' ).first(); if (await newButton.isVisible()) { await newButton.click(); await expect(page).toHaveURL(/\/maintenance\/new/); // Look for form fields const titleInput = page.locator('input[name*="title"], input[id*="title"]').first(); if (await titleInput.isVisible()) { await titleInput.fill('E2E Test Maintenance Window'); } } }); test('can filter maintenance windows by status', async ({ page }) => { await page.goto('/maintenance'); // Look for status filters (Active, Scheduled, Past, etc.) const statusFilter = page.locator( '[role="tab"], button:has-text("Active"), button:has-text("Scheduled"), button:has-text("Past")' ); if ((await statusFilter.count()) > 0) { await statusFilter.first().click(); await page.waitForTimeout(500); } }); test('can view maintenance window details', async ({ page }) => { await page.goto('/maintenance'); // Find first maintenance window link (exclude "new" link) const firstWindow = page.locator('a[href*="/maintenance/"]:not([href*="/maintenance/new"])').first(); if (await firstWindow.isVisible({ timeout: 2000 }).catch(() => false)) { const href = await firstWindow.getAttribute('href'); if (href && !href.includes('#!') && !href.endsWith('/maintenance')) { await firstWindow.click(); await page.waitForTimeout(500); } } }); test('can edit maintenance window', async ({ page }) => { await page.goto('/maintenance'); // Navigate to first maintenance window const firstWindow = page.locator('a[href*="/maintenance/"]').first(); if (await firstWindow.isVisible()) { await firstWindow.click(); // Look for edit button 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(/\/maintenance\/[^\/]+\/edit/); } } }); test('can view affected devices', async ({ page }) => { await page.goto('/maintenance'); // Navigate to first maintenance window const firstWindow = page.locator('a[href*="/maintenance/"]').first(); if (await firstWindow.isVisible()) { await firstWindow.click(); // Look for devices section const devicesSection = page.locator( ':has-text("Devices"), :has-text("Affected")' ).first(); if (await devicesSection.isVisible({ timeout: 2000 }).catch(() => false)) { await expect(devicesSection).toBeVisible(); } } }); });