projax 3.3.19 → 3.3.21

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 (66) hide show
  1. package/coverage/base.css +224 -0
  2. package/coverage/block-navigation.js +87 -0
  3. package/coverage/core-bridge.ts.html +268 -0
  4. package/coverage/favicon.png +0 -0
  5. package/coverage/index.html +176 -0
  6. package/coverage/lcov-report/base.css +224 -0
  7. package/coverage/lcov-report/block-navigation.js +87 -0
  8. package/coverage/lcov-report/core-bridge.ts.html +268 -0
  9. package/coverage/lcov-report/favicon.png +0 -0
  10. package/coverage/lcov-report/index.html +176 -0
  11. package/coverage/lcov-report/port-extractor.ts.html +1174 -0
  12. package/coverage/lcov-report/port-scanner.ts.html +301 -0
  13. package/coverage/lcov-report/port-utils.ts.html +670 -0
  14. package/coverage/lcov-report/prettify.css +1 -0
  15. package/coverage/lcov-report/prettify.js +2 -0
  16. package/coverage/lcov-report/script-runner.ts.html +3055 -0
  17. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  18. package/coverage/lcov-report/sorter.js +210 -0
  19. package/coverage/lcov.info +1117 -0
  20. package/coverage/port-extractor.ts.html +1174 -0
  21. package/coverage/port-scanner.ts.html +301 -0
  22. package/coverage/port-utils.ts.html +670 -0
  23. package/coverage/prettify.css +1 -0
  24. package/coverage/prettify.js +2 -0
  25. package/coverage/script-runner.ts.html +3055 -0
  26. package/coverage/sort-arrow-sprite.png +0 -0
  27. package/coverage/sorter.js +210 -0
  28. package/dist/__tests__/port-scanner.test.d.ts +1 -0
  29. package/dist/__tests__/port-scanner.test.js +170 -0
  30. package/dist/__tests__/port-utils.test.d.ts +1 -0
  31. package/dist/__tests__/port-utils.test.js +127 -0
  32. package/dist/__tests__/script-runner.test.d.ts +1 -0
  33. package/dist/__tests__/script-runner.test.js +491 -0
  34. package/dist/api/__tests__/database.test.d.ts +2 -0
  35. package/dist/api/__tests__/database.test.d.ts.map +1 -0
  36. package/dist/api/__tests__/database.test.js +485 -0
  37. package/dist/api/__tests__/database.test.js.map +1 -0
  38. package/dist/api/__tests__/routes.test.d.ts +2 -0
  39. package/dist/api/__tests__/routes.test.d.ts.map +1 -0
  40. package/dist/api/__tests__/routes.test.js +473 -0
  41. package/dist/api/__tests__/routes.test.js.map +1 -0
  42. package/dist/api/__tests__/scanner.test.d.ts +2 -0
  43. package/dist/api/__tests__/scanner.test.d.ts.map +1 -0
  44. package/dist/api/__tests__/scanner.test.js +402 -0
  45. package/dist/api/__tests__/scanner.test.js.map +1 -0
  46. package/dist/api/database.d.ts +1 -0
  47. package/dist/api/database.d.ts.map +1 -1
  48. package/dist/api/database.js +4 -0
  49. package/dist/api/database.js.map +1 -1
  50. package/dist/api/package.json +9 -1
  51. package/dist/api/routes/projects.d.ts.map +1 -1
  52. package/dist/api/routes/projects.js +8 -1
  53. package/dist/api/routes/projects.js.map +1 -1
  54. package/dist/api/routes/settings.d.ts.map +1 -1
  55. package/dist/api/routes/settings.js +2 -1
  56. package/dist/api/routes/settings.js.map +1 -1
  57. package/dist/api/services/scanner.d.ts.map +1 -1
  58. package/dist/api/services/scanner.js +7 -12
  59. package/dist/api/services/scanner.js.map +1 -1
  60. package/dist/electron/port-scanner.js +2 -2
  61. package/dist/electron/renderer/assets/index-C1SRt6Jx.js +62 -0
  62. package/dist/electron/renderer/assets/index-D1jmaGv5.css +1 -0
  63. package/dist/electron/renderer/index.html +2 -2
  64. package/dist/port-scanner.js +2 -2
  65. package/jest.config.js +18 -0
  66. package/package.json +7 -1
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const supertest_1 = __importDefault(require("supertest"));
40
+ const express_1 = __importDefault(require("express"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ // Use an object to hold testDataDir so it can be accessed before initialization
45
+ const testConfig = { dataDir: '' };
46
+ // Mock os module
47
+ jest.mock('os', () => ({
48
+ ...jest.requireActual('os'),
49
+ homedir: jest.fn(() => testConfig.dataDir || os.tmpdir()),
50
+ }));
51
+ // Import after mocking
52
+ const routes_1 = __importDefault(require("../routes"));
53
+ const database_1 = require("../database");
54
+ describe('API Routes', () => {
55
+ let app;
56
+ let testProjectDir;
57
+ beforeEach(() => {
58
+ // Create test directories with truly unique names
59
+ const uniqueId = `${Date.now()}-${process.hrtime.bigint()}-${Math.random().toString(36).substring(7)}`;
60
+ testConfig.dataDir = path.join(os.tmpdir(), `projax-api-test-${uniqueId}`);
61
+ testProjectDir = path.join(testConfig.dataDir, 'test-project');
62
+ // Ensure clean slate
63
+ if (fs.existsSync(testConfig.dataDir)) {
64
+ fs.rmSync(testConfig.dataDir, { recursive: true, force: true });
65
+ }
66
+ fs.mkdirSync(testProjectDir, { recursive: true });
67
+ // Create Express app with routes
68
+ app = (0, express_1.default)();
69
+ app.use(express_1.default.json());
70
+ app.use('/api', routes_1.default);
71
+ // Initialize database
72
+ new database_1.JSONDatabase();
73
+ });
74
+ afterEach(() => {
75
+ // Reset singleton before cleanup
76
+ (0, database_1.resetDatabase)();
77
+ // Clean up
78
+ if (fs.existsSync(testConfig.dataDir)) {
79
+ fs.rmSync(testConfig.dataDir, { recursive: true, force: true });
80
+ }
81
+ });
82
+ describe('GET /api/projects', () => {
83
+ it('should return empty array when no projects exist', async () => {
84
+ const response = await (0, supertest_1.default)(app).get('/api/projects');
85
+ expect(response.status).toBe(200);
86
+ expect(response.body).toEqual([]);
87
+ });
88
+ it('should return all projects', async () => {
89
+ // Add projects directly via database
90
+ const db = new database_1.JSONDatabase();
91
+ db.addProject('Project 1', testProjectDir);
92
+ const dir2 = path.join(testConfig.dataDir, 'project2');
93
+ fs.mkdirSync(dir2, { recursive: true });
94
+ db.addProject('Project 2', dir2);
95
+ const response = await (0, supertest_1.default)(app).get('/api/projects');
96
+ expect(response.status).toBe(200);
97
+ expect(response.body).toHaveLength(2);
98
+ expect(response.body[0].name).toBe('Project 1');
99
+ expect(response.body[1].name).toBe('Project 2');
100
+ });
101
+ });
102
+ describe('POST /api/projects', () => {
103
+ it('should create a new project', async () => {
104
+ const response = await (0, supertest_1.default)(app)
105
+ .post('/api/projects')
106
+ .send({
107
+ name: 'My Project',
108
+ path: testProjectDir,
109
+ });
110
+ expect(response.status).toBe(201);
111
+ expect(response.body).toMatchObject({
112
+ id: 1,
113
+ name: 'My Project',
114
+ path: testProjectDir,
115
+ });
116
+ });
117
+ it('should return 400 if name is missing', async () => {
118
+ const response = await (0, supertest_1.default)(app)
119
+ .post('/api/projects')
120
+ .send({
121
+ path: testProjectDir,
122
+ });
123
+ expect(response.status).toBe(400);
124
+ expect(response.body.error).toBe('Name and path are required');
125
+ });
126
+ it('should return 400 if path is missing', async () => {
127
+ const response = await (0, supertest_1.default)(app)
128
+ .post('/api/projects')
129
+ .send({
130
+ name: 'My Project',
131
+ });
132
+ expect(response.status).toBe(400);
133
+ expect(response.body.error).toBe('Name and path are required');
134
+ });
135
+ it('should return 400 if path does not exist', async () => {
136
+ const response = await (0, supertest_1.default)(app)
137
+ .post('/api/projects')
138
+ .send({
139
+ name: 'My Project',
140
+ path: '/non/existent/path',
141
+ });
142
+ expect(response.status).toBe(400);
143
+ expect(response.body.error).toBe('Path does not exist');
144
+ });
145
+ it('should return 400 if path is not a directory', async () => {
146
+ const filePath = path.join(testConfig.dataDir, 'file.txt');
147
+ fs.writeFileSync(filePath, 'test');
148
+ const response = await (0, supertest_1.default)(app)
149
+ .post('/api/projects')
150
+ .send({
151
+ name: 'My Project',
152
+ path: filePath,
153
+ });
154
+ expect(response.status).toBe(400);
155
+ expect(response.body.error).toBe('Path must be a directory');
156
+ });
157
+ it('should return 409 if project with path already exists', async () => {
158
+ // Create first project
159
+ await (0, supertest_1.default)(app)
160
+ .post('/api/projects')
161
+ .send({
162
+ name: 'Project 1',
163
+ path: testProjectDir,
164
+ });
165
+ // Try to create duplicate
166
+ const response = await (0, supertest_1.default)(app)
167
+ .post('/api/projects')
168
+ .send({
169
+ name: 'Project 2',
170
+ path: testProjectDir,
171
+ });
172
+ expect(response.status).toBe(409);
173
+ expect(response.body.error).toBe('Project with this path already exists');
174
+ });
175
+ });
176
+ describe('GET /api/projects/:id', () => {
177
+ it('should return a project by ID', async () => {
178
+ const db = new database_1.JSONDatabase();
179
+ const project = db.addProject('Test Project', testProjectDir);
180
+ const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}`);
181
+ expect(response.status).toBe(200);
182
+ expect(response.body).toMatchObject({
183
+ id: project.id,
184
+ name: 'Test Project',
185
+ });
186
+ });
187
+ it('should return 404 for non-existent project', async () => {
188
+ const response = await (0, supertest_1.default)(app).get('/api/projects/999');
189
+ expect(response.status).toBe(404);
190
+ expect(response.body.error).toBe('Project not found');
191
+ });
192
+ it('should return 404 for invalid ID format', async () => {
193
+ const response = await (0, supertest_1.default)(app).get('/api/projects/invalid');
194
+ // The route regex only matches numeric IDs, so non-numeric IDs return 404
195
+ expect(response.status).toBe(404);
196
+ });
197
+ });
198
+ describe('PUT /api/projects/:id', () => {
199
+ it('should update project name', async () => {
200
+ const db = new database_1.JSONDatabase();
201
+ const project = db.addProject('Old Name', testProjectDir);
202
+ const response = await (0, supertest_1.default)(app)
203
+ .put(`/api/projects/${project.id}`)
204
+ .send({ name: 'New Name' });
205
+ expect(response.status).toBe(200);
206
+ expect(response.body.name).toBe('New Name');
207
+ });
208
+ it('should update project description', async () => {
209
+ const db = new database_1.JSONDatabase();
210
+ const project = db.addProject('Test', testProjectDir);
211
+ const response = await (0, supertest_1.default)(app)
212
+ .put(`/api/projects/${project.id}`)
213
+ .send({ description: 'A test project' });
214
+ expect(response.status).toBe(200);
215
+ expect(response.body.description).toBe('A test project');
216
+ });
217
+ it('should update project framework', async () => {
218
+ const db = new database_1.JSONDatabase();
219
+ const project = db.addProject('Test', testProjectDir);
220
+ const response = await (0, supertest_1.default)(app)
221
+ .put(`/api/projects/${project.id}`)
222
+ .send({ framework: 'Node.js' });
223
+ expect(response.status).toBe(200);
224
+ expect(response.body.framework).toBe('Node.js');
225
+ });
226
+ it('should update project tags', async () => {
227
+ const db = new database_1.JSONDatabase();
228
+ const project = db.addProject('Test', testProjectDir);
229
+ const response = await (0, supertest_1.default)(app)
230
+ .put(`/api/projects/${project.id}`)
231
+ .send({ tags: ['web', 'api'] });
232
+ expect(response.status).toBe(200);
233
+ expect(response.body.tags).toEqual(['web', 'api']);
234
+ });
235
+ it('should update multiple fields at once', async () => {
236
+ const db = new database_1.JSONDatabase();
237
+ const project = db.addProject('Test', testProjectDir);
238
+ const response = await (0, supertest_1.default)(app)
239
+ .put(`/api/projects/${project.id}`)
240
+ .send({
241
+ name: 'Updated Name',
242
+ description: 'Updated description',
243
+ framework: 'React',
244
+ tags: ['frontend'],
245
+ });
246
+ expect(response.status).toBe(200);
247
+ expect(response.body).toMatchObject({
248
+ name: 'Updated Name',
249
+ description: 'Updated description',
250
+ framework: 'React',
251
+ tags: ['frontend'],
252
+ });
253
+ });
254
+ it('should return 400 when no fields to update', async () => {
255
+ const db = new database_1.JSONDatabase();
256
+ const project = db.addProject('Test', testProjectDir);
257
+ const response = await (0, supertest_1.default)(app)
258
+ .put(`/api/projects/${project.id}`)
259
+ .send({});
260
+ expect(response.status).toBe(400);
261
+ expect(response.body.error).toBe('No valid fields to update');
262
+ });
263
+ it('should return 404 for invalid ID format', async () => {
264
+ const response = await (0, supertest_1.default)(app)
265
+ .put('/api/projects/invalid')
266
+ .send({ name: 'New Name' });
267
+ // The route regex only matches numeric IDs, so non-numeric IDs return 404
268
+ expect(response.status).toBe(404);
269
+ });
270
+ });
271
+ describe('DELETE /api/projects/:id', () => {
272
+ it('should delete a project', async () => {
273
+ const db = new database_1.JSONDatabase();
274
+ const project = db.addProject('Test', testProjectDir);
275
+ const response = await (0, supertest_1.default)(app).delete(`/api/projects/${project.id}`);
276
+ expect(response.status).toBe(204);
277
+ // Use getDatabase() to verify deletion from the singleton
278
+ const { getDatabase } = require('../database');
279
+ expect(getDatabase().getProject(project.id)).toBeNull();
280
+ });
281
+ it('should return 404 for non-existent project', async () => {
282
+ const response = await (0, supertest_1.default)(app).delete('/api/projects/999');
283
+ expect(response.status).toBe(404);
284
+ expect(response.body.error).toBe('Project not found');
285
+ });
286
+ it('should return 404 for invalid ID format', async () => {
287
+ const response = await (0, supertest_1.default)(app).delete('/api/projects/invalid');
288
+ // The route regex only matches numeric IDs, so non-numeric IDs return 404
289
+ expect(response.status).toBe(404);
290
+ });
291
+ });
292
+ describe('GET /api/projects/:id/tests', () => {
293
+ it('should return tests for a project', async () => {
294
+ const db = new database_1.JSONDatabase();
295
+ const project = db.addProject('Test', testProjectDir);
296
+ db.addTest(project.id, 'test1.js', 'jest');
297
+ db.addTest(project.id, 'test2.js', 'jest');
298
+ const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}/tests`);
299
+ expect(response.status).toBe(200);
300
+ expect(response.body).toHaveLength(2);
301
+ });
302
+ it('should return empty array when no tests exist', async () => {
303
+ const db = new database_1.JSONDatabase();
304
+ const project = db.addProject('Test', testProjectDir);
305
+ const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}/tests`);
306
+ expect(response.status).toBe(200);
307
+ expect(response.body).toEqual([]);
308
+ });
309
+ it('should return 404 for non-existent project', async () => {
310
+ const response = await (0, supertest_1.default)(app).get('/api/projects/999/tests');
311
+ expect(response.status).toBe(404);
312
+ expect(response.body.error).toBe('Project not found');
313
+ });
314
+ });
315
+ describe('GET /api/projects/:id/ports', () => {
316
+ it('should return ports for a project', async () => {
317
+ const db = new database_1.JSONDatabase();
318
+ const project = db.addProject('Test', testProjectDir);
319
+ db.addProjectPort(project.id, 3000, 'package.json', 'dev');
320
+ db.addProjectPort(project.id, 8080, 'package.json', 'api');
321
+ const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}/ports`);
322
+ expect(response.status).toBe(200);
323
+ expect(response.body).toHaveLength(2);
324
+ expect(response.body.map((p) => p.port)).toEqual([3000, 8080]);
325
+ });
326
+ it('should return empty array when no ports exist', async () => {
327
+ const db = new database_1.JSONDatabase();
328
+ const project = db.addProject('Test', testProjectDir);
329
+ const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}/ports`);
330
+ expect(response.status).toBe(200);
331
+ expect(response.body).toEqual([]);
332
+ });
333
+ it('should return 404 for non-existent project', async () => {
334
+ const response = await (0, supertest_1.default)(app).get('/api/projects/999/ports');
335
+ expect(response.status).toBe(404);
336
+ expect(response.body.error).toBe('Project not found');
337
+ });
338
+ });
339
+ describe('POST /api/projects/:id/scan', () => {
340
+ it('should scan a project for tests', async () => {
341
+ // Create project with test files
342
+ const packageJson = {
343
+ devDependencies: { jest: '^29.0.0' },
344
+ };
345
+ fs.writeFileSync(path.join(testProjectDir, 'package.json'), JSON.stringify(packageJson));
346
+ fs.mkdirSync(path.join(testProjectDir, 'src'), { recursive: true });
347
+ fs.writeFileSync(path.join(testProjectDir, 'src', 'app.test.ts'), '');
348
+ const db = new database_1.JSONDatabase();
349
+ const project = db.addProject('Test', testProjectDir);
350
+ const response = await (0, supertest_1.default)(app).post(`/api/projects/${project.id}/scan`);
351
+ expect(response.status).toBe(200);
352
+ expect(response.body).toMatchObject({
353
+ testsFound: 1,
354
+ });
355
+ expect(response.body.tests).toHaveLength(1);
356
+ expect(response.body.project.last_scanned).toBeGreaterThan(0);
357
+ });
358
+ it('should return 404 for invalid ID format', async () => {
359
+ const response = await (0, supertest_1.default)(app).post('/api/projects/invalid/scan');
360
+ // The route regex only matches numeric IDs, so non-numeric IDs return 404
361
+ expect(response.status).toBe(404);
362
+ });
363
+ });
364
+ describe('POST /api/projects/scan/all', () => {
365
+ it('should scan all projects', async () => {
366
+ // Create two projects with test files
367
+ const packageJson = { devDependencies: { jest: '^29.0.0' } };
368
+ const dir1 = path.join(testConfig.dataDir, 'project1');
369
+ fs.mkdirSync(dir1, { recursive: true });
370
+ fs.writeFileSync(path.join(dir1, 'package.json'), JSON.stringify(packageJson));
371
+ fs.writeFileSync(path.join(dir1, 'test.spec.ts'), '');
372
+ const dir2 = path.join(testConfig.dataDir, 'project2');
373
+ fs.mkdirSync(dir2, { recursive: true });
374
+ fs.writeFileSync(path.join(dir2, 'package.json'), JSON.stringify(packageJson));
375
+ fs.writeFileSync(path.join(dir2, 'test.spec.ts'), '');
376
+ const db = new database_1.JSONDatabase();
377
+ db.addProject('Project 1', dir1);
378
+ db.addProject('Project 2', dir2);
379
+ const response = await (0, supertest_1.default)(app).post('/api/projects/scan/all');
380
+ expect(response.status).toBe(200);
381
+ expect(response.body).toHaveLength(2);
382
+ expect(response.body[0].testsFound).toBe(1);
383
+ expect(response.body[1].testsFound).toBe(1);
384
+ });
385
+ it('should return empty array when no projects exist', async () => {
386
+ const response = await (0, supertest_1.default)(app).post('/api/projects/scan/all');
387
+ expect(response.status).toBe(200);
388
+ expect(response.body).toEqual([]);
389
+ });
390
+ });
391
+ describe('GET /api/projects/tags', () => {
392
+ it('should return all unique tags', async () => {
393
+ const db = new database_1.JSONDatabase();
394
+ const dir1 = path.join(testConfig.dataDir, 'p1');
395
+ const dir2 = path.join(testConfig.dataDir, 'p2');
396
+ fs.mkdirSync(dir1, { recursive: true });
397
+ fs.mkdirSync(dir2, { recursive: true });
398
+ db.addProject('Project 1', dir1);
399
+ db.updateProject(1, { tags: ['web', 'api'] });
400
+ db.addProject('Project 2', dir2);
401
+ db.updateProject(2, { tags: ['api', 'mobile'] });
402
+ const response = await (0, supertest_1.default)(app).get('/api/projects/tags');
403
+ expect(response.status).toBe(200);
404
+ expect(response.body).toEqual(['api', 'mobile', 'web']);
405
+ });
406
+ it('should return empty array when no tags exist', async () => {
407
+ const response = await (0, supertest_1.default)(app).get('/api/projects/tags');
408
+ expect(response.status).toBe(200);
409
+ expect(response.body).toEqual([]);
410
+ });
411
+ });
412
+ describe('GET /api/settings', () => {
413
+ it('should return all settings', async () => {
414
+ const db = new database_1.JSONDatabase();
415
+ db.setSetting('theme', 'dark');
416
+ db.setSetting('language', 'en');
417
+ const response = await (0, supertest_1.default)(app).get('/api/settings');
418
+ expect(response.status).toBe(200);
419
+ expect(response.body).toEqual({
420
+ theme: 'dark',
421
+ language: 'en',
422
+ });
423
+ });
424
+ it('should return empty object when no settings exist', async () => {
425
+ const response = await (0, supertest_1.default)(app).get('/api/settings');
426
+ expect(response.status).toBe(200);
427
+ expect(response.body).toEqual({});
428
+ });
429
+ });
430
+ describe('PUT /api/settings/:key', () => {
431
+ it('should create a new setting', async () => {
432
+ const response = await (0, supertest_1.default)(app)
433
+ .put('/api/settings/theme')
434
+ .send({ value: 'dark' });
435
+ expect(response.status).toBe(200);
436
+ expect(response.body).toEqual({
437
+ key: 'theme',
438
+ value: 'dark',
439
+ });
440
+ });
441
+ it('should update an existing setting', async () => {
442
+ const db = new database_1.JSONDatabase();
443
+ db.setSetting('theme', 'dark');
444
+ const response = await (0, supertest_1.default)(app)
445
+ .put('/api/settings/theme')
446
+ .send({ value: 'light' });
447
+ expect(response.status).toBe(200);
448
+ expect(response.body).toEqual({
449
+ key: 'theme',
450
+ value: 'light',
451
+ });
452
+ });
453
+ it('should return 400 if value is missing', async () => {
454
+ const response = await (0, supertest_1.default)(app)
455
+ .put('/api/settings/theme')
456
+ .send({});
457
+ expect(response.status).toBe(400);
458
+ expect(response.body.error).toBe('Value is required');
459
+ });
460
+ it('should convert value to string', async () => {
461
+ const response = await (0, supertest_1.default)(app)
462
+ .put('/api/settings/count')
463
+ .send({ value: 42 });
464
+ expect(response.status).toBe(200);
465
+ // The response returns the original value, but it's stored as a string in DB
466
+ expect(response.body.value).toBe(42);
467
+ // Verify it was actually stored as a string
468
+ const { getDatabase } = require('../database');
469
+ expect(getDatabase().getSetting('count')).toBe('42');
470
+ });
471
+ });
472
+ });
473
+ //# sourceMappingURL=routes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.test.js","sourceRoot":"","sources":["../../src/__tests__/routes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scanner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scanner.test.ts"],"names":[],"mappings":""}