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
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
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.