github-issue-tower-defence-management 1.181.0 → 1.182.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 (38) hide show
  1. package/.github/workflows/test.yml +1 -1
  2. package/CHANGELOG.md +14 -0
  3. package/bin/adapter/entry-points/console/ui-dist/assets/index-8Ni5iu-C.css +2 -0
  4. package/bin/adapter/entry-points/console/ui-dist/assets/index-y4IbtMEJ.js +86 -0
  5. package/bin/adapter/entry-points/console/ui-dist/index.html +2 -2
  6. package/bin/adapter/entry-points/console/webServer.js +6 -0
  7. package/bin/adapter/entry-points/console/webServer.js.map +1 -1
  8. package/package.json +1 -1
  9. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.stories.tsx +23 -0
  10. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +25 -0
  11. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.tsx +6 -0
  12. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.stories.tsx +49 -0
  13. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.test.tsx +157 -0
  14. package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.tsx +118 -0
  15. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.test.ts +74 -0
  16. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.ts +40 -0
  17. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.test.ts +59 -0
  18. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.ts +26 -0
  19. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.test.ts +110 -0
  20. package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.ts +70 -0
  21. package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +22 -0
  22. package/src/adapter/entry-points/console/ui/src/features/console/lib/navigation.ts +7 -0
  23. package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.test.ts +61 -0
  24. package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.ts +77 -0
  25. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +116 -0
  26. package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +72 -2
  27. package/src/adapter/entry-points/console/ui/src/index.css +139 -0
  28. package/src/adapter/entry-points/console/ui-dist/assets/index-8Ni5iu-C.css +2 -0
  29. package/src/adapter/entry-points/console/ui-dist/assets/index-y4IbtMEJ.js +86 -0
  30. package/src/adapter/entry-points/console/ui-dist/index.html +2 -2
  31. package/src/adapter/entry-points/console/webServer.test.ts +93 -0
  32. package/src/adapter/entry-points/console/webServer.ts +6 -0
  33. package/src/adapter/repositories/GoogleSpreadsheetRepository.integration.test.ts +4 -3
  34. package/types/adapter/entry-points/console/webServer.d.ts.map +1 -1
  35. package/bin/adapter/entry-points/console/ui-dist/assets/index-BUFcVUVD.js +0 -86
  36. package/bin/adapter/entry-points/console/ui-dist/assets/index-DeZcPNCr.css +0 -2
  37. package/src/adapter/entry-points/console/ui-dist/assets/index-BUFcVUVD.js +0 -86
  38. package/src/adapter/entry-points/console/ui-dist/assets/index-DeZcPNCr.css +0 -2
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>TDPM Console</title>
7
- <script type="module" crossorigin src="/assets/index-BUFcVUVD.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-DeZcPNCr.css">
7
+ <script type="module" crossorigin src="/assets/index-y4IbtMEJ.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-8Ni5iu-C.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
@@ -2487,3 +2487,96 @@ describe('webServer owner call file route', () => {
2487
2487
  }
2488
2488
  });
2489
2489
  });
2490
+
2491
+ describe('webServer GET /api/projects', () => {
2492
+ const testToken = 'integration-test-token-value';
2493
+
2494
+ const closeServer = (server: http.Server): Promise<void> =>
2495
+ new Promise((resolve, reject) => {
2496
+ server.close((error) => {
2497
+ if (error) {
2498
+ reject(error);
2499
+ return;
2500
+ }
2501
+ resolve();
2502
+ });
2503
+ });
2504
+
2505
+ const request = (
2506
+ server: http.Server,
2507
+ method: string,
2508
+ requestPath: string,
2509
+ ): Promise<{ statusCode: number; body: string }> => {
2510
+ const address = server.address();
2511
+ if (address === null || typeof address === 'string') {
2512
+ throw new Error('server is not listening on a TCP port');
2513
+ }
2514
+ const port = address.port;
2515
+ return new Promise((resolve, reject) => {
2516
+ const httpRequest = http.request(
2517
+ { host: '127.0.0.1', port, path: requestPath, method },
2518
+ (response) => {
2519
+ const chunks: Uint8Array[] = [];
2520
+ response.on('data', (chunk: Uint8Array) => chunks.push(chunk));
2521
+ response.on('end', () => {
2522
+ resolve({
2523
+ statusCode: response.statusCode ?? 0,
2524
+ body: Buffer.concat(chunks).toString('utf-8'),
2525
+ });
2526
+ });
2527
+ },
2528
+ );
2529
+ httpRequest.on('error', reject);
2530
+ httpRequest.end();
2531
+ });
2532
+ };
2533
+
2534
+ it('returns the dashboardProjectNames with a valid token', async () => {
2535
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
2536
+ const server = await startWebServer({
2537
+ accessToken: testToken,
2538
+ uiDistDir: path.join(tmpDir, 'ui-dist'),
2539
+ consoleDataOutputDir: null,
2540
+ inTmuxDataDir: null,
2541
+ dashboardDir: null,
2542
+ dashboardDataDir: null,
2543
+ dashboardProjectNames: ['alpha', 'beta', 'gamma'],
2544
+ port: 0,
2545
+ });
2546
+ try {
2547
+ const response = await request(
2548
+ server,
2549
+ 'GET',
2550
+ `/api/projects?k=${testToken}`,
2551
+ );
2552
+ expect(response.statusCode).toBe(200);
2553
+ expect(JSON.parse(response.body)).toEqual({
2554
+ pjcodes: ['alpha', 'beta', 'gamma'],
2555
+ });
2556
+ } finally {
2557
+ await closeServer(server);
2558
+ fs.rmSync(tmpDir, { recursive: true, force: true });
2559
+ }
2560
+ });
2561
+
2562
+ it('returns 401 without a valid token', async () => {
2563
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'console-server-'));
2564
+ const server = await startWebServer({
2565
+ accessToken: testToken,
2566
+ uiDistDir: path.join(tmpDir, 'ui-dist'),
2567
+ consoleDataOutputDir: null,
2568
+ inTmuxDataDir: null,
2569
+ dashboardDir: null,
2570
+ dashboardDataDir: null,
2571
+ dashboardProjectNames: ['alpha'],
2572
+ port: 0,
2573
+ });
2574
+ try {
2575
+ const response = await request(server, 'GET', '/api/projects');
2576
+ expect(response.statusCode).toBe(401);
2577
+ } finally {
2578
+ await closeServer(server);
2579
+ fs.rmSync(tmpDir, { recursive: true, force: true });
2580
+ }
2581
+ });
2582
+ });
@@ -464,6 +464,12 @@ const handleReadApi = async (
464
464
  requestPath: string,
465
465
  searchParams: URLSearchParams,
466
466
  ): Promise<{ statusCode: number; body: unknown } | null> => {
467
+ if (requestPath === '/api/projects') {
468
+ return {
469
+ statusCode: 200,
470
+ body: { pjcodes: options.dashboardProjectNames },
471
+ };
472
+ }
467
473
  const defaultIssueRepository = options.issueRepository ?? null;
468
474
  if (defaultIssueRepository === null) {
469
475
  return null;
@@ -25,9 +25,10 @@ describe('GoogleSpreadsheetRepository integration test credential', () => {
25
25
  });
26
26
  });
27
27
 
28
- const describeWhenCredentials = GOOGLE_SERVICE_ACCOUNT_KEY
29
- ? describe
30
- : describe.skip;
28
+ const describeWhenCredentials =
29
+ GOOGLE_SERVICE_ACCOUNT_KEY && integrationTestIsRequired
30
+ ? describe
31
+ : describe.skip;
31
32
 
32
33
  describeWhenCredentials('GoogleSpreadsheetRepository integration tests', () => {
33
34
  jest.setTimeout(60 * 1000);
@@ -1 +1 @@
1
- {"version":3,"file":"webServer.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/webServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webServer.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/webServer.ts"],"names":[],"mappings":"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"}