Files
Charon/tests/fixtures/dns-providers.ts
GitHub Actions bc9c6e2abd feat: Add end-to-end tests for DNS Provider Types and UI interactions
- Implement API tests for DNS Provider Types, validating built-in and custom providers.
- Create UI tests for provider selection, ensuring all types are displayed and descriptions are shown.
- Introduce fixtures for consistent test data across DNS Provider tests.
- Update manual DNS provider tests to improve structure and accessibility checks.
2026-01-15 01:37:21 +00:00

179 lines
4.0 KiB
TypeScript

/**
* DNS Provider Test Fixtures
*
* Shared test data for DNS Provider E2E tests.
* These fixtures provide consistent test data across test files.
*/
/**
* Expected provider types from the API
*/
export const mockProviderTypes = {
/** Built-in providers from Lego/Caddy */
built_in: [
'cloudflare',
'route53',
'digitalocean',
'googleclouddns',
'azuredns',
'godaddy',
'namecheap',
'hetzner',
'vultr',
'dnsimple',
],
/** Custom providers from Phase 2 */
custom: ['manual', 'webhook', 'rfc2136', 'script'],
};
/**
* Mock provider data for creating test providers
*/
export const mockCloudflareProvider = {
name: 'Test Cloudflare',
provider_type: 'cloudflare',
credentials: {
api_token: 'test-token-12345',
},
};
export const mockManualProvider = {
name: 'Test Manual Provider',
provider_type: 'manual',
credentials: {},
};
export const mockWebhookProvider = {
name: 'Test Webhook Provider',
provider_type: 'webhook',
credentials: {
create_url: 'https://example.com/dns/create',
delete_url: 'https://example.com/dns/delete',
},
};
export const mockRfc2136Provider = {
name: 'Test RFC2136 Provider',
provider_type: 'rfc2136',
credentials: {
nameserver: 'ns.example.com:53',
tsig_key_name: 'ddns.example.com',
tsig_key: 'base64-encoded-key==',
tsig_algorithm: 'hmac-sha256',
},
};
export const mockScriptProvider = {
name: 'Test Script Provider',
provider_type: 'script',
credentials: {
script_path: '/usr/local/bin/dns-update.sh',
},
};
/**
* Mock API responses for testing
*/
export const mockTypesResponse = {
types: [
{
type: 'cloudflare',
name: 'Cloudflare',
description: 'DNS provider using Cloudflare API',
fields: [
{
name: 'api_token',
label: 'API Token',
type: 'password',
required: true,
},
],
},
{
type: 'manual',
name: 'Manual (No Automation)',
description: 'Manual DNS record creation - no automation',
fields: [],
},
{
type: 'webhook',
name: 'Webhook (HTTP)',
description: 'DNS provider using HTTP webhooks',
fields: [
{
name: 'create_url',
label: 'Create URL',
type: 'url',
required: true,
},
{
name: 'delete_url',
label: 'Delete URL',
type: 'url',
required: true,
},
],
},
],
total: 3,
};
/**
* Mock manual DNS challenge data
*/
export const mockManualChallenge = {
id: 1,
provider_id: 1,
fqdn: '_acme-challenge.example.com',
value: 'mock-challenge-token-value-abc123',
status: 'pending',
ttl: 300,
expires_at: new Date(Date.now() + 10 * 60 * 1000).toISOString(),
created_at: new Date().toISOString(),
dns_propagated: false,
last_check_at: null,
};
export const mockExpiredChallenge = {
...mockManualChallenge,
id: 2,
status: 'expired',
expires_at: new Date(Date.now() - 60000).toISOString(),
created_at: new Date(Date.now() - 11 * 60 * 1000).toISOString(),
};
export const mockVerifiedChallenge = {
...mockManualChallenge,
id: 3,
status: 'verified',
dns_propagated: true,
};
/**
* Helper function to create a mock provider via API
*/
export async function createTestProvider(
request: { post: (url: string, options: { data: unknown }) => Promise<{ ok: () => boolean; json: () => Promise<unknown> }> },
providerData: typeof mockManualProvider
): Promise<{ id: number; uuid: string }> {
const response = await request.post('/api/v1/dns-providers', {
data: providerData,
});
if (!response.ok()) {
throw new Error('Failed to create test provider');
}
return response.json() as Promise<{ id: number; uuid: string }>;
}
/**
* Helper function to clean up test provider
*/
export async function deleteTestProvider(
request: { delete: (url: string) => Promise<unknown> },
providerId: number
): Promise<void> {
await request.delete(`/api/v1/dns-providers/${providerId}`);
}