@sleep2agi/agent-network-dashboard 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +19 -0
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +4 -4
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/server/app/admin.html +2 -2
- package/.next/server/app/admin.rsc +2 -2
- package/.next/server/app/admin.segments/_full.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +2 -2
- package/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +2 -2
- package/.next/server/app/docs.rsc +3 -3
- package/.next/server/app/docs.segments/_full.segment.rsc +3 -3
- package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +2 -2
- package/.next/server/app/logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
- package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/messages.html +2 -2
- package/.next/server/app/messages.rsc +2 -2
- package/.next/server/app/messages.segments/_full.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +2 -2
- package/.next/server/app/messages.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node/page_client-reference-manifest.js +1 -1
- package/.next/server/app/node.html +2 -2
- package/.next/server/app/node.rsc +2 -2
- package/.next/server/app/node.segments/_full.segment.rsc +2 -2
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +2 -2
- package/.next/server/app/node.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/node.segments/node.segment.rsc +1 -1
- package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/nodes.html +2 -2
- package/.next/server/app/nodes.rsc +2 -2
- package/.next/server/app/nodes.segments/_full.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/server-logs.html +2 -2
- package/.next/server/app/server-logs.rsc +2 -2
- package/.next/server/app/server-logs.segments/_full.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/server-logs.segments/server-logs.segment.rsc +1 -1
- package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +2 -2
- package/.next/server/app/settings/networks.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/tokens.html +2 -2
- package/.next/server/app/settings/tokens.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
- package/.next/server/app/tasks.html +2 -2
- package/.next/server/app/tasks.rsc +2 -2
- package/.next/server/app/tasks.segments/_full.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- package/.next/server/chunks/[root-of-the-server]__0.r9hpx._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0.~awwb._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__011ghni._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0_roltz._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0ak3zmb._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0c0_p0v._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0c5h0a~._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0cfodg2._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0fo7jlh._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0h-9kwu._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0h-9kwu._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0hj~i84._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0hj~i84._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0hxwf9u._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0k3eytp._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0khwewd._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0ku8l.~._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0ku8l.~._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0lu__6g._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0nsfjkb._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0nsfjkb._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0wpe~w2._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__10ducxb._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__114809t._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__114809t._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__11yl3c.._.js.map +1 -1
- package/.next/server/chunks/ssr/app_docs_page_tsx_0a3qz3_._.js +1 -1
- package/.next/server/chunks/ssr/app_docs_page_tsx_0a3qz3_._.js.map +1 -1
- package/.next/server/chunks/ssr/app_login_page_tsx_0z71ad3._.js +1 -1
- package/.next/server/chunks/ssr/app_login_page_tsx_0z71ad3._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{063eleenll4ri.js → 06.gd_vlnz5n0.js} +6 -6
- package/.next/static/chunks/0mz9c6--6di2j.css +2 -0
- package/.next/static/chunks/{0afxijuigt-49.js → 0o5zj~5vjeks3.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/CODE_OF_CONDUCT.md +43 -0
- package/CONTRIBUTING.md +67 -0
- package/LICENSE +202 -0
- package/NOTICE +17 -0
- package/SECURITY.md +41 -0
- package/app/api/hub/events/route.ts +1 -1
- package/app/api/hub/nodes/route.ts +1 -1
- package/app/api/hub/send/route.ts +1 -1
- package/app/api/hub/server-logs/route.ts +1 -1
- package/app/api/hub/tasks/route.ts +1 -1
- package/app/docs/page.tsx +1 -1
- package/app/globals.css +158 -12
- package/app/lib/hub.ts +0 -3
- package/app/login/page.tsx +1 -1
- package/package.json +9 -3
- package/test-results/.last-run.json +2 -7
- package/.next/static/chunks/0f7op3pijuqfp.css +0 -2
- package/test-results/e2e-Dashboard-E2E-Tests-nodes-page-shows-demo-nodes/error-context.md +0 -149
- package/test-results/e2e-Dashboard-E2E-Tests-overview-page-shows-stats/error-context.md +0 -149
- package/test-results/e2e-Dashboard-E2E-Tests-settings-page-shows-license-config/error-context.md +0 -149
- package/test-results/e2e-Dashboard-E2E-Tests-sidebar-navigation-works/error-context.md +0 -149
- package/tsconfig.tsbuildinfo +0 -1
- /package/.next/static/{-jUT94SC1lsdw_iAzLYdx → dR3GSMnwa4k46SIbP3PaK}/_buildManifest.js +0 -0
- /package/.next/static/{-jUT94SC1lsdw_iAzLYdx → dR3GSMnwa4k46SIbP3PaK}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{-jUT94SC1lsdw_iAzLYdx → dR3GSMnwa4k46SIbP3PaK}/_ssgManifest.js +0 -0
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# Instructions
|
|
2
|
-
|
|
3
|
-
- Following Playwright test failed.
|
|
4
|
-
- Explain why, be concise, respect Playwright best practices.
|
|
5
|
-
- Provide a snippet of code with the fix, if possible.
|
|
6
|
-
|
|
7
|
-
# Test info
|
|
8
|
-
|
|
9
|
-
- Name: e2e.spec.ts >> Dashboard E2E Tests >> overview page shows stats
|
|
10
|
-
- Location: tests/e2e.spec.ts:27:7
|
|
11
|
-
|
|
12
|
-
# Error details
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
TimeoutError: page.waitForURL: Timeout 10000ms exceeded.
|
|
16
|
-
=========================== logs ===========================
|
|
17
|
-
waiting for navigation to "http://localhost:3000/" until "load"
|
|
18
|
-
============================================================
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
# Page snapshot
|
|
22
|
-
|
|
23
|
-
```yaml
|
|
24
|
-
- generic [ref=e1]:
|
|
25
|
-
- main [ref=e2]:
|
|
26
|
-
- generic [ref=e3]:
|
|
27
|
-
- generic [ref=e4]:
|
|
28
|
-
- img [ref=e6]
|
|
29
|
-
- heading "Agent Network" [level=1] [ref=e8]
|
|
30
|
-
- paragraph [ref=e9]: Dashboard
|
|
31
|
-
- generic [ref=e10]:
|
|
32
|
-
- button "Sign in" [active] [ref=e11]
|
|
33
|
-
- button "Register" [ref=e12]
|
|
34
|
-
- generic [ref=e13]:
|
|
35
|
-
- generic [ref=e14]: Username
|
|
36
|
-
- textbox "Username" [ref=e15]:
|
|
37
|
-
- /placeholder: Enter username
|
|
38
|
-
- text: admin
|
|
39
|
-
- generic [ref=e16]: Password
|
|
40
|
-
- textbox "Password" [ref=e17]:
|
|
41
|
-
- /placeholder: Enter password
|
|
42
|
-
- text: admin123
|
|
43
|
-
- button "Sign in" [ref=e18]
|
|
44
|
-
- paragraph [ref=e19]: Powered by CommHub V3
|
|
45
|
-
- button "Open Next.js Dev Tools" [ref=e25] [cursor=pointer]:
|
|
46
|
-
- img [ref=e26]
|
|
47
|
-
- alert [ref=e29]
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
# Test source
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
1 | import { test, expect } from '@playwright/test';
|
|
54
|
-
2 |
|
|
55
|
-
3 | const BASE = process.env.TEST_URL || 'http://localhost:3000';
|
|
56
|
-
4 | const ADMIN_USER = 'admin';
|
|
57
|
-
5 | const ADMIN_PASS = 'admin123';
|
|
58
|
-
6 |
|
|
59
|
-
7 | test.describe('Dashboard E2E Tests', () => {
|
|
60
|
-
8 | test('login page loads', async ({ page }) => {
|
|
61
|
-
9 | await page.goto(`${BASE}/login`);
|
|
62
|
-
10 | await expect(page.locator('text=Agent Network')).toBeVisible();
|
|
63
|
-
11 | await expect(page.locator('input[type="text"]')).toBeVisible();
|
|
64
|
-
12 | await expect(page.locator('input[type="password"]')).toBeVisible();
|
|
65
|
-
13 | });
|
|
66
|
-
14 |
|
|
67
|
-
15 | test('V3 register + login flow', async ({ page }) => {
|
|
68
|
-
16 | await page.goto(`${BASE}/login`);
|
|
69
|
-
17 | // Switch to register
|
|
70
|
-
18 | await page.click('text=Register');
|
|
71
|
-
19 | await page.fill('input[type="text"]', `test_${Date.now()}`);
|
|
72
|
-
20 | await page.fill('input[type="password"]', 'test123456');
|
|
73
|
-
21 | await page.click('button:has-text("Create account")');
|
|
74
|
-
22 | // Should redirect to dashboard
|
|
75
|
-
23 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
76
|
-
24 | await expect(page.locator('text=Agent Network')).toBeVisible();
|
|
77
|
-
25 | });
|
|
78
|
-
26 |
|
|
79
|
-
27 | test('overview page shows stats', async ({ page }) => {
|
|
80
|
-
28 | // Login first
|
|
81
|
-
29 | await page.goto(`${BASE}/login`);
|
|
82
|
-
30 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
83
|
-
31 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
84
|
-
32 | await page.click('button:has-text("Sign in")');
|
|
85
|
-
> 33 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
86
|
-
| ^ TimeoutError: page.waitForURL: Timeout 10000ms exceeded.
|
|
87
|
-
34 |
|
|
88
|
-
35 | // Check stats bar
|
|
89
|
-
36 | await expect(page.locator('text=Online')).toBeVisible();
|
|
90
|
-
37 | await expect(page.locator('text=Working')).toBeVisible();
|
|
91
|
-
38 | await expect(page.locator('text=Total')).toBeVisible();
|
|
92
|
-
39 | });
|
|
93
|
-
40 |
|
|
94
|
-
41 | test('sidebar navigation works', async ({ page }) => {
|
|
95
|
-
42 | await page.goto(`${BASE}/login`);
|
|
96
|
-
43 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
97
|
-
44 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
98
|
-
45 | await page.click('button:has-text("Sign in")');
|
|
99
|
-
46 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
100
|
-
47 |
|
|
101
|
-
48 | // Navigate to Tasks
|
|
102
|
-
49 | await page.click('a:has-text("Tasks")');
|
|
103
|
-
50 | await page.waitForURL(`${BASE}/tasks`);
|
|
104
|
-
51 | await expect(page.locator('h1:has-text("Tasks")')).toBeVisible();
|
|
105
|
-
52 |
|
|
106
|
-
53 | // Navigate to Nodes
|
|
107
|
-
54 | await page.click('a:has-text("Nodes")');
|
|
108
|
-
55 | await page.waitForURL(`${BASE}/nodes`);
|
|
109
|
-
56 | await expect(page.locator('h1:has-text("Nodes")')).toBeVisible();
|
|
110
|
-
57 |
|
|
111
|
-
58 | // Navigate to Messages
|
|
112
|
-
59 | await page.click('a:has-text("Messages")');
|
|
113
|
-
60 | await page.waitForURL(`${BASE}/messages`);
|
|
114
|
-
61 | await expect(page.locator('h1:has-text("Messages")')).toBeVisible();
|
|
115
|
-
62 |
|
|
116
|
-
63 | // Navigate to Settings
|
|
117
|
-
64 | await page.click('a:has-text("Settings")');
|
|
118
|
-
65 | await page.waitForURL(`${BASE}/settings`);
|
|
119
|
-
66 | await expect(page.locator('h1:has-text("Settings")')).toBeVisible();
|
|
120
|
-
67 | });
|
|
121
|
-
68 |
|
|
122
|
-
69 | test('nodes page shows demo nodes', async ({ page }) => {
|
|
123
|
-
70 | await page.goto(`${BASE}/login`);
|
|
124
|
-
71 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
125
|
-
72 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
126
|
-
73 | await page.click('button:has-text("Sign in")');
|
|
127
|
-
74 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
128
|
-
75 |
|
|
129
|
-
76 | await page.goto(`${BASE}/nodes`);
|
|
130
|
-
77 | await page.waitForTimeout(3000);
|
|
131
|
-
78 | // Should see demo nodes
|
|
132
|
-
79 | const content = await page.textContent('body');
|
|
133
|
-
80 | expect(content).toContain('online');
|
|
134
|
-
81 | });
|
|
135
|
-
82 |
|
|
136
|
-
83 | test('settings page shows license + config', async ({ page }) => {
|
|
137
|
-
84 | await page.goto(`${BASE}/login`);
|
|
138
|
-
85 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
139
|
-
86 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
140
|
-
87 | await page.click('button:has-text("Sign in")');
|
|
141
|
-
88 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
142
|
-
89 |
|
|
143
|
-
90 | await page.goto(`${BASE}/settings`);
|
|
144
|
-
91 | await expect(page.locator('text=CommHub Connection')).toBeVisible();
|
|
145
|
-
92 | await expect(page.locator('text=License')).toBeVisible();
|
|
146
|
-
93 | });
|
|
147
|
-
94 | });
|
|
148
|
-
95 |
|
|
149
|
-
```
|
package/test-results/e2e-Dashboard-E2E-Tests-settings-page-shows-license-config/error-context.md
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# Instructions
|
|
2
|
-
|
|
3
|
-
- Following Playwright test failed.
|
|
4
|
-
- Explain why, be concise, respect Playwright best practices.
|
|
5
|
-
- Provide a snippet of code with the fix, if possible.
|
|
6
|
-
|
|
7
|
-
# Test info
|
|
8
|
-
|
|
9
|
-
- Name: e2e.spec.ts >> Dashboard E2E Tests >> settings page shows license + config
|
|
10
|
-
- Location: tests/e2e.spec.ts:83:7
|
|
11
|
-
|
|
12
|
-
# Error details
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
TimeoutError: page.waitForURL: Timeout 10000ms exceeded.
|
|
16
|
-
=========================== logs ===========================
|
|
17
|
-
waiting for navigation to "http://localhost:3000/" until "load"
|
|
18
|
-
============================================================
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
# Page snapshot
|
|
22
|
-
|
|
23
|
-
```yaml
|
|
24
|
-
- generic [ref=e1]:
|
|
25
|
-
- main [ref=e2]:
|
|
26
|
-
- generic [ref=e3]:
|
|
27
|
-
- generic [ref=e4]:
|
|
28
|
-
- img [ref=e6]
|
|
29
|
-
- heading "Agent Network" [level=1] [ref=e8]
|
|
30
|
-
- paragraph [ref=e9]: Dashboard
|
|
31
|
-
- generic [ref=e10]:
|
|
32
|
-
- button "Sign in" [active] [ref=e11]
|
|
33
|
-
- button "Register" [ref=e12]
|
|
34
|
-
- generic [ref=e13]:
|
|
35
|
-
- generic [ref=e14]: Username
|
|
36
|
-
- textbox "Username" [ref=e15]:
|
|
37
|
-
- /placeholder: Enter username
|
|
38
|
-
- text: admin
|
|
39
|
-
- generic [ref=e16]: Password
|
|
40
|
-
- textbox "Password" [ref=e17]:
|
|
41
|
-
- /placeholder: Enter password
|
|
42
|
-
- text: admin123
|
|
43
|
-
- button "Sign in" [ref=e18]
|
|
44
|
-
- paragraph [ref=e19]: Powered by CommHub V3
|
|
45
|
-
- button "Open Next.js Dev Tools" [ref=e25] [cursor=pointer]:
|
|
46
|
-
- img [ref=e26]
|
|
47
|
-
- alert [ref=e29]
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
# Test source
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
1 | import { test, expect } from '@playwright/test';
|
|
54
|
-
2 |
|
|
55
|
-
3 | const BASE = process.env.TEST_URL || 'http://localhost:3000';
|
|
56
|
-
4 | const ADMIN_USER = 'admin';
|
|
57
|
-
5 | const ADMIN_PASS = 'admin123';
|
|
58
|
-
6 |
|
|
59
|
-
7 | test.describe('Dashboard E2E Tests', () => {
|
|
60
|
-
8 | test('login page loads', async ({ page }) => {
|
|
61
|
-
9 | await page.goto(`${BASE}/login`);
|
|
62
|
-
10 | await expect(page.locator('text=Agent Network')).toBeVisible();
|
|
63
|
-
11 | await expect(page.locator('input[type="text"]')).toBeVisible();
|
|
64
|
-
12 | await expect(page.locator('input[type="password"]')).toBeVisible();
|
|
65
|
-
13 | });
|
|
66
|
-
14 |
|
|
67
|
-
15 | test('V3 register + login flow', async ({ page }) => {
|
|
68
|
-
16 | await page.goto(`${BASE}/login`);
|
|
69
|
-
17 | // Switch to register
|
|
70
|
-
18 | await page.click('text=Register');
|
|
71
|
-
19 | await page.fill('input[type="text"]', `test_${Date.now()}`);
|
|
72
|
-
20 | await page.fill('input[type="password"]', 'test123456');
|
|
73
|
-
21 | await page.click('button:has-text("Create account")');
|
|
74
|
-
22 | // Should redirect to dashboard
|
|
75
|
-
23 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
76
|
-
24 | await expect(page.locator('text=Agent Network')).toBeVisible();
|
|
77
|
-
25 | });
|
|
78
|
-
26 |
|
|
79
|
-
27 | test('overview page shows stats', async ({ page }) => {
|
|
80
|
-
28 | // Login first
|
|
81
|
-
29 | await page.goto(`${BASE}/login`);
|
|
82
|
-
30 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
83
|
-
31 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
84
|
-
32 | await page.click('button:has-text("Sign in")');
|
|
85
|
-
33 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
86
|
-
34 |
|
|
87
|
-
35 | // Check stats bar
|
|
88
|
-
36 | await expect(page.locator('text=Online')).toBeVisible();
|
|
89
|
-
37 | await expect(page.locator('text=Working')).toBeVisible();
|
|
90
|
-
38 | await expect(page.locator('text=Total')).toBeVisible();
|
|
91
|
-
39 | });
|
|
92
|
-
40 |
|
|
93
|
-
41 | test('sidebar navigation works', async ({ page }) => {
|
|
94
|
-
42 | await page.goto(`${BASE}/login`);
|
|
95
|
-
43 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
96
|
-
44 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
97
|
-
45 | await page.click('button:has-text("Sign in")');
|
|
98
|
-
46 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
99
|
-
47 |
|
|
100
|
-
48 | // Navigate to Tasks
|
|
101
|
-
49 | await page.click('a:has-text("Tasks")');
|
|
102
|
-
50 | await page.waitForURL(`${BASE}/tasks`);
|
|
103
|
-
51 | await expect(page.locator('h1:has-text("Tasks")')).toBeVisible();
|
|
104
|
-
52 |
|
|
105
|
-
53 | // Navigate to Nodes
|
|
106
|
-
54 | await page.click('a:has-text("Nodes")');
|
|
107
|
-
55 | await page.waitForURL(`${BASE}/nodes`);
|
|
108
|
-
56 | await expect(page.locator('h1:has-text("Nodes")')).toBeVisible();
|
|
109
|
-
57 |
|
|
110
|
-
58 | // Navigate to Messages
|
|
111
|
-
59 | await page.click('a:has-text("Messages")');
|
|
112
|
-
60 | await page.waitForURL(`${BASE}/messages`);
|
|
113
|
-
61 | await expect(page.locator('h1:has-text("Messages")')).toBeVisible();
|
|
114
|
-
62 |
|
|
115
|
-
63 | // Navigate to Settings
|
|
116
|
-
64 | await page.click('a:has-text("Settings")');
|
|
117
|
-
65 | await page.waitForURL(`${BASE}/settings`);
|
|
118
|
-
66 | await expect(page.locator('h1:has-text("Settings")')).toBeVisible();
|
|
119
|
-
67 | });
|
|
120
|
-
68 |
|
|
121
|
-
69 | test('nodes page shows demo nodes', async ({ page }) => {
|
|
122
|
-
70 | await page.goto(`${BASE}/login`);
|
|
123
|
-
71 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
124
|
-
72 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
125
|
-
73 | await page.click('button:has-text("Sign in")');
|
|
126
|
-
74 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
127
|
-
75 |
|
|
128
|
-
76 | await page.goto(`${BASE}/nodes`);
|
|
129
|
-
77 | await page.waitForTimeout(3000);
|
|
130
|
-
78 | // Should see demo nodes
|
|
131
|
-
79 | const content = await page.textContent('body');
|
|
132
|
-
80 | expect(content).toContain('online');
|
|
133
|
-
81 | });
|
|
134
|
-
82 |
|
|
135
|
-
83 | test('settings page shows license + config', async ({ page }) => {
|
|
136
|
-
84 | await page.goto(`${BASE}/login`);
|
|
137
|
-
85 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
138
|
-
86 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
139
|
-
87 | await page.click('button:has-text("Sign in")');
|
|
140
|
-
> 88 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
141
|
-
| ^ TimeoutError: page.waitForURL: Timeout 10000ms exceeded.
|
|
142
|
-
89 |
|
|
143
|
-
90 | await page.goto(`${BASE}/settings`);
|
|
144
|
-
91 | await expect(page.locator('text=CommHub Connection')).toBeVisible();
|
|
145
|
-
92 | await expect(page.locator('text=License')).toBeVisible();
|
|
146
|
-
93 | });
|
|
147
|
-
94 | });
|
|
148
|
-
95 |
|
|
149
|
-
```
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# Instructions
|
|
2
|
-
|
|
3
|
-
- Following Playwright test failed.
|
|
4
|
-
- Explain why, be concise, respect Playwright best practices.
|
|
5
|
-
- Provide a snippet of code with the fix, if possible.
|
|
6
|
-
|
|
7
|
-
# Test info
|
|
8
|
-
|
|
9
|
-
- Name: e2e.spec.ts >> Dashboard E2E Tests >> sidebar navigation works
|
|
10
|
-
- Location: tests/e2e.spec.ts:41:7
|
|
11
|
-
|
|
12
|
-
# Error details
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
TimeoutError: page.waitForURL: Timeout 10000ms exceeded.
|
|
16
|
-
=========================== logs ===========================
|
|
17
|
-
waiting for navigation to "http://localhost:3000/" until "load"
|
|
18
|
-
============================================================
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
# Page snapshot
|
|
22
|
-
|
|
23
|
-
```yaml
|
|
24
|
-
- generic [ref=e1]:
|
|
25
|
-
- main [ref=e2]:
|
|
26
|
-
- generic [ref=e3]:
|
|
27
|
-
- generic [ref=e4]:
|
|
28
|
-
- img [ref=e6]
|
|
29
|
-
- heading "Agent Network" [level=1] [ref=e8]
|
|
30
|
-
- paragraph [ref=e9]: Dashboard
|
|
31
|
-
- generic [ref=e10]:
|
|
32
|
-
- button "Sign in" [active] [ref=e11]
|
|
33
|
-
- button "Register" [ref=e12]
|
|
34
|
-
- generic [ref=e13]:
|
|
35
|
-
- generic [ref=e14]: Username
|
|
36
|
-
- textbox "Username" [ref=e15]:
|
|
37
|
-
- /placeholder: Enter username
|
|
38
|
-
- text: admin
|
|
39
|
-
- generic [ref=e16]: Password
|
|
40
|
-
- textbox "Password" [ref=e17]:
|
|
41
|
-
- /placeholder: Enter password
|
|
42
|
-
- text: admin123
|
|
43
|
-
- button "Sign in" [ref=e18]
|
|
44
|
-
- paragraph [ref=e19]: Powered by CommHub V3
|
|
45
|
-
- button "Open Next.js Dev Tools" [ref=e25] [cursor=pointer]:
|
|
46
|
-
- img [ref=e26]
|
|
47
|
-
- alert [ref=e29]
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
# Test source
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
1 | import { test, expect } from '@playwright/test';
|
|
54
|
-
2 |
|
|
55
|
-
3 | const BASE = process.env.TEST_URL || 'http://localhost:3000';
|
|
56
|
-
4 | const ADMIN_USER = 'admin';
|
|
57
|
-
5 | const ADMIN_PASS = 'admin123';
|
|
58
|
-
6 |
|
|
59
|
-
7 | test.describe('Dashboard E2E Tests', () => {
|
|
60
|
-
8 | test('login page loads', async ({ page }) => {
|
|
61
|
-
9 | await page.goto(`${BASE}/login`);
|
|
62
|
-
10 | await expect(page.locator('text=Agent Network')).toBeVisible();
|
|
63
|
-
11 | await expect(page.locator('input[type="text"]')).toBeVisible();
|
|
64
|
-
12 | await expect(page.locator('input[type="password"]')).toBeVisible();
|
|
65
|
-
13 | });
|
|
66
|
-
14 |
|
|
67
|
-
15 | test('V3 register + login flow', async ({ page }) => {
|
|
68
|
-
16 | await page.goto(`${BASE}/login`);
|
|
69
|
-
17 | // Switch to register
|
|
70
|
-
18 | await page.click('text=Register');
|
|
71
|
-
19 | await page.fill('input[type="text"]', `test_${Date.now()}`);
|
|
72
|
-
20 | await page.fill('input[type="password"]', 'test123456');
|
|
73
|
-
21 | await page.click('button:has-text("Create account")');
|
|
74
|
-
22 | // Should redirect to dashboard
|
|
75
|
-
23 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
76
|
-
24 | await expect(page.locator('text=Agent Network')).toBeVisible();
|
|
77
|
-
25 | });
|
|
78
|
-
26 |
|
|
79
|
-
27 | test('overview page shows stats', async ({ page }) => {
|
|
80
|
-
28 | // Login first
|
|
81
|
-
29 | await page.goto(`${BASE}/login`);
|
|
82
|
-
30 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
83
|
-
31 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
84
|
-
32 | await page.click('button:has-text("Sign in")');
|
|
85
|
-
33 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
86
|
-
34 |
|
|
87
|
-
35 | // Check stats bar
|
|
88
|
-
36 | await expect(page.locator('text=Online')).toBeVisible();
|
|
89
|
-
37 | await expect(page.locator('text=Working')).toBeVisible();
|
|
90
|
-
38 | await expect(page.locator('text=Total')).toBeVisible();
|
|
91
|
-
39 | });
|
|
92
|
-
40 |
|
|
93
|
-
41 | test('sidebar navigation works', async ({ page }) => {
|
|
94
|
-
42 | await page.goto(`${BASE}/login`);
|
|
95
|
-
43 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
96
|
-
44 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
97
|
-
45 | await page.click('button:has-text("Sign in")');
|
|
98
|
-
> 46 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
99
|
-
| ^ TimeoutError: page.waitForURL: Timeout 10000ms exceeded.
|
|
100
|
-
47 |
|
|
101
|
-
48 | // Navigate to Tasks
|
|
102
|
-
49 | await page.click('a:has-text("Tasks")');
|
|
103
|
-
50 | await page.waitForURL(`${BASE}/tasks`);
|
|
104
|
-
51 | await expect(page.locator('h1:has-text("Tasks")')).toBeVisible();
|
|
105
|
-
52 |
|
|
106
|
-
53 | // Navigate to Nodes
|
|
107
|
-
54 | await page.click('a:has-text("Nodes")');
|
|
108
|
-
55 | await page.waitForURL(`${BASE}/nodes`);
|
|
109
|
-
56 | await expect(page.locator('h1:has-text("Nodes")')).toBeVisible();
|
|
110
|
-
57 |
|
|
111
|
-
58 | // Navigate to Messages
|
|
112
|
-
59 | await page.click('a:has-text("Messages")');
|
|
113
|
-
60 | await page.waitForURL(`${BASE}/messages`);
|
|
114
|
-
61 | await expect(page.locator('h1:has-text("Messages")')).toBeVisible();
|
|
115
|
-
62 |
|
|
116
|
-
63 | // Navigate to Settings
|
|
117
|
-
64 | await page.click('a:has-text("Settings")');
|
|
118
|
-
65 | await page.waitForURL(`${BASE}/settings`);
|
|
119
|
-
66 | await expect(page.locator('h1:has-text("Settings")')).toBeVisible();
|
|
120
|
-
67 | });
|
|
121
|
-
68 |
|
|
122
|
-
69 | test('nodes page shows demo nodes', async ({ page }) => {
|
|
123
|
-
70 | await page.goto(`${BASE}/login`);
|
|
124
|
-
71 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
125
|
-
72 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
126
|
-
73 | await page.click('button:has-text("Sign in")');
|
|
127
|
-
74 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
128
|
-
75 |
|
|
129
|
-
76 | await page.goto(`${BASE}/nodes`);
|
|
130
|
-
77 | await page.waitForTimeout(3000);
|
|
131
|
-
78 | // Should see demo nodes
|
|
132
|
-
79 | const content = await page.textContent('body');
|
|
133
|
-
80 | expect(content).toContain('online');
|
|
134
|
-
81 | });
|
|
135
|
-
82 |
|
|
136
|
-
83 | test('settings page shows license + config', async ({ page }) => {
|
|
137
|
-
84 | await page.goto(`${BASE}/login`);
|
|
138
|
-
85 | await page.fill('input[type="text"]', ADMIN_USER);
|
|
139
|
-
86 | await page.fill('input[type="password"]', ADMIN_PASS);
|
|
140
|
-
87 | await page.click('button:has-text("Sign in")');
|
|
141
|
-
88 | await page.waitForURL(`${BASE}/`, { timeout: 10000 });
|
|
142
|
-
89 |
|
|
143
|
-
90 | await page.goto(`${BASE}/settings`);
|
|
144
|
-
91 | await expect(page.locator('text=CommHub Connection')).toBeVisible();
|
|
145
|
-
92 | await expect(page.locator('text=License')).toBeVisible();
|
|
146
|
-
93 | });
|
|
147
|
-
94 | });
|
|
148
|
-
95 |
|
|
149
|
-
```
|