Files
Charon/docs/plans/task.md
GitHub Actions 19a34201bf fix(ci): use valid 32-byte base64 encryption key for E2E tests
The DNS provider API endpoints were returning 404 in CI because the
encryption service failed to initialize with an invalid key.

Changed CHARON_ENCRYPTION_KEY from plain text to valid base64 string
Key "dGVzdC1lbmNyeXB0aW9uLWtleS1mb3ItY2ktMzJieXQ=" decodes to 32 bytes
Without valid encryption key, DNS provider routes don't register
This was causing all dns-provider-types.spec.ts tests to fail
Root cause: AES-256-GCM requires exactly 32 bytes for the key
2026-01-15 06:02:42 +00:00

1201 lines
73 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Run npx playwright test --project=chromium
Running 55 tests using 1 worker
Running initial setup to create test admin user...
Initial setup completed successfully
Logging in as test user...
Login successful
Auth state saved to /home/runner/work/Charon/Charon/playwright/.auth/user.json
·API Response: 404 {"error":"not found"}
×API Response: 404 {"error":"not found"}
×API Response: 404 {"error":"not found"}
FType select found: true
Number of options: 1
Option 0: Loading...
Webhook option not found
°··Add button count: 2
Page URL: http://localhost:8080/dns/providers
···°°°××××F····××F××F××F××F××F××F··××F···××F························
1) [chromium] tests/dns-provider-crud.spec.ts:16:5 DNS Provider CRUD Operations Create Provider should create a Manual DNS provider Save provider
Error: expect(locator).not.toBeVisible() failed
Locator: getByRole('dialog')
Expected: not visible
Received: visible
Timeout: 10000ms
Call log:
- Expect "not toBeVisible" with timeout 10000ms
- waiting for getByRole('dialog')
14 × locator resolved to <div role="dialog" tabindex="-1" id="radix-_r_0_" data-state="open" aria-labelledby="radix-_r_1_" class="fixed left-[50%] top-[50%] z-50 w-full translate-x-[-50%] translate-y-[-50%] bg-surface-elevated border border-border rounded-xl shadow-xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:sli…>…</div>
- unexpected value "visible"
65 |
66 | // Wait for dialog to close (indicates success)
> 67 | await expect(dialog).not.toBeVisible({ timeout: 10000 });
| ^
68 | });
69 |
70 | await test.step('Verify success', async () => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:67:34
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:40:7
Error Context: test-results/dns-provider-crud-DNS-Prov-3ef77-reate-a-Manual-DNS-provider-chromium/error-context.md
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).not.toBeVisible() failed
Locator: getByRole('dialog')
Expected: not visible
Received: visible
Timeout: 10000ms
Call log:
- Expect "not toBeVisible" with timeout 10000ms
- waiting for getByRole('dialog')
14 × locator resolved to <div role="dialog" tabindex="-1" id="radix-_r_0_" data-state="open" aria-labelledby="radix-_r_1_" class="fixed left-[50%] top-[50%] z-50 w-full translate-x-[-50%] translate-y-[-50%] bg-surface-elevated border border-border rounded-xl shadow-xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:sli…>…</div>
- unexpected value "visible"
65 |
66 | // Wait for dialog to close (indicates success)
> 67 | await expect(dialog).not.toBeVisible({ timeout: 10000 });
| ^
68 | });
69 |
70 | await test.step('Verify success', async () => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:67:34
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:40:7
Error Context: test-results/dns-provider-crud-DNS-Prov-3ef77-reate-a-Manual-DNS-provider-chromium-retry1/error-context.md
attachment #2: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-crud-DNS-Prov-3ef77-reate-a-Manual-DNS-provider-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-crud-DNS-Prov-3ef77-reate-a-Manual-DNS-provider-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).not.toBeVisible() failed
Locator: getByRole('dialog')
Expected: not visible
Received: visible
Timeout: 10000ms
Call log:
- Expect "not toBeVisible" with timeout 10000ms
- waiting for getByRole('dialog')
14 × locator resolved to <div role="dialog" tabindex="-1" id="radix-_r_0_" data-state="open" aria-labelledby="radix-_r_1_" class="fixed left-[50%] top-[50%] z-50 w-full translate-x-[-50%] translate-y-[-50%] bg-surface-elevated border border-border rounded-xl shadow-xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:sli…>…</div>
- unexpected value "visible"
65 |
66 | // Wait for dialog to close (indicates success)
> 67 | await expect(dialog).not.toBeVisible({ timeout: 10000 });
| ^
68 | });
69 |
70 | await test.step('Verify success', async () => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:67:34
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:40:7
Error Context: test-results/dns-provider-crud-DNS-Prov-3ef77-reate-a-Manual-DNS-provider-chromium-retry2/error-context.md
2) [chromium] tests/dns-provider-crud.spec.ts:501:5 DNS Provider CRUD Operations API Operations should list providers via API
Error: expect(received).toBeTruthy()
Received: false
449 | test('should list providers via API', async ({ request }) => {
450 | const response = await request.get('/api/v1/dns-providers');
> 451 | expect(response.ok()).toBeTruthy();
| ^
452 |
453 | const data = await response.json();
454 | // Response should be an array (possibly empty)
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:451:29
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: false
449 | test('should list providers via API', async ({ request }) => {
450 | const response = await request.get('/api/v1/dns-providers');
> 451 | expect(response.ok()).toBeTruthy();
| ^
452 |
453 | const data = await response.json();
454 | // Response should be an array (possibly empty)
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:451:29
attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-crud-DNS-Prov-2082f-ould-list-providers-via-API-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-crud-DNS-Prov-2082f-ould-list-providers-via-API-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: false
449 | test('should list providers via API', async ({ request }) => {
450 | const response = await request.get('/api/v1/dns-providers');
> 451 | expect(response.ok()).toBeTruthy();
| ^
452 |
453 | const data = await response.json();
454 | // Response should be an array (possibly empty)
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:451:29
3) [chromium] tests/dns-provider-crud.spec.ts:534:5 DNS Provider CRUD Operations API Operations should reject invalid provider type via API
Error: expect(received).toBe(expected) // Object.is equality
Expected: 400
Received: 404
489 |
490 | // Should return 400 Bad Request for invalid type
> 491 | expect(response.status()).toBe(400);
| ^
492 | });
493 |
494 | test('should get single provider via API', async ({ request }) => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:491:33
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBe(expected) // Object.is equality
Expected: 400
Received: 404
489 |
490 | // Should return 400 Bad Request for invalid type
> 491 | expect(response.status()).toBe(400);
| ^
492 | });
493 |
494 | test('should get single provider via API', async ({ request }) => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:491:33
attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-crud-DNS-Prov-49999-valid-provider-type-via-API-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-crud-DNS-Prov-49999-valid-provider-type-via-API-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBe(expected) // Object.is equality
Expected: 400
Received: 404
489 |
490 | // Should return 400 Bad Request for invalid type
> 491 | expect(response.status()).toBe(400);
| ^
492 | });
493 |
494 | test('should get single provider via API', async ({ request }) => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:491:33
4) [chromium] tests/dns-provider-types.spec.ts:15:5 DNS Provider Types API: /api/v1/dns-providers/types should return all provider types including built-in and custom
Error: expect(received).toBeTruthy()
Received: false
15 | test('should return all provider types including built-in and custom', async ({ request }) => {
16 | const response = await request.get('/api/v1/dns-providers/types');
> 17 | expect(response.ok()).toBeTruthy();
| ^
18 |
19 | const data = await response.json();
20 | // API returns { types: [...], total: N }
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:17:29
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: false
15 | test('should return all provider types including built-in and custom', async ({ request }) => {
16 | const response = await request.get('/api/v1/dns-providers/types');
> 17 | expect(response.ok()).toBeTruthy();
| ^
18 |
19 | const data = await response.json();
20 | // API returns { types: [...], total: N }
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:17:29
attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-types-DNS-Pro-aa4d6-cluding-built-in-and-custom-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-types-DNS-Pro-aa4d6-cluding-built-in-and-custom-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: false
15 | test('should return all provider types including built-in and custom', async ({ request }) => {
16 | const response = await request.get('/api/v1/dns-providers/types');
> 17 | expect(response.ok()).toBeTruthy();
| ^
18 |
19 | const data = await response.json();
20 | // API returns { types: [...], total: N }
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:17:29
5) [chromium] tests/dns-provider-types.spec.ts:36:5 DNS Provider Types API: /api/v1/dns-providers/types each provider type should have required fields
TypeError: types is not iterable
39 | const types = data.types;
40 |
> 41 | for (const provider of types) {
| ^
42 | expect(provider).toHaveProperty('type');
43 | expect(provider).toHaveProperty('name');
44 | expect(provider).toHaveProperty('fields');
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:41:30
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: types is not iterable
39 | const types = data.types;
40 |
> 41 | for (const provider of types) {
| ^
42 | expect(provider).toHaveProperty('type');
43 | expect(provider).toHaveProperty('name');
44 | expect(provider).toHaveProperty('fields');
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:41:30
attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-types-DNS-Pro-cf7e1-should-have-required-fields-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-types-DNS-Pro-cf7e1-should-have-required-fields-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: types is not iterable
39 | const types = data.types;
40 |
> 41 | for (const provider of types) {
| ^
42 | expect(provider).toHaveProperty('type');
43 | expect(provider).toHaveProperty('name');
44 | expect(provider).toHaveProperty('fields');
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:41:30
6) [chromium] tests/dns-provider-types.spec.ts:49:5 DNS Provider Types API: /api/v1/dns-providers/types manual provider type should have correct configuration
TypeError: Cannot read properties of undefined (reading 'find')
52 | const types = data.types;
53 |
> 54 | const manualProvider = types.find((t: { type: string }) => t.type === 'manual');
| ^
55 | expect(manualProvider).toBeDefined();
56 | expect(manualProvider.name).toMatch(/manual/i);
57 |
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:54:36
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
52 | const types = data.types;
53 |
> 54 | const manualProvider = types.find((t: { type: string }) => t.type === 'manual');
| ^
55 | expect(manualProvider).toBeDefined();
56 | expect(manualProvider.name).toMatch(/manual/i);
57 |
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:54:36
attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-types-DNS-Pro-0fe47--have-correct-configuration-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-types-DNS-Pro-0fe47--have-correct-configuration-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
52 | const types = data.types;
53 |
> 54 | const manualProvider = types.find((t: { type: string }) => t.type === 'manual');
| ^
55 | expect(manualProvider).toBeDefined();
56 | expect(manualProvider.name).toMatch(/manual/i);
57 |
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:54:36
7) [chromium] tests/dns-provider-types.spec.ts:62:5 DNS Provider Types API: /api/v1/dns-providers/types webhook provider type should have url field
TypeError: Cannot read properties of undefined (reading 'find')
65 | const types = data.types;
66 |
> 67 | const webhookProvider = types.find((t: { type: string }) => t.type === 'webhook');
| ^
68 | expect(webhookProvider).toBeDefined();
69 |
70 | // Webhook should have URL configuration field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:67:37
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
65 | const types = data.types;
66 |
> 67 | const webhookProvider = types.find((t: { type: string }) => t.type === 'webhook');
| ^
68 | expect(webhookProvider).toBeDefined();
69 |
70 | // Webhook should have URL configuration field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:67:37
attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-types-DNS-Pro-110d1--type-should-have-url-field-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-types-DNS-Pro-110d1--type-should-have-url-field-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
65 | const types = data.types;
66 |
> 67 | const webhookProvider = types.find((t: { type: string }) => t.type === 'webhook');
| ^
68 | expect(webhookProvider).toBeDefined();
69 |
70 | // Webhook should have URL configuration field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:67:37
8) [chromium] tests/dns-provider-types.spec.ts:75:5 DNS Provider Types API: /api/v1/dns-providers/types rfc2136 provider type should have server and key fields
TypeError: Cannot read properties of undefined (reading 'find')
78 | const types = data.types;
79 |
> 80 | const rfc2136Provider = types.find((t: { type: string }) => t.type === 'rfc2136');
| ^
81 | expect(rfc2136Provider).toBeDefined();
82 |
83 | // RFC2136 (Dynamic DNS) should have server and TSIG key fields
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:80:37
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
78 | const types = data.types;
79 |
> 80 | const rfc2136Provider = types.find((t: { type: string }) => t.type === 'rfc2136');
| ^
81 | expect(rfc2136Provider).toBeDefined();
82 |
83 | // RFC2136 (Dynamic DNS) should have server and TSIG key fields
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:80:37
attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-types-DNS-Pro-357a9--have-server-and-key-fields-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-types-DNS-Pro-357a9--have-server-and-key-fields-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
78 | const types = data.types;
79 |
> 80 | const rfc2136Provider = types.find((t: { type: string }) => t.type === 'rfc2136');
| ^
81 | expect(rfc2136Provider).toBeDefined();
82 |
83 | // RFC2136 (Dynamic DNS) should have server and TSIG key fields
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:80:37
9) [chromium] tests/dns-provider-types.spec.ts:88:5 DNS Provider Types API: /api/v1/dns-providers/types script provider type should have command/path field
TypeError: Cannot read properties of undefined (reading 'find')
91 | const types = data.types;
92 |
> 93 | const scriptProvider = types.find((t: { type: string }) => t.type === 'script');
| ^
94 | expect(scriptProvider).toBeDefined();
95 |
96 | // Script provider should have a command or script path field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:93:36
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
91 | const types = data.types;
92 |
> 93 | const scriptProvider = types.find((t: { type: string }) => t.type === 'script');
| ^
94 | expect(scriptProvider).toBeDefined();
95 |
96 | // Script provider should have a command or script path field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:93:36
attachment #1: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-types-DNS-Pro-2c379-uld-have-command-path-field-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-types-DNS-Pro-2c379-uld-have-command-path-field-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
91 | const types = data.types;
92 |
> 93 | const scriptProvider = types.find((t: { type: string }) => t.type === 'script');
| ^
94 | expect(scriptProvider).toBeDefined();
95 |
96 | // Script provider should have a command or script path field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:93:36
10) [chromium] tests/dns-provider-types.spec.ts:153:5 DNS Provider Types UI: Provider Selector should filter provider types based on search Verify options can be navigated with keyboard
Error: expect(received).toBeGreaterThan(expected)
Expected: > 5
Received: 1
165 |
166 | // Should have multiple provider options available
> 167 | expect(optionCount).toBeGreaterThan(5);
| ^
168 |
169 | // Verify cloudflare option exists in the list
170 | await expect(page.getByRole('option', { name: /cloudflare/i })).toBeVisible();
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:167:29
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:158:7
Error Context: test-results/dns-provider-types-DNS-Pro-b3c1a-vider-types-based-on-search-chromium/error-context.md
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeGreaterThan(expected)
Expected: > 5
Received: 1
165 |
166 | // Should have multiple provider options available
> 167 | expect(optionCount).toBeGreaterThan(5);
| ^
168 |
169 | // Verify cloudflare option exists in the list
170 | await expect(page.getByRole('option', { name: /cloudflare/i })).toBeVisible();
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:167:29
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:158:7
Error Context: test-results/dns-provider-types-DNS-Pro-b3c1a-vider-types-based-on-search-chromium-retry1/error-context.md
attachment #2: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-types-DNS-Pro-b3c1a-vider-types-based-on-search-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-types-DNS-Pro-b3c1a-vider-types-based-on-search-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeGreaterThan(expected)
Expected: > 5
Received: 1
165 |
166 | // Should have multiple provider options available
> 167 | expect(optionCount).toBeGreaterThan(5);
| ^
168 |
169 | // Verify cloudflare option exists in the list
170 | await expect(page.getByRole('option', { name: /cloudflare/i })).toBeVisible();
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:167:29
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:158:7
Error Context: test-results/dns-provider-types-DNS-Pro-b3c1a-vider-types-based-on-search-chromium-retry2/error-context.md
11) [chromium] tests/dns-provider-types.spec.ts:278:5 DNS Provider Types Provider Type Selection should show script path field when Script type is selected Verify Script path/command field appears
Error: expect(locator).toBeVisible() failed
Locator: getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
262 | const scriptField = page.getByRole('textbox', { name: /script path/i })
263 | .or(page.getByPlaceholder(/dns-challenge\.sh/i));
> 264 | await expect(scriptField).toBeVisible();
| ^
265 | });
266 | });
267 | });
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:264:35
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:260:18
Error Context: test-results/dns-provider-types-DNS-Pro-b805a-hen-Script-type-is-selected-chromium/error-context.md
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
262 | const scriptField = page.getByRole('textbox', { name: /script path/i })
263 | .or(page.getByPlaceholder(/dns-challenge\.sh/i));
> 264 | await expect(scriptField).toBeVisible();
| ^
265 | });
266 | });
267 | });
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:264:35
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:260:18
Error Context: test-results/dns-provider-types-DNS-Pro-b805a-hen-Script-type-is-selected-chromium-retry1/error-context.md
attachment #2: trace (application/zip) ─────────────────────────────────────────────────────────
test-results/dns-provider-types-DNS-Pro-b805a-hen-Script-type-is-selected-chromium-retry1/trace.zip
Usage:
npx playwright show-trace test-results/dns-provider-types-DNS-Pro-b805a-hen-Script-type-is-selected-chromium-retry1/trace.zip
────────────────────────────────────────────────────────────────────────────────────────────────
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
262 | const scriptField = page.getByRole('textbox', { name: /script path/i })
263 | .or(page.getByPlaceholder(/dns-challenge\.sh/i));
> 264 | await expect(scriptField).toBeVisible();
| ^
265 | });
266 | });
267 | });
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:264:35
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:260:18
Error Context: test-results/dns-provider-types-DNS-Pro-b805a-hen-Script-type-is-selected-chromium-retry2/error-context.md
11 failed
[chromium] tests/dns-provider-crud.spec.ts:16:5 DNS Provider CRUD Operations Create Provider should create a Manual DNS provider
[chromium] tests/dns-provider-crud.spec.ts:501:5 DNS Provider CRUD Operations API Operations should list providers via API
[chromium] tests/dns-provider-crud.spec.ts:534:5 DNS Provider CRUD Operations API Operations should reject invalid provider type via API
[chromium] tests/dns-provider-types.spec.ts:15:5 DNS Provider Types API: /api/v1/dns-providers/types should return all provider types including built-in and custom
[chromium] tests/dns-provider-types.spec.ts:36:5 DNS Provider Types API: /api/v1/dns-providers/types each provider type should have required fields
[chromium] tests/dns-provider-types.spec.ts:49:5 DNS Provider Types API: /api/v1/dns-providers/types manual provider type should have correct configuration
[chromium] tests/dns-provider-types.spec.ts:62:5 DNS Provider Types API: /api/v1/dns-providers/types webhook provider type should have url field
[chromium] tests/dns-provider-types.spec.ts:75:5 DNS Provider Types API: /api/v1/dns-providers/types rfc2136 provider type should have server and key fields
[chromium] tests/dns-provider-types.spec.ts:88:5 DNS Provider Types API: /api/v1/dns-providers/types script provider type should have command/path field
[chromium] tests/dns-provider-types.spec.ts:153:5 DNS Provider Types UI: Provider Selector should filter provider types based on search
[chromium] tests/dns-provider-types.spec.ts:278:5 DNS Provider Types Provider Type Selection should show script path field when Script type is selected
4 skipped
40 passed (2.0m)
Error: 1) [chromium] tests/dns-provider-crud.spec.ts:16:5 DNS Provider CRUD Operations Create Provider should create a Manual DNS provider Save provider
Error: expect(locator).not.toBeVisible() failed
Locator: getByRole('dialog')
Expected: not visible
Received: visible
Timeout: 10000ms
Call log:
- Expect "not toBeVisible" with timeout 10000ms
- waiting for getByRole('dialog')
14 × locator resolved to <div role="dialog" tabindex="-1" id="radix-_r_0_" data-state="open" aria-labelledby="radix-_r_1_" class="fixed left-[50%] top-[50%] z-50 w-full translate-x-[-50%] translate-y-[-50%] bg-surface-elevated border border-border rounded-xl shadow-xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:sli…>…</div>
- unexpected value "visible"
65 |
66 | // Wait for dialog to close (indicates success)
> 67 | await expect(dialog).not.toBeVisible({ timeout: 10000 });
| ^
68 | });
69 |
70 | await test.step('Verify success', async () => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:67:34
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:40:7
Error: 1) [chromium] tests/dns-provider-crud.spec.ts:16:5 DNS Provider CRUD Operations Create Provider should create a Manual DNS provider Save provider
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).not.toBeVisible() failed
Locator: getByRole('dialog')
Expected: not visible
Received: visible
Timeout: 10000ms
Call log:
- Expect "not toBeVisible" with timeout 10000ms
- waiting for getByRole('dialog')
14 × locator resolved to <div role="dialog" tabindex="-1" id="radix-_r_0_" data-state="open" aria-labelledby="radix-_r_1_" class="fixed left-[50%] top-[50%] z-50 w-full translate-x-[-50%] translate-y-[-50%] bg-surface-elevated border border-border rounded-xl shadow-xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:sli…>…</div>
- unexpected value "visible"
65 |
66 | // Wait for dialog to close (indicates success)
> 67 | await expect(dialog).not.toBeVisible({ timeout: 10000 });
| ^
68 | });
69 |
70 | await test.step('Verify success', async () => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:67:34
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:40:7
Error: 1) [chromium] tests/dns-provider-crud.spec.ts:16:5 DNS Provider CRUD Operations Create Provider should create a Manual DNS provider Save provider
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).not.toBeVisible() failed
Locator: getByRole('dialog')
Expected: not visible
Received: visible
Timeout: 10000ms
Call log:
- Expect "not toBeVisible" with timeout 10000ms
- waiting for getByRole('dialog')
14 × locator resolved to <div role="dialog" tabindex="-1" id="radix-_r_0_" data-state="open" aria-labelledby="radix-_r_1_" class="fixed left-[50%] top-[50%] z-50 w-full translate-x-[-50%] translate-y-[-50%] bg-surface-elevated border border-border rounded-xl shadow-xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:sli…>…</div>
- unexpected value "visible"
65 |
66 | // Wait for dialog to close (indicates success)
> 67 | await expect(dialog).not.toBeVisible({ timeout: 10000 });
| ^
68 | });
69 |
70 | await test.step('Verify success', async () => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:67:34
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:40:7
Error: 2) [chromium] tests/dns-provider-crud.spec.ts:501:5 DNS Provider CRUD Operations API Operations should list providers via API
Error: expect(received).toBeTruthy()
Received: false
449 | test('should list providers via API', async ({ request }) => {
450 | const response = await request.get('/api/v1/dns-providers');
> 451 | expect(response.ok()).toBeTruthy();
| ^
452 |
453 | const data = await response.json();
454 | // Response should be an array (possibly empty)
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:451:29
Error: 2) [chromium] tests/dns-provider-crud.spec.ts:501:5 DNS Provider CRUD Operations API Operations should list providers via API
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: false
449 | test('should list providers via API', async ({ request }) => {
450 | const response = await request.get('/api/v1/dns-providers');
> 451 | expect(response.ok()).toBeTruthy();
| ^
452 |
453 | const data = await response.json();
454 | // Response should be an array (possibly empty)
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:451:29
Error: 2) [chromium] tests/dns-provider-crud.spec.ts:501:5 DNS Provider CRUD Operations API Operations should list providers via API
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: false
449 | test('should list providers via API', async ({ request }) => {
450 | const response = await request.get('/api/v1/dns-providers');
> 451 | expect(response.ok()).toBeTruthy();
| ^
452 |
453 | const data = await response.json();
454 | // Response should be an array (possibly empty)
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:451:29
Error: 3) [chromium] tests/dns-provider-crud.spec.ts:534:5 DNS Provider CRUD Operations API Operations should reject invalid provider type via API
Error: expect(received).toBe(expected) // Object.is equality
Expected: 400
Received: 404
489 |
490 | // Should return 400 Bad Request for invalid type
> 491 | expect(response.status()).toBe(400);
| ^
492 | });
493 |
494 | test('should get single provider via API', async ({ request }) => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:491:33
Error: 3) [chromium] tests/dns-provider-crud.spec.ts:534:5 DNS Provider CRUD Operations API Operations should reject invalid provider type via API
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBe(expected) // Object.is equality
Expected: 400
Received: 404
489 |
490 | // Should return 400 Bad Request for invalid type
> 491 | expect(response.status()).toBe(400);
| ^
492 | });
493 |
494 | test('should get single provider via API', async ({ request }) => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:491:33
Error: 3) [chromium] tests/dns-provider-crud.spec.ts:534:5 DNS Provider CRUD Operations API Operations should reject invalid provider type via API
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBe(expected) // Object.is equality
Expected: 400
Received: 404
489 |
490 | // Should return 400 Bad Request for invalid type
> 491 | expect(response.status()).toBe(400);
| ^
492 | });
493 |
494 | test('should get single provider via API', async ({ request }) => {
at /home/runner/work/Charon/Charon/tests/dns-provider-crud.spec.ts:491:33
Error: 4) [chromium] tests/dns-provider-types.spec.ts:15:5 DNS Provider Types API: /api/v1/dns-providers/types should return all provider types including built-in and custom
Error: expect(received).toBeTruthy()
Received: false
15 | test('should return all provider types including built-in and custom', async ({ request }) => {
16 | const response = await request.get('/api/v1/dns-providers/types');
> 17 | expect(response.ok()).toBeTruthy();
| ^
18 |
19 | const data = await response.json();
20 | // API returns { types: [...], total: N }
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:17:29
Error: 4) [chromium] tests/dns-provider-types.spec.ts:15:5 DNS Provider Types API: /api/v1/dns-providers/types should return all provider types including built-in and custom
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: false
15 | test('should return all provider types including built-in and custom', async ({ request }) => {
16 | const response = await request.get('/api/v1/dns-providers/types');
> 17 | expect(response.ok()).toBeTruthy();
| ^
18 |
19 | const data = await response.json();
20 | // API returns { types: [...], total: N }
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:17:29
Error: 4) [chromium] tests/dns-provider-types.spec.ts:15:5 DNS Provider Types API: /api/v1/dns-providers/types should return all provider types including built-in and custom
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeTruthy()
Received: false
15 | test('should return all provider types including built-in and custom', async ({ request }) => {
16 | const response = await request.get('/api/v1/dns-providers/types');
> 17 | expect(response.ok()).toBeTruthy();
| ^
18 |
19 | const data = await response.json();
20 | // API returns { types: [...], total: N }
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:17:29
Error: 5) [chromium] tests/dns-provider-types.spec.ts:36:5 DNS Provider Types API: /api/v1/dns-providers/types each provider type should have required fields
TypeError: types is not iterable
39 | const types = data.types;
40 |
> 41 | for (const provider of types) {
| ^
42 | expect(provider).toHaveProperty('type');
43 | expect(provider).toHaveProperty('name');
44 | expect(provider).toHaveProperty('fields');
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:41:30
Error: 5) [chromium] tests/dns-provider-types.spec.ts:36:5 DNS Provider Types API: /api/v1/dns-providers/types each provider type should have required fields
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: types is not iterable
39 | const types = data.types;
40 |
> 41 | for (const provider of types) {
| ^
42 | expect(provider).toHaveProperty('type');
43 | expect(provider).toHaveProperty('name');
44 | expect(provider).toHaveProperty('fields');
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:41:30
Error: 5) [chromium] tests/dns-provider-types.spec.ts:36:5 DNS Provider Types API: /api/v1/dns-providers/types each provider type should have required fields
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: types is not iterable
39 | const types = data.types;
40 |
> 41 | for (const provider of types) {
| ^
42 | expect(provider).toHaveProperty('type');
43 | expect(provider).toHaveProperty('name');
44 | expect(provider).toHaveProperty('fields');
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:41:30
Error: 6) [chromium] tests/dns-provider-types.spec.ts:49:5 DNS Provider Types API: /api/v1/dns-providers/types manual provider type should have correct configuration
TypeError: Cannot read properties of undefined (reading 'find')
52 | const types = data.types;
53 |
> 54 | const manualProvider = types.find((t: { type: string }) => t.type === 'manual');
| ^
55 | expect(manualProvider).toBeDefined();
56 | expect(manualProvider.name).toMatch(/manual/i);
57 |
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:54:36
Error: 6) [chromium] tests/dns-provider-types.spec.ts:49:5 DNS Provider Types API: /api/v1/dns-providers/types manual provider type should have correct configuration
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
52 | const types = data.types;
53 |
> 54 | const manualProvider = types.find((t: { type: string }) => t.type === 'manual');
| ^
55 | expect(manualProvider).toBeDefined();
56 | expect(manualProvider.name).toMatch(/manual/i);
57 |
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:54:36
Error: 6) [chromium] tests/dns-provider-types.spec.ts:49:5 DNS Provider Types API: /api/v1/dns-providers/types manual provider type should have correct configuration
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
52 | const types = data.types;
53 |
> 54 | const manualProvider = types.find((t: { type: string }) => t.type === 'manual');
| ^
55 | expect(manualProvider).toBeDefined();
56 | expect(manualProvider.name).toMatch(/manual/i);
57 |
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:54:36
Error: 7) [chromium] tests/dns-provider-types.spec.ts:62:5 DNS Provider Types API: /api/v1/dns-providers/types webhook provider type should have url field
TypeError: Cannot read properties of undefined (reading 'find')
65 | const types = data.types;
66 |
> 67 | const webhookProvider = types.find((t: { type: string }) => t.type === 'webhook');
| ^
68 | expect(webhookProvider).toBeDefined();
69 |
70 | // Webhook should have URL configuration field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:67:37
Error: 7) [chromium] tests/dns-provider-types.spec.ts:62:5 DNS Provider Types API: /api/v1/dns-providers/types webhook provider type should have url field
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
65 | const types = data.types;
66 |
> 67 | const webhookProvider = types.find((t: { type: string }) => t.type === 'webhook');
| ^
68 | expect(webhookProvider).toBeDefined();
69 |
70 | // Webhook should have URL configuration field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:67:37
Error: 7) [chromium] tests/dns-provider-types.spec.ts:62:5 DNS Provider Types API: /api/v1/dns-providers/types webhook provider type should have url field
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
65 | const types = data.types;
66 |
> 67 | const webhookProvider = types.find((t: { type: string }) => t.type === 'webhook');
| ^
68 | expect(webhookProvider).toBeDefined();
69 |
70 | // Webhook should have URL configuration field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:67:37
Error: 8) [chromium] tests/dns-provider-types.spec.ts:75:5 DNS Provider Types API: /api/v1/dns-providers/types rfc2136 provider type should have server and key fields
TypeError: Cannot read properties of undefined (reading 'find')
78 | const types = data.types;
79 |
> 80 | const rfc2136Provider = types.find((t: { type: string }) => t.type === 'rfc2136');
| ^
81 | expect(rfc2136Provider).toBeDefined();
82 |
83 | // RFC2136 (Dynamic DNS) should have server and TSIG key fields
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:80:37
Error: 8) [chromium] tests/dns-provider-types.spec.ts:75:5 DNS Provider Types API: /api/v1/dns-providers/types rfc2136 provider type should have server and key fields
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
78 | const types = data.types;
79 |
> 80 | const rfc2136Provider = types.find((t: { type: string }) => t.type === 'rfc2136');
| ^
81 | expect(rfc2136Provider).toBeDefined();
82 |
83 | // RFC2136 (Dynamic DNS) should have server and TSIG key fields
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:80:37
Error: 8) [chromium] tests/dns-provider-types.spec.ts:75:5 DNS Provider Types API: /api/v1/dns-providers/types rfc2136 provider type should have server and key fields
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
78 | const types = data.types;
79 |
> 80 | const rfc2136Provider = types.find((t: { type: string }) => t.type === 'rfc2136');
| ^
81 | expect(rfc2136Provider).toBeDefined();
82 |
83 | // RFC2136 (Dynamic DNS) should have server and TSIG key fields
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:80:37
Error: 9) [chromium] tests/dns-provider-types.spec.ts:88:5 DNS Provider Types API: /api/v1/dns-providers/types script provider type should have command/path field
TypeError: Cannot read properties of undefined (reading 'find')
91 | const types = data.types;
92 |
> 93 | const scriptProvider = types.find((t: { type: string }) => t.type === 'script');
| ^
94 | expect(scriptProvider).toBeDefined();
95 |
96 | // Script provider should have a command or script path field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:93:36
Error: 9) [chromium] tests/dns-provider-types.spec.ts:88:5 DNS Provider Types API: /api/v1/dns-providers/types script provider type should have command/path field
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
91 | const types = data.types;
92 |
> 93 | const scriptProvider = types.find((t: { type: string }) => t.type === 'script');
| ^
94 | expect(scriptProvider).toBeDefined();
95 |
96 | // Script provider should have a command or script path field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:93:36
Error: 9) [chromium] tests/dns-provider-types.spec.ts:88:5 DNS Provider Types API: /api/v1/dns-providers/types script provider type should have command/path field
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
TypeError: Cannot read properties of undefined (reading 'find')
91 | const types = data.types;
92 |
> 93 | const scriptProvider = types.find((t: { type: string }) => t.type === 'script');
| ^
94 | expect(scriptProvider).toBeDefined();
95 |
96 | // Script provider should have a command or script path field
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:93:36
Error: 10) [chromium] tests/dns-provider-types.spec.ts:153:5 DNS Provider Types UI: Provider Selector should filter provider types based on search Verify options can be navigated with keyboard
Error: expect(received).toBeGreaterThan(expected)
Expected: > 5
Received: 1
165 |
166 | // Should have multiple provider options available
> 167 | expect(optionCount).toBeGreaterThan(5);
| ^
168 |
169 | // Verify cloudflare option exists in the list
170 | await expect(page.getByRole('option', { name: /cloudflare/i })).toBeVisible();
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:167:29
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:158:7
Error: 10) [chromium] tests/dns-provider-types.spec.ts:153:5 DNS Provider Types UI: Provider Selector should filter provider types based on search Verify options can be navigated with keyboard
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeGreaterThan(expected)
Expected: > 5
Received: 1
165 |
166 | // Should have multiple provider options available
> 167 | expect(optionCount).toBeGreaterThan(5);
| ^
168 |
169 | // Verify cloudflare option exists in the list
170 | await expect(page.getByRole('option', { name: /cloudflare/i })).toBeVisible();
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:167:29
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:158:7
Error: 10) [chromium] tests/dns-provider-types.spec.ts:153:5 DNS Provider Types UI: Provider Selector should filter provider types based on search Verify options can be navigated with keyboard
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(received).toBeGreaterThan(expected)
Expected: > 5
Received: 1
165 |
166 | // Should have multiple provider options available
> 167 | expect(optionCount).toBeGreaterThan(5);
| ^
168 |
169 | // Verify cloudflare option exists in the list
170 | await expect(page.getByRole('option', { name: /cloudflare/i })).toBeVisible();
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:167:29
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:158:7
Error: 11) [chromium] tests/dns-provider-types.spec.ts:278:5 DNS Provider Types Provider Type Selection should show script path field when Script type is selected Verify Script path/command field appears
Error: expect(locator).toBeVisible() failed
Locator: getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
262 | const scriptField = page.getByRole('textbox', { name: /script path/i })
263 | .or(page.getByPlaceholder(/dns-challenge\.sh/i));
> 264 | await expect(scriptField).toBeVisible();
| ^
265 | });
266 | });
267 | });
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:264:35
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:260:18
Error: 11) [chromium] tests/dns-provider-types.spec.ts:278:5 DNS Provider Types Provider Type Selection should show script path field when Script type is selected Verify Script path/command field appears
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
262 | const scriptField = page.getByRole('textbox', { name: /script path/i })
263 | .or(page.getByPlaceholder(/dns-challenge\.sh/i));
> 264 | await expect(scriptField).toBeVisible();
| ^
265 | });
266 | });
267 | });
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:264:35
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:260:18
Error: 11) [chromium] tests/dns-provider-types.spec.ts:278:5 DNS Provider Types Provider Type Selection should show script path field when Script type is selected Verify Script path/command field appears
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('textbox', { name: /script path/i }).or(getByPlaceholder(/dns-challenge\.sh/i))
262 | const scriptField = page.getByRole('textbox', { name: /script path/i })
263 | .or(page.getByPlaceholder(/dns-challenge\.sh/i));
> 264 | await expect(scriptField).toBeVisible();
| ^
265 | });
266 | });
267 | });
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:264:35
at /home/runner/work/Charon/Charon/tests/dns-provider-types.spec.ts:260:18
Notice: 11 failed
[chromium] tests/dns-provider-crud.spec.ts:16:5 DNS Provider CRUD Operations Create Provider should create a Manual DNS provider
[chromium] tests/dns-provider-crud.spec.ts:501:5 DNS Provider CRUD Operations API Operations should list providers via API
[chromium] tests/dns-provider-crud.spec.ts:534:5 DNS Provider CRUD Operations API Operations should reject invalid provider type via API
[chromium] tests/dns-provider-types.spec.ts:15:5 DNS Provider Types API: /api/v1/dns-providers/types should return all provider types including built-in and custom
[chromium] tests/dns-provider-types.spec.ts:36:5 DNS Provider Types API: /api/v1/dns-providers/types each provider type should have required fields
[chromium] tests/dns-provider-types.spec.ts:49:5 DNS Provider Types API: /api/v1/dns-providers/types manual provider type should have correct configuration
[chromium] tests/dns-provider-types.spec.ts:62:5 DNS Provider Types API: /api/v1/dns-providers/types webhook provider type should have url field
[chromium] tests/dns-provider-types.spec.ts:75:5 DNS Provider Types API: /api/v1/dns-providers/types rfc2136 provider type should have server and key fields
[chromium] tests/dns-provider-types.spec.ts:88:5 DNS Provider Types API: /api/v1/dns-providers/types script provider type should have command/path field
[chromium] tests/dns-provider-types.spec.ts:153:5 DNS Provider Types UI: Provider Selector should filter provider types based on search
[chromium] tests/dns-provider-types.spec.ts:278:5 DNS Provider Types Provider Type Selection should show script path field when Script type is selected
4 skipped
40 passed (2.0m)
Error: Process completed with exit code 1.