fix: simplify E2E test descriptions and enhance navigation functions for DNS providers and certificates

This commit is contained in:
GitHub Actions
2026-02-12 13:04:24 +00:00
parent 26dd7f5d96
commit bcd08eb1cb
5 changed files with 103 additions and 74 deletions

View File

@@ -1,5 +1,5 @@
/**
* Backup & Restore E2E Tests (Phase 6.5)
* Backup & Restore E2E Tests
*
* Tests for complete backup and restore workflows including
* scheduling, verification, and disaster recovery scenarios.

View File

@@ -1,5 +1,5 @@
/**
* Import to Production E2E Tests (Phase 6.6)
* Import to Production E2E Tests
*
* Tests for importing configurations from external sources
* (Caddyfile, NPM, JSON) into the production system.

View File

@@ -1,5 +1,5 @@
/**
* Multi-Feature Workflows E2E Tests (Phase 6.7)
* Multi-Feature Workflows E2E Tests
*
* Tests for complex workflows that span multiple features,
* testing real-world usage scenarios and feature interactions.
@@ -58,6 +58,20 @@ const SELECTORS = {
loadingSpinner: '[data-testid="loading"], .loading, .spinner',
};
async function navigateToDnsProviders(page: import('@playwright/test').Page): Promise<void> {
const providersResponse = waitForAPIResponse(page, /\/api\/v1\/dns-providers/);
await page.goto('/dns/providers');
await providersResponse;
await waitForLoadingComplete(page);
}
async function navigateToCertificates(page: import('@playwright/test').Page): Promise<void> {
const certsResponse = waitForAPIResponse(page, /\/api\/v1\/certificates/);
await page.goto('/certificates');
await certsResponse;
await waitForLoadingComplete(page);
}
test.describe('Multi-Feature Workflows E2E', () => {
// ===========================================================================
// Group A: Complete Host Setup Workflow (5 tests)
@@ -212,17 +226,19 @@ test.describe('Multi-Feature Workflows E2E', () => {
}) => {
await loginUser(page, adminUser);
const dnsProvider = generateDnsProvider();
await test.step('Create DNS provider', async () => {
const dnsProvider = generateDnsProvider();
await testData.createDNSProvider({
name: dnsProvider.name,
providerType: dnsProvider.provider_type,
credentials: dnsProvider.credentials,
});
});
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await expect(page.getByText(dnsProvider.name)).toBeVisible();
await test.step('Verify DNS provider appears in list', async () => {
await navigateToDnsProviders(page);
await waitForResourceInUI(page, dnsProvider.name);
});
});
@@ -233,24 +249,24 @@ test.describe('Multi-Feature Workflows E2E', () => {
}) => {
await loginUser(page, adminUser);
const dnsProvider = generateDnsProvider();
await test.step('Create DNS provider first', async () => {
const dnsProvider = generateDnsProvider();
await testData.createDNSProvider({
name: dnsProvider.name,
providerType: dnsProvider.provider_type,
credentials: dnsProvider.credentials,
});
});
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await expect(page.getByText(dnsProvider.name)).toBeVisible();
await test.step('Confirm DNS provider is available', async () => {
await navigateToDnsProviders(page);
await waitForResourceInUI(page, dnsProvider.name);
});
await test.step('Navigate to certificates', async () => {
await page.goto('/certificates');
await waitForLoadingComplete(page);
const content = page.locator('main, .content').first();
await expect(content).toBeVisible();
await navigateToCertificates(page);
await expect(page.getByRole('main')).toBeVisible();
});
});
@@ -269,15 +285,16 @@ test.describe('Multi-Feature Workflows E2E', () => {
forwardPort: proxyInput.forwardPort,
});
const proxiesResponse = waitForAPIResponse(page, /\/api\/v1\/proxy-hosts/);
await page.goto('/proxy-hosts');
await proxiesResponse;
await waitForLoadingComplete(page);
await waitForResourceInUI(page, proxy.domain);
});
await test.step('Navigate to certificates', async () => {
await page.goto('/certificates');
await waitForLoadingComplete(page);
const content = page.locator('main, .content').first();
await expect(content).toBeVisible();
await navigateToCertificates(page);
await expect(page.getByRole('main')).toBeVisible();
});
});
@@ -288,13 +305,11 @@ test.describe('Multi-Feature Workflows E2E', () => {
await loginUser(page, adminUser);
await test.step('Navigate to certificates', async () => {
await page.goto('/certificates');
await waitForLoadingComplete(page);
await navigateToCertificates(page);
});
await test.step('Verify certificate management page', async () => {
const content = page.locator('main, .content').first();
await expect(content).toBeVisible();
await expect(page.getByRole('main')).toBeVisible();
});
});
});

View File

@@ -1,5 +1,5 @@
/**
* Proxy + Certificate Integration E2E Tests (Phase 6.2)
* Proxy + Certificate Integration E2E Tests
*
* Tests for proxy host and SSL certificate integration workflows.
* Covers certificate assignment, ACME challenges, renewal, and edge cases.
@@ -30,9 +30,27 @@ import {
waitForLoadingComplete,
waitForAPIResponse,
waitForModal,
waitForResourceInUI,
clickAndWaitForResponse,
} from '../utils/wait-helpers';
const DNS_PROVIDERS_API_PATTERN = /\/api\/v1\/dns-providers/;
const CERTIFICATES_API_PATTERN = /\/api\/v1\/certificates/;
async function navigateToDnsProviders(page: import('@playwright/test').Page): Promise<void> {
const providersResponse = waitForAPIResponse(page, DNS_PROVIDERS_API_PATTERN);
await page.goto('/dns/providers');
await providersResponse;
await waitForLoadingComplete(page);
}
async function navigateToCertificates(page: import('@playwright/test').Page): Promise<void> {
const certsResponse = waitForAPIResponse(page, CERTIFICATES_API_PATTERN);
await page.goto('/certificates');
await certsResponse;
await waitForLoadingComplete(page);
}
/**
* Selectors for Certificate and Proxy Host pages
*/
@@ -257,8 +275,7 @@ test.describe('Proxy + Certificate Integration', () => {
});
await test.step('Navigate to certificates', async () => {
await page.goto('/certificates');
await waitForLoadingComplete(page);
await navigateToCertificates(page);
});
await test.step('Verify page loads', async () => {
@@ -304,14 +321,11 @@ test.describe('Proxy + Certificate Integration', () => {
});
await test.step('Navigate to DNS providers', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify DNS provider exists', async () => {
// The provider name contains namespace prefix
const content = page.locator('main, table, .content').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, /Cloudflare-DNS-Test/i);
});
});
});

View File

@@ -1,5 +1,5 @@
/**
* Proxy + DNS Provider Integration E2E Tests (Phase 6.3)
* Proxy + DNS Provider Integration E2E Tests
*
* Tests for proxy host and DNS provider integration workflows.
* Covers DNS provider configuration, ACME DNS-01 challenges, and validation.
@@ -18,11 +18,9 @@
import { test, expect, loginUser, TEST_PASSWORD } from '../fixtures/auth-fixtures';
import { generateProxyHost } from '../fixtures/proxy-hosts';
import {
waitForToast,
waitForLoadingComplete,
waitForAPIResponse,
waitForModal,
clickAndWaitForResponse,
waitForResourceInUI,
} from '../utils/wait-helpers';
/**
@@ -30,6 +28,20 @@ import {
*/
type DNSProviderType = 'manual' | 'cloudflare' | 'route53' | 'webhook' | 'rfc2136';
async function navigateToDnsProviders(page: import('@playwright/test').Page): Promise<void> {
const providersResponse = waitForAPIResponse(page, /\/api\/v1\/dns-providers/);
await page.goto('/dns/providers');
await providersResponse;
await waitForLoadingComplete(page);
}
async function navigateToCertificates(page: import('@playwright/test').Page): Promise<void> {
const certsResponse = waitForAPIResponse(page, /\/api\/v1\/certificates/);
await page.goto('/certificates');
await certsResponse;
await waitForLoadingComplete(page);
}
/**
* Selectors for DNS Provider and Proxy Host pages
*/
@@ -90,14 +102,11 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to DNS providers page', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify DNS provider appears in list', async () => {
// The name is namespaced by TestDataManager
const content = page.locator('main, table, .content').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, /Manual-DNS-Test/i);
});
});
@@ -120,13 +129,11 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to DNS providers', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify provider is listed', async () => {
const content = page.locator('main, table').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, /Cloudflare-DNS-Test/i);
});
});
@@ -146,8 +153,7 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to certificates page', async () => {
await page.goto('/certificates');
await waitForLoadingComplete(page);
await navigateToCertificates(page);
});
await test.step('Verify certificates page loads', async () => {
@@ -177,13 +183,11 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to DNS providers', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify DNS providers page loads', async () => {
const content = page.locator('main, .content').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, /Connectivity-Test-DNS/i);
});
});
@@ -203,14 +207,11 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to DNS providers', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify page content', async () => {
// Manual providers show instructions for DNS record creation
const content = page.locator('main, table, .content').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, /Manual-Challenge-DNS/i);
});
});
@@ -230,8 +231,7 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to certificates', async () => {
await page.goto('/certificates');
await waitForLoadingComplete(page);
await navigateToCertificates(page);
});
await test.step('Verify page loads', async () => {
@@ -259,13 +259,11 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to DNS providers', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify provider in list', async () => {
const content = page.locator('main, table').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, /Webhook-DNS-Test/i);
});
});
});
@@ -289,11 +287,13 @@ test.describe('Proxy + DNS Provider Integration', () => {
},
});
const updatedName = 'Update-Credentials-DNS-Updated';
await test.step('Update provider credentials via API', async () => {
const response = await page.request.put(`/api/v1/dns-providers/${providerId}`, {
data: {
type: 'cloudflare',
name: 'Update-Credentials-DNS-Updated',
name: updatedName,
credentials: {
api_token: 'updated-token',
},
@@ -303,13 +303,11 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to DNS providers', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify updated provider', async () => {
const content = page.locator('main, table').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, updatedName);
});
});
@@ -327,19 +325,22 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to DNS providers', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify provider exists before deletion', async () => {
const content = page.locator('main, table').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, /Delete-Test-DNS/i);
});
await test.step('Delete provider via API', async () => {
const response = await page.request.delete(`/api/v1/dns-providers/${providerId}`);
expect(response.ok()).toBeTruthy();
});
await test.step('Verify provider removed from list', async () => {
await navigateToDnsProviders(page);
await expect(page.getByText(/Delete-Test-DNS/i)).toHaveCount(0);
});
});
test('should list all configured DNS providers', async ({
@@ -363,13 +364,12 @@ test.describe('Proxy + DNS Provider Integration', () => {
});
await test.step('Navigate to DNS providers', async () => {
await page.goto('/dns-providers');
await waitForLoadingComplete(page);
await navigateToDnsProviders(page);
});
await test.step('Verify providers list', async () => {
const content = page.locator('main, table').first();
await expect(content).toBeVisible();
await waitForResourceInUI(page, /List-Test-DNS-1/i);
await waitForResourceInUI(page, /List-Test-DNS-2/i);
});
await test.step('Verify API returns providers', async () => {