- Added e2e tests for agents, insights, maintenance windows, maps, help pages - Added e2e tests for organization settings, config timeline, MikroTik backups - Added comprehensive search functionality tests - Added dashboard and sites navigation tests - Updated existing tests to handle sudo verification redirects - Fixed navigation tests to be more defensive about missing data - All 301 tests passing across chromium, firefox, and webkit
91 lines
2.6 KiB
TypeScript
91 lines
2.6 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test.describe('Alerts', () => {
|
|
test('can view alerts page', async ({ page }) => {
|
|
await page.goto('/alerts');
|
|
|
|
await expect(page).toHaveURL(/\/alerts/);
|
|
await expect(page.locator('body')).toBeVisible();
|
|
});
|
|
|
|
test('can filter alerts by status', async ({ page }) => {
|
|
await page.goto('/alerts');
|
|
|
|
// Look for filter tabs/buttons (Active, Resolved, All, etc.)
|
|
const filterTabs = page.locator(
|
|
'[role="tab"], button:has-text("Active"), button:has-text("Resolved"), button:has-text("All")'
|
|
);
|
|
|
|
if ((await filterTabs.count()) > 0) {
|
|
await filterTabs.first().click();
|
|
await page.waitForTimeout(500);
|
|
}
|
|
});
|
|
|
|
test('can filter alerts by severity', async ({ page }) => {
|
|
await page.goto('/alerts');
|
|
|
|
// Look for severity filters (Critical, Warning, Info, etc.)
|
|
const severityFilter = page.locator(
|
|
'button:has-text("Critical"), button:has-text("Warning"), select[name*="severity"]'
|
|
).first();
|
|
|
|
if (await severityFilter.isVisible()) {
|
|
await severityFilter.click();
|
|
await page.waitForTimeout(500);
|
|
}
|
|
});
|
|
|
|
test('can view alert details', async ({ page }) => {
|
|
await page.goto('/alerts');
|
|
|
|
// Find first alert item
|
|
const firstAlert = page.locator('[data-alert], tr, [role="listitem"]').first();
|
|
|
|
if (await firstAlert.isVisible()) {
|
|
await firstAlert.click();
|
|
// Alert details might open in a modal or navigate to a detail page
|
|
await page.waitForTimeout(500);
|
|
}
|
|
});
|
|
|
|
test('can acknowledge an alert', async ({ page }) => {
|
|
await page.goto('/alerts');
|
|
|
|
// Look for acknowledge button
|
|
const ackButton = page.locator(
|
|
'button:has-text("Acknowledge"), button:has-text("Ack")'
|
|
).first();
|
|
|
|
if (await ackButton.isVisible()) {
|
|
await ackButton.click();
|
|
await page.waitForTimeout(500);
|
|
}
|
|
});
|
|
|
|
test('can resolve an alert', async ({ page }) => {
|
|
await page.goto('/alerts');
|
|
|
|
// Look for resolve button
|
|
const resolveButton = page.locator(
|
|
'button:has-text("Resolve"), button:has-text("Mark Resolved")'
|
|
).first();
|
|
|
|
if (await resolveButton.isVisible()) {
|
|
await resolveButton.click();
|
|
await page.waitForTimeout(500);
|
|
}
|
|
});
|
|
|
|
test('can search alerts', async ({ page }) => {
|
|
await page.goto('/alerts');
|
|
|
|
// Look for search input
|
|
const searchInput = page.locator('input[type="search"], input[placeholder*="Search"]').first();
|
|
|
|
if (await searchInput.isVisible()) {
|
|
await searchInput.fill('test');
|
|
await page.waitForTimeout(500);
|
|
}
|
|
});
|
|
});
|