@urateam/dashboard 0.1.0

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.
Files changed (69) hide show
  1. package/dist/__tests__/layout.test.d.ts +2 -0
  2. package/dist/__tests__/layout.test.d.ts.map +1 -0
  3. package/dist/__tests__/layout.test.js +138 -0
  4. package/dist/__tests__/layout.test.js.map +1 -0
  5. package/dist/__tests__/security.repro.test.d.ts +16 -0
  6. package/dist/__tests__/security.repro.test.d.ts.map +1 -0
  7. package/dist/__tests__/security.repro.test.js +249 -0
  8. package/dist/__tests__/security.repro.test.js.map +1 -0
  9. package/dist/__tests__/server.test.d.ts +2 -0
  10. package/dist/__tests__/server.test.d.ts.map +1 -0
  11. package/dist/__tests__/server.test.js +268 -0
  12. package/dist/__tests__/server.test.js.map +1 -0
  13. package/dist/__tests__/ui-refresh.test.d.ts +2 -0
  14. package/dist/__tests__/ui-refresh.test.d.ts.map +1 -0
  15. package/dist/__tests__/ui-refresh.test.js +860 -0
  16. package/dist/__tests__/ui-refresh.test.js.map +1 -0
  17. package/dist/routes/config.d.ts +4 -0
  18. package/dist/routes/config.d.ts.map +1 -0
  19. package/dist/routes/config.js +12 -0
  20. package/dist/routes/config.js.map +1 -0
  21. package/dist/routes/coordination.d.ts +4 -0
  22. package/dist/routes/coordination.d.ts.map +1 -0
  23. package/dist/routes/coordination.js +22 -0
  24. package/dist/routes/coordination.js.map +1 -0
  25. package/dist/routes/errors.d.ts +4 -0
  26. package/dist/routes/errors.d.ts.map +1 -0
  27. package/dist/routes/errors.js +36 -0
  28. package/dist/routes/errors.js.map +1 -0
  29. package/dist/routes/runs.d.ts +4 -0
  30. package/dist/routes/runs.d.ts.map +1 -0
  31. package/dist/routes/runs.js +72 -0
  32. package/dist/routes/runs.js.map +1 -0
  33. package/dist/routes/tokens.d.ts +4 -0
  34. package/dist/routes/tokens.d.ts.map +1 -0
  35. package/dist/routes/tokens.js +47 -0
  36. package/dist/routes/tokens.js.map +1 -0
  37. package/dist/server.d.ts +19 -0
  38. package/dist/server.d.ts.map +1 -0
  39. package/dist/server.js +107 -0
  40. package/dist/server.js.map +1 -0
  41. package/dist/views/config.d.ts +3 -0
  42. package/dist/views/config.d.ts.map +1 -0
  43. package/dist/views/config.js +47 -0
  44. package/dist/views/config.js.map +1 -0
  45. package/dist/views/coordination.d.ts +3 -0
  46. package/dist/views/coordination.d.ts.map +1 -0
  47. package/dist/views/coordination.js +63 -0
  48. package/dist/views/coordination.js.map +1 -0
  49. package/dist/views/errors.d.ts +14 -0
  50. package/dist/views/errors.d.ts.map +1 -0
  51. package/dist/views/errors.js +52 -0
  52. package/dist/views/errors.js.map +1 -0
  53. package/dist/views/layout.d.ts +21 -0
  54. package/dist/views/layout.d.ts.map +1 -0
  55. package/dist/views/layout.js +82 -0
  56. package/dist/views/layout.js.map +1 -0
  57. package/dist/views/run-detail.d.ts +35 -0
  58. package/dist/views/run-detail.d.ts.map +1 -0
  59. package/dist/views/run-detail.js +129 -0
  60. package/dist/views/run-detail.js.map +1 -0
  61. package/dist/views/run-feed.d.ts +14 -0
  62. package/dist/views/run-feed.d.ts.map +1 -0
  63. package/dist/views/run-feed.js +80 -0
  64. package/dist/views/run-feed.js.map +1 -0
  65. package/dist/views/tokens.d.ts +13 -0
  66. package/dist/views/tokens.d.ts.map +1 -0
  67. package/dist/views/tokens.js +66 -0
  68. package/dist/views/tokens.js.map +1 -0
  69. package/package.json +28 -0
@@ -0,0 +1,268 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { createDashboard } from "../server.js";
3
+ /**
4
+ * Build a mock Db whose chainable query-builder methods (.select(), .from(),
5
+ * .where(), .orderBy(), .groupBy(), .innerJoin(), .limit(), .offset(), etc.)
6
+ * all resolve to an empty array. This is enough for every dashboard route to
7
+ * return a valid HTML page with no data rows.
8
+ */
9
+ function createMockDb() {
10
+ // A recursive proxy: every property access / function call returns the same
11
+ // proxy, except `.then` which makes it resolve like `Promise.resolve([])`.
12
+ const handler = {
13
+ get(_target, prop) {
14
+ if (prop === "then") {
15
+ // Make the proxy thenable — resolves to []
16
+ return (resolve) => resolve([]);
17
+ }
18
+ // Return a function that returns the proxy (for chaining)
19
+ return (..._args) => new Proxy(() => { }, handler);
20
+ },
21
+ apply() {
22
+ return new Proxy(() => { }, handler);
23
+ },
24
+ };
25
+ return new Proxy(() => { }, handler);
26
+ }
27
+ /** Base64-encode Basic auth credentials for request headers. */
28
+ function basicAuthHeader(username, password) {
29
+ return "Basic " + Buffer.from(`${username}:${password}`).toString("base64");
30
+ }
31
+ describe("createDashboard — credentials not configured", () => {
32
+ it("blocks all requests with 503 when no credentials are configured", async () => {
33
+ const app = createDashboard({
34
+ db: createMockDb(),
35
+ pipelineConfigs: {},
36
+ repoConfigs: {},
37
+ // auth intentionally omitted
38
+ });
39
+ const res = await app.request("/");
40
+ expect(res.status).toBe(503);
41
+ const body = await res.text();
42
+ expect(body).toContain("DASHBOARD_USER");
43
+ });
44
+ });
45
+ describe("createDashboard — with credentials configured", () => {
46
+ let app;
47
+ let mockDb;
48
+ beforeEach(() => {
49
+ mockDb = createMockDb();
50
+ app = createDashboard({
51
+ db: mockDb,
52
+ pipelineConfigs: {},
53
+ repoConfigs: {},
54
+ auth: { username: "admin", password: "secret" },
55
+ });
56
+ });
57
+ it("returns 401 for unauthenticated requests", async () => {
58
+ const res = await app.request("/");
59
+ expect(res.status).toBe(401);
60
+ });
61
+ it("serves the runs page at / with valid credentials", async () => {
62
+ const res = await app.request("/", {
63
+ headers: { Authorization: basicAuthHeader("admin", "secret") },
64
+ });
65
+ expect(res.status).toBe(200);
66
+ const html = await res.text();
67
+ expect(html).toContain("urateam");
68
+ });
69
+ it("serves the tokens page with valid credentials", async () => {
70
+ const res = await app.request("/tokens", {
71
+ headers: { Authorization: basicAuthHeader("admin", "secret") },
72
+ });
73
+ expect(res.status).toBe(200);
74
+ const html = await res.text();
75
+ expect(html).toContain("urateam");
76
+ });
77
+ it("serves the errors page with valid credentials", async () => {
78
+ const res = await app.request("/errors", {
79
+ headers: { Authorization: basicAuthHeader("admin", "secret") },
80
+ });
81
+ expect(res.status).toBe(200);
82
+ const html = await res.text();
83
+ expect(html).toContain("urateam");
84
+ });
85
+ it("serves the config page with valid credentials", async () => {
86
+ const res = await app.request("/config", {
87
+ headers: { Authorization: basicAuthHeader("admin", "secret") },
88
+ });
89
+ expect(res.status).toBe(200);
90
+ const html = await res.text();
91
+ expect(html).toContain("urateam");
92
+ });
93
+ it("serves the coordination page with valid credentials", async () => {
94
+ const res = await app.request("/coordination", {
95
+ headers: { Authorization: basicAuthHeader("admin", "secret") },
96
+ });
97
+ expect(res.status).toBe(200);
98
+ const html = await res.text();
99
+ expect(html).toContain("urateam");
100
+ });
101
+ it("returns 404 for unknown routes (with valid credentials)", async () => {
102
+ const res = await app.request("/nonexistent", {
103
+ headers: { Authorization: basicAuthHeader("admin", "secret") },
104
+ });
105
+ expect(res.status).toBe(404);
106
+ });
107
+ it("returns 401 for wrong credentials", async () => {
108
+ const res = await app.request("/", {
109
+ headers: { Authorization: basicAuthHeader("admin", "wrongpassword") },
110
+ });
111
+ expect(res.status).toBe(401);
112
+ });
113
+ });
114
+ describe("createDashboard — basePath navigation links", () => {
115
+ let mockDb;
116
+ const AUTH = { username: "admin", password: "secret" };
117
+ const authHeader = { Authorization: basicAuthHeader("admin", "secret") };
118
+ beforeEach(() => {
119
+ mockDb = createMockDb();
120
+ });
121
+ it("nav links contain /ateam prefix when basePath is '/ateam'", async () => {
122
+ const app = createDashboard({
123
+ db: mockDb,
124
+ pipelineConfigs: {},
125
+ repoConfigs: {},
126
+ auth: AUTH,
127
+ basePath: "/ateam",
128
+ });
129
+ const res = await app.request("/", { headers: authHeader });
130
+ expect(res.status).toBe(200);
131
+ const html = await res.text();
132
+ expect(html).toContain('href="/ateam/tokens"');
133
+ expect(html).toContain('href="/ateam/errors"');
134
+ expect(html).toContain('href="/ateam/config"');
135
+ expect(html).toContain('href="/ateam/coordination"');
136
+ });
137
+ it("tokens page nav links contain /ateam prefix when basePath is '/ateam'", async () => {
138
+ const app = createDashboard({
139
+ db: mockDb,
140
+ pipelineConfigs: {},
141
+ repoConfigs: {},
142
+ auth: AUTH,
143
+ basePath: "/ateam",
144
+ });
145
+ const res = await app.request("/tokens", { headers: authHeader });
146
+ expect(res.status).toBe(200);
147
+ const html = await res.text();
148
+ expect(html).toContain('href="/ateam/tokens"');
149
+ expect(html).toContain('href="/ateam/errors"');
150
+ });
151
+ it("errors page nav links contain /ateam prefix when basePath is '/ateam'", async () => {
152
+ const app = createDashboard({
153
+ db: mockDb,
154
+ pipelineConfigs: {},
155
+ repoConfigs: {},
156
+ auth: AUTH,
157
+ basePath: "/ateam",
158
+ });
159
+ const res = await app.request("/errors", { headers: authHeader });
160
+ expect(res.status).toBe(200);
161
+ const html = await res.text();
162
+ expect(html).toContain('href="/ateam/tokens"');
163
+ expect(html).toContain('href="/ateam/errors"');
164
+ });
165
+ it("nav links have no double slashes when basePath is '/'", async () => {
166
+ const app = createDashboard({
167
+ db: mockDb,
168
+ pipelineConfigs: {},
169
+ repoConfigs: {},
170
+ auth: AUTH,
171
+ basePath: "/",
172
+ });
173
+ const res = await app.request("/", { headers: authHeader });
174
+ expect(res.status).toBe(200);
175
+ const html = await res.text();
176
+ // Trailing slash stripped so links are /tokens not //tokens
177
+ expect(html).toContain('href="/tokens"');
178
+ expect(html).not.toContain('href="//tokens"');
179
+ expect(html).toContain('href="/errors"');
180
+ expect(html).not.toContain('href="//errors"');
181
+ });
182
+ it("nav links have no prefix when basePath is '' (root)", async () => {
183
+ const app = createDashboard({
184
+ db: mockDb,
185
+ pipelineConfigs: {},
186
+ repoConfigs: {},
187
+ auth: AUTH,
188
+ basePath: "",
189
+ });
190
+ const res = await app.request("/", { headers: authHeader });
191
+ expect(res.status).toBe(200);
192
+ const html = await res.text();
193
+ expect(html).toContain('href="/tokens"');
194
+ expect(html).toContain('href="/errors"');
195
+ });
196
+ it("trailing slash in basePath is stripped from rendered output", async () => {
197
+ const app = createDashboard({
198
+ db: mockDb,
199
+ pipelineConfigs: {},
200
+ repoConfigs: {},
201
+ auth: AUTH,
202
+ basePath: "/ateam/",
203
+ });
204
+ const res = await app.request("/", { headers: authHeader });
205
+ expect(res.status).toBe(200);
206
+ const html = await res.text();
207
+ // Should be /ateam/tokens, not /ateam//tokens
208
+ expect(html).toContain('href="/ateam/tokens"');
209
+ expect(html).not.toContain('href="/ateam//tokens"');
210
+ });
211
+ describe("DASHBOARD_BASE_PATH env var handling", () => {
212
+ let originalEnv;
213
+ beforeEach(() => {
214
+ originalEnv = process.env.DASHBOARD_BASE_PATH;
215
+ });
216
+ afterEach(() => {
217
+ if (originalEnv === undefined) {
218
+ delete process.env.DASHBOARD_BASE_PATH;
219
+ }
220
+ else {
221
+ process.env.DASHBOARD_BASE_PATH = originalEnv;
222
+ }
223
+ });
224
+ it("falls back to DASHBOARD_BASE_PATH env var when config.basePath is not set", async () => {
225
+ process.env.DASHBOARD_BASE_PATH = "/ateam";
226
+ const app = createDashboard({
227
+ db: mockDb,
228
+ pipelineConfigs: {},
229
+ repoConfigs: {},
230
+ auth: AUTH,
231
+ // no basePath in config — should fall back to env var
232
+ });
233
+ const res = await app.request("/", { headers: authHeader });
234
+ expect(res.status).toBe(200);
235
+ const html = await res.text();
236
+ expect(html).toContain('href="/ateam/tokens"');
237
+ expect(html).toContain('href="/ateam/errors"');
238
+ });
239
+ it("config.basePath overrides DASHBOARD_BASE_PATH env var", async () => {
240
+ process.env.DASHBOARD_BASE_PATH = "/other";
241
+ const app = createDashboard({
242
+ db: mockDb,
243
+ pipelineConfigs: {},
244
+ repoConfigs: {},
245
+ auth: AUTH,
246
+ basePath: "/ateam",
247
+ });
248
+ const res = await app.request("/", { headers: authHeader });
249
+ expect(res.status).toBe(200);
250
+ const html = await res.text();
251
+ expect(html).toContain('href="/ateam/tokens"');
252
+ expect(html).not.toContain('href="/other/tokens"');
253
+ });
254
+ it("does not crash when DASHBOARD_BASE_PATH is not set", () => {
255
+ delete process.env.DASHBOARD_BASE_PATH;
256
+ expect(() => createDashboard({ db: mockDb, pipelineConfigs: {}, repoConfigs: {} })).not.toThrow();
257
+ });
258
+ it("does not crash when DASHBOARD_BASE_PATH is empty string", () => {
259
+ process.env.DASHBOARD_BASE_PATH = "";
260
+ expect(() => createDashboard({ db: mockDb, pipelineConfigs: {}, repoConfigs: {} })).not.toThrow();
261
+ });
262
+ it("does not crash when DASHBOARD_BASE_PATH is set to /ateam", () => {
263
+ process.env.DASHBOARD_BASE_PATH = "/ateam";
264
+ expect(() => createDashboard({ db: mockDb, pipelineConfigs: {}, repoConfigs: {} })).not.toThrow();
265
+ });
266
+ });
267
+ });
268
+ //# sourceMappingURL=server.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../../src/__tests__/server.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ui-refresh.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-refresh.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ui-refresh.test.ts"],"names":[],"mappings":""}