@sleep2agi/agent-network-dashboard 0.3.1 → 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/.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/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/{0yecbikzk4e1m.css → 0mz9c6--6di2j.css} +1 -1
- package/.next/static/chunks/{0afxijuigt-49.js → 0o5zj~5vjeks3.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/docs/page.tsx +1 -1
- package/app/globals.css +85 -0
- package/app/login/page.tsx +1 -1
- package/package.json +1 -1
- package/test-results/.last-run.json +2 -7
- 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/{w3FFQojHKbi2FsiXfCIUC → dR3GSMnwa4k46SIbP3PaK}/_buildManifest.js +0 -0
- /package/.next/static/{w3FFQojHKbi2FsiXfCIUC → dR3GSMnwa4k46SIbP3PaK}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{w3FFQojHKbi2FsiXfCIUC → dR3GSMnwa4k46SIbP3PaK}/_ssgManifest.js +0 -0
package/app/globals.css
CHANGED
|
@@ -146,15 +146,100 @@ body {
|
|
|
146
146
|
migrated.
|
|
147
147
|
──────────────────────────────────────────────────── */
|
|
148
148
|
|
|
149
|
+
/* page-level dark backgrounds → use --bg */
|
|
150
|
+
[data-theme="light"] .bg-\[\#050510\],
|
|
151
|
+
[data-theme="light"] .bg-\[\#080814\],
|
|
152
|
+
[data-theme="light"] .bg-\[\#0a0a14\],
|
|
153
|
+
[data-theme="light"] .bg-\[\#0a0a15\],
|
|
149
154
|
[data-theme="light"] .bg-\[\#0a0a1a\],
|
|
155
|
+
[data-theme="light"] .bg-\[\#0d0d1a\],
|
|
150
156
|
[data-theme="light"] .bg-\[\#11112a\],
|
|
157
|
+
[data-theme="light"] .bg-\[\#11111c\],
|
|
158
|
+
[data-theme="light"] .bg-\[\#161630\],
|
|
151
159
|
[data-theme="light"] .bg-\[\#161640\],
|
|
160
|
+
[data-theme="mint"] .bg-\[\#050510\],
|
|
161
|
+
[data-theme="mint"] .bg-\[\#080814\],
|
|
162
|
+
[data-theme="mint"] .bg-\[\#0a0a14\],
|
|
163
|
+
[data-theme="mint"] .bg-\[\#0a0a15\],
|
|
152
164
|
[data-theme="mint"] .bg-\[\#0a0a1a\],
|
|
165
|
+
[data-theme="mint"] .bg-\[\#0d0d1a\],
|
|
153
166
|
[data-theme="mint"] .bg-\[\#11112a\],
|
|
167
|
+
[data-theme="mint"] .bg-\[\#11111c\],
|
|
168
|
+
[data-theme="mint"] .bg-\[\#161630\],
|
|
154
169
|
[data-theme="mint"] .bg-\[\#161640\] {
|
|
155
170
|
background-color: var(--bg) !important;
|
|
156
171
|
}
|
|
157
172
|
|
|
173
|
+
/* card / elevated backgrounds (incl. opacity variants) */
|
|
174
|
+
[data-theme="light"] .bg-\[\#111128\],
|
|
175
|
+
[data-theme="light"] .bg-\[\#111128\]\/80,
|
|
176
|
+
[data-theme="light"] .bg-\[\#1a1a2a\],
|
|
177
|
+
[data-theme="light"] .bg-\[\#1a1a3a\],
|
|
178
|
+
[data-theme="mint"] .bg-\[\#111128\],
|
|
179
|
+
[data-theme="mint"] .bg-\[\#111128\]\/80,
|
|
180
|
+
[data-theme="mint"] .bg-\[\#1a1a2a\],
|
|
181
|
+
[data-theme="mint"] .bg-\[\#1a1a3a\] {
|
|
182
|
+
background-color: var(--bg-secondary) !important;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* hover / input field backgrounds */
|
|
186
|
+
[data-theme="light"] .bg-\[\#2a2a4a\],
|
|
187
|
+
[data-theme="mint"] .bg-\[\#2a2a4a\] {
|
|
188
|
+
background-color: var(--bg-elevated) !important;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* hardcoded borders */
|
|
192
|
+
[data-theme="light"] .border-\[\#111128\],
|
|
193
|
+
[data-theme="light"] .border-\[\#1a1a2a\],
|
|
194
|
+
[data-theme="light"] .border-\[\#2a2a4a\],
|
|
195
|
+
[data-theme="light"] .border-\[\#3a3a5a\],
|
|
196
|
+
[data-theme="mint"] .border-\[\#111128\],
|
|
197
|
+
[data-theme="mint"] .border-\[\#1a1a2a\],
|
|
198
|
+
[data-theme="mint"] .border-\[\#2a2a4a\],
|
|
199
|
+
[data-theme="mint"] .border-\[\#3a3a5a\] {
|
|
200
|
+
border-color: var(--border) !important;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/* dark-tuned gradient buttons → flat brand color in light themes */
|
|
204
|
+
[data-theme="light"] [class*="from-cyan-"][class*="to-blue-"],
|
|
205
|
+
[data-theme="light"] [class*="from-cyan-"][class*="to-emerald-"],
|
|
206
|
+
[data-theme="light"] [class*="from-emerald-"][class*="to-cyan-"],
|
|
207
|
+
[data-theme="light"] [class*="from-blue-"][class*="to-cyan-"] {
|
|
208
|
+
background: var(--accent) !important;
|
|
209
|
+
color: var(--accent-fg) !important;
|
|
210
|
+
}
|
|
211
|
+
[data-theme="light"] [class*="from-cyan-"][class*="to-blue-"]:hover,
|
|
212
|
+
[data-theme="light"] [class*="from-cyan-"][class*="to-emerald-"]:hover,
|
|
213
|
+
[data-theme="light"] [class*="from-emerald-"][class*="to-cyan-"]:hover,
|
|
214
|
+
[data-theme="light"] [class*="from-blue-"][class*="to-cyan-"]:hover {
|
|
215
|
+
background: #00b894 !important;
|
|
216
|
+
filter: brightness(1.05);
|
|
217
|
+
}
|
|
218
|
+
[data-theme="light"] .text-gray-100,
|
|
219
|
+
[data-theme="light"] .text-gray-200,
|
|
220
|
+
[data-theme="light"] .text-gray-300,
|
|
221
|
+
[data-theme="light"] .text-gray-100\/90,
|
|
222
|
+
[data-theme="mint"] .text-gray-100,
|
|
223
|
+
[data-theme="mint"] .text-gray-200,
|
|
224
|
+
[data-theme="mint"] .text-gray-300,
|
|
225
|
+
[data-theme="mint"] .text-gray-100\/90 {
|
|
226
|
+
color: var(--fg) !important;
|
|
227
|
+
}
|
|
228
|
+
[data-theme="light"] .text-gray-400,
|
|
229
|
+
[data-theme="light"] .text-gray-500,
|
|
230
|
+
[data-theme="light"] .text-gray-600,
|
|
231
|
+
[data-theme="light"] .placeholder-gray-600::placeholder,
|
|
232
|
+
[data-theme="mint"] .text-gray-400,
|
|
233
|
+
[data-theme="mint"] .text-gray-500,
|
|
234
|
+
[data-theme="mint"] .text-gray-600,
|
|
235
|
+
[data-theme="mint"] .placeholder-gray-600::placeholder {
|
|
236
|
+
color: var(--fg-muted) !important;
|
|
237
|
+
}
|
|
238
|
+
[data-theme="light"] .text-white,
|
|
239
|
+
[data-theme="mint"] .text-white {
|
|
240
|
+
color: var(--fg) !important;
|
|
241
|
+
}
|
|
242
|
+
|
|
158
243
|
[data-theme="light"] .text-zinc-100,
|
|
159
244
|
[data-theme="light"] .text-zinc-200,
|
|
160
245
|
[data-theme="light"] .text-white,
|
package/app/login/page.tsx
CHANGED
|
@@ -96,7 +96,7 @@ export default function LoginPage() {
|
|
|
96
96
|
</button>
|
|
97
97
|
</form>
|
|
98
98
|
|
|
99
|
-
<p className="text-center text-xs text-gray-700 mt-6">Powered by
|
|
99
|
+
<p className="text-center text-xs text-gray-700 mt-6">Powered by Sleep2AGI</p>
|
|
100
100
|
</div>
|
|
101
101
|
</main>
|
|
102
102
|
);
|
package/package.json
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"status": "
|
|
3
|
-
"failedTests": [
|
|
4
|
-
"b1c7859d981cc20c96be-e493bf85af29f662ad60",
|
|
5
|
-
"b1c7859d981cc20c96be-88663d8dba6d4fa27ce4",
|
|
6
|
-
"b1c7859d981cc20c96be-394fec2622f87f6c4d7b",
|
|
7
|
-
"b1c7859d981cc20c96be-62233707f9e2da538134"
|
|
8
|
-
]
|
|
2
|
+
"status": "passed",
|
|
3
|
+
"failedTests": []
|
|
9
4
|
}
|
|
@@ -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 >> nodes page shows demo nodes
|
|
10
|
-
- Location: tests/e2e.spec.ts:69: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
|
-
| ^ TimeoutError: page.waitForURL: Timeout 10000ms exceeded.
|
|
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
|
-
```
|
|
@@ -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
|
-
```
|