fix: simplify E2E test descriptions and enhance navigation functions for DNS providers and certificates
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
Reference in New Issue
Block a user