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.
- package/.github/workflows/test.yml +1 -1
- package/CHANGELOG.md +14 -0
- package/bin/adapter/entry-points/console/ui-dist/assets/index-8Ni5iu-C.css +2 -0
- package/bin/adapter/entry-points/console/ui-dist/assets/index-y4IbtMEJ.js +86 -0
- package/bin/adapter/entry-points/console/ui-dist/index.html +2 -2
- package/bin/adapter/entry-points/console/webServer.js +6 -0
- package/bin/adapter/entry-points/console/webServer.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.stories.tsx +23 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.test.tsx +25 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTabList.tsx +6 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.stories.tsx +49 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.test.tsx +157 -0
- package/src/adapter/entry-points/console/ui/src/features/console/components/layout/ConsoleTimerSettingsModalDialog.tsx +118 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.test.ts +74 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectList.ts +40 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.test.ts +59 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleProjectTimer.ts +26 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.test.ts +110 -0
- package/src/adapter/entry-points/console/ui/src/features/console/hooks/useConsoleTimerSettings.ts +70 -0
- package/src/adapter/entry-points/console/ui/src/features/console/lib/consoleApi.ts +22 -0
- package/src/adapter/entry-points/console/ui/src/features/console/lib/navigation.ts +7 -0
- package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.test.ts +61 -0
- package/src/adapter/entry-points/console/ui/src/features/console/logic/timerSettings.ts +77 -0
- package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.test.tsx +116 -0
- package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsolePage.tsx +72 -2
- package/src/adapter/entry-points/console/ui/src/index.css +139 -0
- package/src/adapter/entry-points/console/ui-dist/assets/index-8Ni5iu-C.css +2 -0
- package/src/adapter/entry-points/console/ui-dist/assets/index-y4IbtMEJ.js +86 -0
- package/src/adapter/entry-points/console/ui-dist/index.html +2 -2
- package/src/adapter/entry-points/console/webServer.test.ts +93 -0
- package/src/adapter/entry-points/console/webServer.ts +6 -0
- package/src/adapter/repositories/GoogleSpreadsheetRepository.integration.test.ts +4 -3
- package/types/adapter/entry-points/console/webServer.d.ts.map +1 -1
- package/bin/adapter/entry-points/console/ui-dist/assets/index-BUFcVUVD.js +0 -86
- package/bin/adapter/entry-points/console/ui-dist/assets/index-DeZcPNCr.css +0 -2
- package/src/adapter/entry-points/console/ui-dist/assets/index-BUFcVUVD.js +0 -86
- 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-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
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 =
|
|
29
|
-
|
|
30
|
-
|
|
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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"}
|