@skillsmith/mcp-server 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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/src/__tests__/get-skill.test.d.ts +6 -0
- package/dist/src/__tests__/get-skill.test.d.ts.map +1 -0
- package/dist/src/__tests__/get-skill.test.js +88 -0
- package/dist/src/__tests__/get-skill.test.js.map +1 -0
- package/dist/src/__tests__/middleware/errorFormatter.test.d.ts +7 -0
- package/dist/src/__tests__/middleware/errorFormatter.test.d.ts.map +1 -0
- package/dist/src/__tests__/middleware/errorFormatter.test.js +304 -0
- package/dist/src/__tests__/middleware/errorFormatter.test.js.map +1 -0
- package/dist/src/__tests__/middleware/license.test.d.ts +7 -0
- package/dist/src/__tests__/middleware/license.test.d.ts.map +1 -0
- package/dist/src/__tests__/middleware/license.test.js +500 -0
- package/dist/src/__tests__/middleware/license.test.js.map +1 -0
- package/dist/src/__tests__/search.test.d.ts +6 -0
- package/dist/src/__tests__/search.test.d.ts.map +1 -0
- package/dist/src/__tests__/search.test.js +86 -0
- package/dist/src/__tests__/search.test.js.map +1 -0
- package/dist/src/__tests__/test-utils.d.ts +19 -0
- package/dist/src/__tests__/test-utils.d.ts.map +1 -0
- package/dist/src/__tests__/test-utils.js +87 -0
- package/dist/src/__tests__/test-utils.js.map +1 -0
- package/dist/src/context/index.d.ts +19 -0
- package/dist/src/context/index.d.ts.map +1 -0
- package/dist/src/context/index.js +25 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/project-detector.d.ts +145 -0
- package/dist/src/context/project-detector.d.ts.map +1 -0
- package/dist/src/context/project-detector.js +321 -0
- package/dist/src/context/project-detector.js.map +1 -0
- package/dist/src/context.d.ts +100 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +157 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/core-shim.d.ts +7 -0
- package/dist/src/core-shim.d.ts.map +1 -0
- package/dist/src/core-shim.js +9 -0
- package/dist/src/core-shim.js.map +1 -0
- package/dist/src/health/healthCheck.d.ts +88 -0
- package/dist/src/health/healthCheck.d.ts.map +1 -0
- package/dist/src/health/healthCheck.js +117 -0
- package/dist/src/health/healthCheck.js.map +1 -0
- package/dist/src/health/index.d.ts +21 -0
- package/dist/src/health/index.d.ts.map +1 -0
- package/dist/src/health/index.js +21 -0
- package/dist/src/health/index.js.map +1 -0
- package/dist/src/health/readinessCheck.d.ts +139 -0
- package/dist/src/health/readinessCheck.d.ts.map +1 -0
- package/dist/src/health/readinessCheck.js +266 -0
- package/dist/src/health/readinessCheck.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +178 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.test.d.ts +2 -0
- package/dist/src/index.test.d.ts.map +1 -0
- package/dist/src/index.test.js +43 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/logger.d.ts +26 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +179 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/middleware/__tests__/csp.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/csp.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/csp.test.js +389 -0
- package/dist/src/middleware/__tests__/csp.test.js.map +1 -0
- package/dist/src/middleware/csp.d.ts +87 -0
- package/dist/src/middleware/csp.d.ts.map +1 -0
- package/dist/src/middleware/csp.js +273 -0
- package/dist/src/middleware/csp.js.map +1 -0
- package/dist/src/middleware/degradation.d.ts +99 -0
- package/dist/src/middleware/degradation.d.ts.map +1 -0
- package/dist/src/middleware/degradation.js +315 -0
- package/dist/src/middleware/degradation.js.map +1 -0
- package/dist/src/middleware/errorFormatter.d.ts +119 -0
- package/dist/src/middleware/errorFormatter.d.ts.map +1 -0
- package/dist/src/middleware/errorFormatter.js +294 -0
- package/dist/src/middleware/errorFormatter.js.map +1 -0
- package/dist/src/middleware/index.d.ts +10 -0
- package/dist/src/middleware/index.d.ts.map +1 -0
- package/dist/src/middleware/index.js +14 -0
- package/dist/src/middleware/index.js.map +1 -0
- package/dist/src/middleware/license.d.ts +161 -0
- package/dist/src/middleware/license.d.ts.map +1 -0
- package/dist/src/middleware/license.js +281 -0
- package/dist/src/middleware/license.js.map +1 -0
- package/dist/src/middleware/toolFeatureMapping.d.ts +36 -0
- package/dist/src/middleware/toolFeatureMapping.d.ts.map +1 -0
- package/dist/src/middleware/toolFeatureMapping.js +90 -0
- package/dist/src/middleware/toolFeatureMapping.js.map +1 -0
- package/dist/src/onboarding/first-run.d.ts +64 -0
- package/dist/src/onboarding/first-run.d.ts.map +1 -0
- package/dist/src/onboarding/first-run.js +77 -0
- package/dist/src/onboarding/first-run.js.map +1 -0
- package/dist/src/onboarding/index.d.ts +7 -0
- package/dist/src/onboarding/index.d.ts.map +1 -0
- package/dist/src/onboarding/index.js +7 -0
- package/dist/src/onboarding/index.js.map +1 -0
- package/dist/src/suggestions/index.d.ts +21 -0
- package/dist/src/suggestions/index.d.ts.map +1 -0
- package/dist/src/suggestions/index.js +20 -0
- package/dist/src/suggestions/index.js.map +1 -0
- package/dist/src/suggestions/suggestion-engine.d.ts +185 -0
- package/dist/src/suggestions/suggestion-engine.d.ts.map +1 -0
- package/dist/src/suggestions/suggestion-engine.js +352 -0
- package/dist/src/suggestions/suggestion-engine.js.map +1 -0
- package/dist/src/suggestions/types.d.ts +88 -0
- package/dist/src/suggestions/types.d.ts.map +1 -0
- package/dist/src/suggestions/types.js +21 -0
- package/dist/src/suggestions/types.js.map +1 -0
- package/dist/src/tools/analyze.d.ts +151 -0
- package/dist/src/tools/analyze.d.ts.map +1 -0
- package/dist/src/tools/analyze.js +205 -0
- package/dist/src/tools/analyze.js.map +1 -0
- package/dist/src/tools/compare.d.ts +149 -0
- package/dist/src/tools/compare.d.ts.map +1 -0
- package/dist/src/tools/compare.js +464 -0
- package/dist/src/tools/compare.js.map +1 -0
- package/dist/src/tools/get-skill.d.ts +116 -0
- package/dist/src/tools/get-skill.d.ts.map +1 -0
- package/dist/src/tools/get-skill.js +224 -0
- package/dist/src/tools/get-skill.js.map +1 -0
- package/dist/src/tools/index.d.ts +20 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +20 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/install.d.ts +122 -0
- package/dist/src/tools/install.d.ts.map +1 -0
- package/dist/src/tools/install.js +314 -0
- package/dist/src/tools/install.js.map +1 -0
- package/dist/src/tools/recommend.d.ts +171 -0
- package/dist/src/tools/recommend.d.ts.map +1 -0
- package/dist/src/tools/recommend.js +325 -0
- package/dist/src/tools/recommend.js.map +1 -0
- package/dist/src/tools/search.d.ts +121 -0
- package/dist/src/tools/search.d.ts.map +1 -0
- package/dist/src/tools/search.js +249 -0
- package/dist/src/tools/search.js.map +1 -0
- package/dist/src/tools/suggest.d.ts +181 -0
- package/dist/src/tools/suggest.d.ts.map +1 -0
- package/dist/src/tools/suggest.js +342 -0
- package/dist/src/tools/suggest.js.map +1 -0
- package/dist/src/tools/uninstall.d.ts +123 -0
- package/dist/src/tools/uninstall.d.ts.map +1 -0
- package/dist/src/tools/uninstall.js +250 -0
- package/dist/src/tools/uninstall.js.map +1 -0
- package/dist/src/tools/validate.d.ts +122 -0
- package/dist/src/tools/validate.d.ts.map +1 -0
- package/dist/src/tools/validate.js +497 -0
- package/dist/src/tools/validate.js.map +1 -0
- package/dist/src/utils/installed-skills.d.ts +101 -0
- package/dist/src/utils/installed-skills.d.ts.map +1 -0
- package/dist/src/utils/installed-skills.js +220 -0
- package/dist/src/utils/installed-skills.js.map +1 -0
- package/dist/src/utils/validation.d.ts +76 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/src/utils/validation.js +153 -0
- package/dist/src/utils/validation.js.map +1 -0
- package/dist/src/webhooks/index.d.ts +8 -0
- package/dist/src/webhooks/index.d.ts.map +1 -0
- package/dist/src/webhooks/index.js +9 -0
- package/dist/src/webhooks/index.js.map +1 -0
- package/dist/src/webhooks/webhook-endpoint.d.ts +149 -0
- package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -0
- package/dist/src/webhooks/webhook-endpoint.js +339 -0
- package/dist/src/webhooks/webhook-endpoint.js.map +1 -0
- package/dist/tests/compare.test.d.ts +6 -0
- package/dist/tests/compare.test.d.ts.map +1 -0
- package/dist/tests/compare.test.js +225 -0
- package/dist/tests/compare.test.js.map +1 -0
- package/dist/tests/context/project-detector.test.d.ts +6 -0
- package/dist/tests/context/project-detector.test.d.ts.map +1 -0
- package/dist/tests/context/project-detector.test.js +719 -0
- package/dist/tests/context/project-detector.test.js.map +1 -0
- package/dist/tests/e2e/compare.e2e.test.d.ts +10 -0
- package/dist/tests/e2e/compare.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/compare.e2e.test.js +286 -0
- package/dist/tests/e2e/compare.e2e.test.js.map +1 -0
- package/dist/tests/e2e/install-flow.e2e.test.d.ts +10 -0
- package/dist/tests/e2e/install-flow.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/install-flow.e2e.test.js +209 -0
- package/dist/tests/e2e/install-flow.e2e.test.js.map +1 -0
- package/dist/tests/e2e/recommend.e2e.test.d.ts +12 -0
- package/dist/tests/e2e/recommend.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/recommend.e2e.test.js +347 -0
- package/dist/tests/e2e/recommend.e2e.test.js.map +1 -0
- package/dist/tests/e2e/skill-flow.e2e.test.d.ts +10 -0
- package/dist/tests/e2e/skill-flow.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/skill-flow.e2e.test.js +280 -0
- package/dist/tests/e2e/skill-flow.e2e.test.js.map +1 -0
- package/dist/tests/e2e/suggest.e2e.test.d.ts +13 -0
- package/dist/tests/e2e/suggest.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/suggest.e2e.test.js +347 -0
- package/dist/tests/e2e/suggest.e2e.test.js.map +1 -0
- package/dist/tests/e2e/utils/baseline-collector.d.ts +107 -0
- package/dist/tests/e2e/utils/baseline-collector.d.ts.map +1 -0
- package/dist/tests/e2e/utils/baseline-collector.js +211 -0
- package/dist/tests/e2e/utils/baseline-collector.js.map +1 -0
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts +46 -0
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +1 -0
- package/dist/tests/e2e/utils/hardcoded-detector.js +255 -0
- package/dist/tests/e2e/utils/hardcoded-detector.js.map +1 -0
- package/dist/tests/e2e/utils/index.d.ts +7 -0
- package/dist/tests/e2e/utils/index.d.ts.map +1 -0
- package/dist/tests/e2e/utils/index.js +7 -0
- package/dist/tests/e2e/utils/index.js.map +1 -0
- package/dist/tests/e2e/utils/linear-reporter.d.ts +60 -0
- package/dist/tests/e2e/utils/linear-reporter.d.ts.map +1 -0
- package/dist/tests/e2e/utils/linear-reporter.js +232 -0
- package/dist/tests/e2e/utils/linear-reporter.js.map +1 -0
- package/dist/tests/health.test.d.ts +9 -0
- package/dist/tests/health.test.d.ts.map +1 -0
- package/dist/tests/health.test.js +308 -0
- package/dist/tests/health.test.js.map +1 -0
- package/dist/tests/integration/analyze.integration.test.d.ts +2 -0
- package/dist/tests/integration/analyze.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/analyze.integration.test.js +244 -0
- package/dist/tests/integration/analyze.integration.test.js.map +1 -0
- package/dist/tests/integration/compare.integration.test.d.ts +2 -0
- package/dist/tests/integration/compare.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/compare.integration.test.js +120 -0
- package/dist/tests/integration/compare.integration.test.js.map +1 -0
- package/dist/tests/integration/fixtures/test-skills.d.ts +62 -0
- package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/test-skills.js +644 -0
- package/dist/tests/integration/fixtures/test-skills.js.map +1 -0
- package/dist/tests/integration/get-skill.integration.test.d.ts +6 -0
- package/dist/tests/integration/get-skill.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/get-skill.integration.test.js +203 -0
- package/dist/tests/integration/get-skill.integration.test.js.map +1 -0
- package/dist/tests/integration/github-api.integration.test.d.ts +14 -0
- package/dist/tests/integration/github-api.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/github-api.integration.test.js +190 -0
- package/dist/tests/integration/github-api.integration.test.js.map +1 -0
- package/dist/tests/integration/install.integration.test.d.ts +6 -0
- package/dist/tests/integration/install.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install.integration.test.js +282 -0
- package/dist/tests/integration/install.integration.test.js.map +1 -0
- package/dist/tests/integration/recommend.integration.test.d.ts +2 -0
- package/dist/tests/integration/recommend.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/recommend.integration.test.js +215 -0
- package/dist/tests/integration/recommend.integration.test.js.map +1 -0
- package/dist/tests/integration/search.integration.test.d.ts +6 -0
- package/dist/tests/integration/search.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/search.integration.test.js +229 -0
- package/dist/tests/integration/search.integration.test.js.map +1 -0
- package/dist/tests/integration/setup.d.ts +71 -0
- package/dist/tests/integration/setup.d.ts.map +1 -0
- package/dist/tests/integration/setup.js +124 -0
- package/dist/tests/integration/setup.js.map +1 -0
- package/dist/tests/integration/uninstall.integration.test.d.ts +6 -0
- package/dist/tests/integration/uninstall.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/uninstall.integration.test.js +296 -0
- package/dist/tests/integration/uninstall.integration.test.js.map +1 -0
- package/dist/tests/integration/validate.integration.test.d.ts +2 -0
- package/dist/tests/integration/validate.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/validate.integration.test.js +181 -0
- package/dist/tests/integration/validate.integration.test.js.map +1 -0
- package/dist/tests/onboarding/first-run.test.d.ts +7 -0
- package/dist/tests/onboarding/first-run.test.d.ts.map +1 -0
- package/dist/tests/onboarding/first-run.test.js +258 -0
- package/dist/tests/onboarding/first-run.test.js.map +1 -0
- package/dist/tests/performance/search-performance.test.d.ts +10 -0
- package/dist/tests/performance/search-performance.test.d.ts.map +1 -0
- package/dist/tests/performance/search-performance.test.js +218 -0
- package/dist/tests/performance/search-performance.test.js.map +1 -0
- package/dist/tests/recommend.test.d.ts +6 -0
- package/dist/tests/recommend.test.d.ts.map +1 -0
- package/dist/tests/recommend.test.js +208 -0
- package/dist/tests/recommend.test.js.map +1 -0
- package/dist/tests/suggestions/suggestion-engine.test.d.ts +6 -0
- package/dist/tests/suggestions/suggestion-engine.test.d.ts.map +1 -0
- package/dist/tests/suggestions/suggestion-engine.test.js +448 -0
- package/dist/tests/suggestions/suggestion-engine.test.js.map +1 -0
- package/dist/tests/test-utils.d.ts +74 -0
- package/dist/tests/test-utils.d.ts.map +1 -0
- package/dist/tests/test-utils.js +98 -0
- package/dist/tests/test-utils.js.map +1 -0
- package/dist/tests/tools.test.d.ts +5 -0
- package/dist/tests/tools.test.d.ts.map +1 -0
- package/dist/tests/tools.test.js +138 -0
- package/dist/tests/tools.test.js.map +1 -0
- package/dist/tests/unit/installed-skills.test.d.ts +6 -0
- package/dist/tests/unit/installed-skills.test.d.ts.map +1 -0
- package/dist/tests/unit/installed-skills.test.js +285 -0
- package/dist/tests/unit/installed-skills.test.js.map +1 -0
- package/dist/tests/unit/logger.test.d.ts +6 -0
- package/dist/tests/unit/logger.test.d.ts.map +1 -0
- package/dist/tests/unit/logger.test.js +281 -0
- package/dist/tests/unit/logger.test.js.map +1 -0
- package/dist/tests/validate.test.d.ts +5 -0
- package/dist/tests/validate.test.d.ts.map +1 -0
- package/dist/tests/validate.test.js +303 -0
- package/dist/tests/validate.test.js.map +1 -0
- package/dist/tests/webhooks/proxy-trust.security.test.d.ts +8 -0
- package/dist/tests/webhooks/proxy-trust.security.test.d.ts.map +1 -0
- package/dist/tests/webhooks/proxy-trust.security.test.js +145 -0
- package/dist/tests/webhooks/proxy-trust.security.test.js.map +1 -0
- package/dist/tests/webhooks/rate-limiter.security.test.d.ts +8 -0
- package/dist/tests/webhooks/rate-limiter.security.test.d.ts.map +1 -0
- package/dist/tests/webhooks/rate-limiter.security.test.js +122 -0
- package/dist/tests/webhooks/rate-limiter.security.test.js.map +1 -0
- package/dist/vitest.config.d.ts +6 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +13 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Issue Reporter for E2E Test Failures
|
|
3
|
+
*
|
|
4
|
+
* Automatically creates Linear issues when E2E tests detect problems.
|
|
5
|
+
* Issues include detailed evidence for specialist agents to resolve.
|
|
6
|
+
*
|
|
7
|
+
* @see docs/testing/e2e-testing-plan.md
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Format hardcoded issue for Linear description
|
|
11
|
+
*/
|
|
12
|
+
function formatHardcodedEvidence(issues) {
|
|
13
|
+
if (issues.length === 0)
|
|
14
|
+
return '';
|
|
15
|
+
const lines = [
|
|
16
|
+
'## Hardcoded Values Detected',
|
|
17
|
+
'',
|
|
18
|
+
'| Type | Pattern | Value | Source |',
|
|
19
|
+
'|------|---------|-------|--------|',
|
|
20
|
+
];
|
|
21
|
+
for (const issue of issues) {
|
|
22
|
+
lines.push(`| ${issue.type} | ${issue.pattern} | \`${issue.value}\` | ${issue.location.source} |`);
|
|
23
|
+
}
|
|
24
|
+
lines.push('');
|
|
25
|
+
return lines.join('\n');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create Linear issue description from test failure
|
|
29
|
+
*/
|
|
30
|
+
export function createIssueDescription(failure) {
|
|
31
|
+
const sections = [];
|
|
32
|
+
// Problem definition
|
|
33
|
+
sections.push('## Problem Definition');
|
|
34
|
+
sections.push('');
|
|
35
|
+
sections.push(`E2E test **${failure.testName}** failed during automated testing.`);
|
|
36
|
+
sections.push('');
|
|
37
|
+
sections.push(`**Test File**: \`${failure.testFile}\``);
|
|
38
|
+
sections.push(`**Command**: \`${failure.command}\``);
|
|
39
|
+
sections.push(`**Timestamp**: ${failure.timestamp}`);
|
|
40
|
+
if (failure.duration) {
|
|
41
|
+
sections.push(`**Duration**: ${failure.duration}ms`);
|
|
42
|
+
}
|
|
43
|
+
sections.push('');
|
|
44
|
+
// Error details
|
|
45
|
+
sections.push('## Error Details');
|
|
46
|
+
sections.push('');
|
|
47
|
+
sections.push('```');
|
|
48
|
+
sections.push(failure.error);
|
|
49
|
+
sections.push('```');
|
|
50
|
+
sections.push('');
|
|
51
|
+
// Hardcoded issues if present
|
|
52
|
+
if (failure.hardcodedIssues && failure.hardcodedIssues.length > 0) {
|
|
53
|
+
sections.push(formatHardcodedEvidence(failure.hardcodedIssues));
|
|
54
|
+
}
|
|
55
|
+
// Output evidence (truncated)
|
|
56
|
+
if (failure.stdout || failure.stderr) {
|
|
57
|
+
sections.push('## Command Output');
|
|
58
|
+
sections.push('');
|
|
59
|
+
if (failure.stdout) {
|
|
60
|
+
const truncatedStdout = failure.stdout.length > 1000
|
|
61
|
+
? failure.stdout.substring(0, 1000) + '\n... (truncated)'
|
|
62
|
+
: failure.stdout;
|
|
63
|
+
sections.push('<details>');
|
|
64
|
+
sections.push('<summary>stdout</summary>');
|
|
65
|
+
sections.push('');
|
|
66
|
+
sections.push('```');
|
|
67
|
+
sections.push(truncatedStdout);
|
|
68
|
+
sections.push('```');
|
|
69
|
+
sections.push('</details>');
|
|
70
|
+
sections.push('');
|
|
71
|
+
}
|
|
72
|
+
if (failure.stderr) {
|
|
73
|
+
const truncatedStderr = failure.stderr.length > 1000
|
|
74
|
+
? failure.stderr.substring(0, 1000) + '\n... (truncated)'
|
|
75
|
+
: failure.stderr;
|
|
76
|
+
sections.push('<details>');
|
|
77
|
+
sections.push('<summary>stderr</summary>');
|
|
78
|
+
sections.push('');
|
|
79
|
+
sections.push('```');
|
|
80
|
+
sections.push(truncatedStderr);
|
|
81
|
+
sections.push('```');
|
|
82
|
+
sections.push('</details>');
|
|
83
|
+
sections.push('');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Recommended actions
|
|
87
|
+
sections.push('## Recommended Actions');
|
|
88
|
+
sections.push('');
|
|
89
|
+
if (failure.hardcodedIssues && failure.hardcodedIssues.length > 0) {
|
|
90
|
+
sections.push('1. Review hardcoded values detected above');
|
|
91
|
+
sections.push('2. Replace with environment variables or user-configurable options');
|
|
92
|
+
sections.push('3. Use platform-agnostic path resolution (os.homedir(), path.join())');
|
|
93
|
+
sections.push('4. Re-run E2E tests in Codespace to verify fix');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
sections.push('1. Review error message and stack trace');
|
|
97
|
+
sections.push('2. Check test assumptions about environment');
|
|
98
|
+
sections.push('3. Verify command works in clean Codespace environment');
|
|
99
|
+
sections.push('4. Re-run E2E tests to verify fix');
|
|
100
|
+
}
|
|
101
|
+
sections.push('');
|
|
102
|
+
// Environment info
|
|
103
|
+
sections.push('## Test Environment');
|
|
104
|
+
sections.push('');
|
|
105
|
+
sections.push('- **Type**: GitHub Codespaces');
|
|
106
|
+
sections.push('- **Node Version**: 20.x');
|
|
107
|
+
sections.push('- **Test Repository**: 021-school-platform');
|
|
108
|
+
sections.push('');
|
|
109
|
+
return sections.join('\n');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create Linear issue title from test failure
|
|
113
|
+
*/
|
|
114
|
+
export function createIssueTitle(failure) {
|
|
115
|
+
if (failure.hardcodedIssues && failure.hardcodedIssues.length > 0) {
|
|
116
|
+
const types = [...new Set(failure.hardcodedIssues.map((i) => i.type))];
|
|
117
|
+
return `[E2E] Hardcoded ${types.join(', ')} in ${failure.command}`;
|
|
118
|
+
}
|
|
119
|
+
return `[E2E] ${failure.testName} failed`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create Linear issue via API
|
|
123
|
+
*/
|
|
124
|
+
export async function createLinearIssue(failure) {
|
|
125
|
+
const apiKey = process.env['LINEAR_API_KEY'];
|
|
126
|
+
const teamId = process.env['LINEAR_TEAM_ID'];
|
|
127
|
+
if (!apiKey) {
|
|
128
|
+
console.warn('LINEAR_API_KEY not set, skipping issue creation');
|
|
129
|
+
return {
|
|
130
|
+
success: false,
|
|
131
|
+
error: 'LINEAR_API_KEY environment variable not set',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (!teamId) {
|
|
135
|
+
console.warn('LINEAR_TEAM_ID not set, skipping issue creation');
|
|
136
|
+
return {
|
|
137
|
+
success: false,
|
|
138
|
+
error: 'LINEAR_TEAM_ID environment variable not set (required for issue creation)',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const title = createIssueTitle(failure);
|
|
142
|
+
const description = createIssueDescription(failure);
|
|
143
|
+
// GraphQL mutation for creating issue
|
|
144
|
+
const mutation = `
|
|
145
|
+
mutation CreateIssue($input: IssueCreateInput!) {
|
|
146
|
+
issueCreate(input: $input) {
|
|
147
|
+
success
|
|
148
|
+
issue {
|
|
149
|
+
id
|
|
150
|
+
identifier
|
|
151
|
+
url
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
`;
|
|
156
|
+
const variables = {
|
|
157
|
+
input: {
|
|
158
|
+
title,
|
|
159
|
+
description,
|
|
160
|
+
teamId,
|
|
161
|
+
// Labels: bug, e2e, hardcoded (if applicable)
|
|
162
|
+
labelIds: failure.hardcodedIssues?.length ? ['bug', 'e2e', 'hardcoded'] : ['bug', 'e2e'],
|
|
163
|
+
priority: failure.hardcodedIssues?.some((i) => i.severity === 'error') ? 1 : 2,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
try {
|
|
167
|
+
const response = await fetch('https://api.linear.app/graphql', {
|
|
168
|
+
method: 'POST',
|
|
169
|
+
headers: {
|
|
170
|
+
'Content-Type': 'application/json',
|
|
171
|
+
Authorization: apiKey,
|
|
172
|
+
},
|
|
173
|
+
body: JSON.stringify({ query: mutation, variables }),
|
|
174
|
+
});
|
|
175
|
+
if (!response.ok) {
|
|
176
|
+
throw new Error(`Linear API error: ${response.status} ${response.statusText}`);
|
|
177
|
+
}
|
|
178
|
+
const result = (await response.json());
|
|
179
|
+
if (result.errors) {
|
|
180
|
+
throw new Error(`GraphQL errors: ${JSON.stringify(result.errors)}`);
|
|
181
|
+
}
|
|
182
|
+
const issueData = result.data?.issueCreate;
|
|
183
|
+
if (issueData?.success) {
|
|
184
|
+
return {
|
|
185
|
+
success: true,
|
|
186
|
+
issueId: issueData.issue.identifier,
|
|
187
|
+
issueUrl: issueData.issue.url,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
success: false,
|
|
192
|
+
error: 'Issue creation returned unsuccessful',
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
return {
|
|
197
|
+
success: false,
|
|
198
|
+
error: error instanceof Error ? error.message : String(error),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Queue issue for batch creation (used when rate-limited)
|
|
204
|
+
*/
|
|
205
|
+
const issueQueue = [];
|
|
206
|
+
export function queueIssue(failure) {
|
|
207
|
+
issueQueue.push(failure);
|
|
208
|
+
}
|
|
209
|
+
export function getQueuedIssues() {
|
|
210
|
+
return [...issueQueue];
|
|
211
|
+
}
|
|
212
|
+
export async function flushIssueQueue() {
|
|
213
|
+
const results = [];
|
|
214
|
+
for (const failure of issueQueue) {
|
|
215
|
+
const result = await createLinearIssue(failure);
|
|
216
|
+
results.push(result);
|
|
217
|
+
// Rate limit: wait 500ms between requests
|
|
218
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
219
|
+
}
|
|
220
|
+
// Clear queue
|
|
221
|
+
issueQueue.length = 0;
|
|
222
|
+
return results;
|
|
223
|
+
}
|
|
224
|
+
export default {
|
|
225
|
+
createIssueDescription,
|
|
226
|
+
createIssueTitle,
|
|
227
|
+
createLinearIssue,
|
|
228
|
+
queueIssue,
|
|
229
|
+
getQueuedIssues,
|
|
230
|
+
flushIssueQueue,
|
|
231
|
+
};
|
|
232
|
+
//# sourceMappingURL=linear-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-reporter.js","sourceRoot":"","sources":["../../../../tests/e2e/utils/linear-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-740: Health Check and Readiness Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for health and readiness endpoints:
|
|
5
|
+
* - /health: Quick liveness check
|
|
6
|
+
* - /ready: Deep readiness check with dependency verification
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=health.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.test.d.ts","sourceRoot":"","sources":["../../tests/health.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-740: Health Check and Readiness Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for health and readiness endpoints:
|
|
5
|
+
* - /health: Quick liveness check
|
|
6
|
+
* - /ready: Deep readiness check with dependency verification
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
9
|
+
import Database from 'better-sqlite3';
|
|
10
|
+
import { HealthCheck, checkHealth, createHealthCheck, formatHealthResponse, } from '../src/health/healthCheck.js';
|
|
11
|
+
import { ReadinessCheck, checkReadiness, createReadinessCheck, formatReadinessResponse, } from '../src/health/readinessCheck.js';
|
|
12
|
+
import { checkAll } from '../src/health/index.js';
|
|
13
|
+
describe('Health Check (SMI-740)', () => {
|
|
14
|
+
describe('HealthCheck class', () => {
|
|
15
|
+
it('should return ok status when healthy', async () => {
|
|
16
|
+
const healthCheck = new HealthCheck();
|
|
17
|
+
const result = await healthCheck.check();
|
|
18
|
+
expect(result.status).toBe('ok');
|
|
19
|
+
expect(result.uptime).toBeGreaterThanOrEqual(0);
|
|
20
|
+
expect(result.version).toBeDefined();
|
|
21
|
+
expect(result.timestamp).toBeDefined();
|
|
22
|
+
});
|
|
23
|
+
it('should include custom version', async () => {
|
|
24
|
+
const healthCheck = new HealthCheck({ version: '1.2.3' });
|
|
25
|
+
const result = await healthCheck.check();
|
|
26
|
+
expect(result.version).toBe('1.2.3');
|
|
27
|
+
});
|
|
28
|
+
it('should return degraded status when custom check fails', async () => {
|
|
29
|
+
const healthCheck = new HealthCheck({
|
|
30
|
+
customCheck: async () => ({ healthy: false, info: { reason: 'Test failure' } }),
|
|
31
|
+
});
|
|
32
|
+
const result = await healthCheck.check();
|
|
33
|
+
expect(result.status).toBe('degraded');
|
|
34
|
+
expect(result.info?.reason).toBe('Test failure');
|
|
35
|
+
});
|
|
36
|
+
it('should handle custom check errors gracefully', async () => {
|
|
37
|
+
const healthCheck = new HealthCheck({
|
|
38
|
+
customCheck: async () => {
|
|
39
|
+
throw new Error('Custom check error');
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const result = await healthCheck.check();
|
|
43
|
+
expect(result.status).toBe('degraded');
|
|
44
|
+
expect(result.info?.customCheckError).toBe('Custom check error');
|
|
45
|
+
});
|
|
46
|
+
it('should calculate uptime correctly', async () => {
|
|
47
|
+
const healthCheck = new HealthCheck();
|
|
48
|
+
const uptime1 = healthCheck.getUptime();
|
|
49
|
+
// Wait a bit
|
|
50
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
51
|
+
const uptime2 = healthCheck.getUptime();
|
|
52
|
+
expect(uptime2).toBeGreaterThanOrEqual(uptime1);
|
|
53
|
+
});
|
|
54
|
+
it('should return boolean from isHealthy', async () => {
|
|
55
|
+
const healthCheck = new HealthCheck();
|
|
56
|
+
const isHealthy = await healthCheck.isHealthy();
|
|
57
|
+
expect(typeof isHealthy).toBe('boolean');
|
|
58
|
+
expect(isHealthy).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('checkHealth function', () => {
|
|
62
|
+
it('should use default health check instance', async () => {
|
|
63
|
+
const result = await checkHealth();
|
|
64
|
+
expect(result.status).toBe('ok');
|
|
65
|
+
expect(result.uptime).toBeGreaterThanOrEqual(0);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('createHealthCheck function', () => {
|
|
69
|
+
it('should create new instance with config', async () => {
|
|
70
|
+
const healthCheck = createHealthCheck({ version: '2.0.0' });
|
|
71
|
+
const result = await healthCheck.check();
|
|
72
|
+
expect(result.version).toBe('2.0.0');
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('formatHealthResponse', () => {
|
|
76
|
+
it('should return 200 for ok status', () => {
|
|
77
|
+
const response = {
|
|
78
|
+
status: 'ok',
|
|
79
|
+
uptime: 100,
|
|
80
|
+
version: '1.0.0',
|
|
81
|
+
timestamp: new Date().toISOString(),
|
|
82
|
+
};
|
|
83
|
+
const formatted = formatHealthResponse(response);
|
|
84
|
+
expect(formatted.statusCode).toBe(200);
|
|
85
|
+
expect(formatted.body).toEqual(response);
|
|
86
|
+
});
|
|
87
|
+
it('should return 200 for degraded status', () => {
|
|
88
|
+
const response = {
|
|
89
|
+
status: 'degraded',
|
|
90
|
+
uptime: 100,
|
|
91
|
+
version: '1.0.0',
|
|
92
|
+
timestamp: new Date().toISOString(),
|
|
93
|
+
};
|
|
94
|
+
const formatted = formatHealthResponse(response);
|
|
95
|
+
expect(formatted.statusCode).toBe(200);
|
|
96
|
+
});
|
|
97
|
+
it('should return 503 for unhealthy status', () => {
|
|
98
|
+
const response = {
|
|
99
|
+
status: 'unhealthy',
|
|
100
|
+
uptime: 100,
|
|
101
|
+
version: '1.0.0',
|
|
102
|
+
timestamp: new Date().toISOString(),
|
|
103
|
+
};
|
|
104
|
+
const formatted = formatHealthResponse(response);
|
|
105
|
+
expect(formatted.statusCode).toBe(503);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe('Readiness Check (SMI-740)', () => {
|
|
110
|
+
let db;
|
|
111
|
+
beforeEach(() => {
|
|
112
|
+
db = new Database(':memory:');
|
|
113
|
+
db.exec('CREATE TABLE test (id INTEGER PRIMARY KEY)');
|
|
114
|
+
});
|
|
115
|
+
afterEach(() => {
|
|
116
|
+
db.close();
|
|
117
|
+
});
|
|
118
|
+
describe('ReadinessCheck class', () => {
|
|
119
|
+
it('should return ready when database is healthy', async () => {
|
|
120
|
+
const readinessCheck = new ReadinessCheck({ database: db });
|
|
121
|
+
const result = await readinessCheck.check();
|
|
122
|
+
expect(result.ready).toBe(true);
|
|
123
|
+
expect(result.statusCode).toBe(200);
|
|
124
|
+
expect(result.checks).toBeDefined();
|
|
125
|
+
expect(result.totalDuration).toBeGreaterThanOrEqual(0);
|
|
126
|
+
});
|
|
127
|
+
it('should check database connectivity', async () => {
|
|
128
|
+
const readinessCheck = new ReadinessCheck({ database: db });
|
|
129
|
+
const result = await readinessCheck.check();
|
|
130
|
+
const dbCheck = result.checks.find((c) => c.name === 'database');
|
|
131
|
+
expect(dbCheck).toBeDefined();
|
|
132
|
+
expect(dbCheck?.status).toBe('ok');
|
|
133
|
+
expect(dbCheck?.responseTime).toBeGreaterThanOrEqual(0);
|
|
134
|
+
});
|
|
135
|
+
it('should return degraded when database is not configured', async () => {
|
|
136
|
+
const readinessCheck = new ReadinessCheck();
|
|
137
|
+
const result = await readinessCheck.check();
|
|
138
|
+
const dbCheck = result.checks.find((c) => c.name === 'database');
|
|
139
|
+
expect(dbCheck?.status).toBe('degraded');
|
|
140
|
+
});
|
|
141
|
+
it('should return not ready when database fails', async () => {
|
|
142
|
+
// Close the database to simulate failure
|
|
143
|
+
const closedDb = new Database(':memory:');
|
|
144
|
+
closedDb.close();
|
|
145
|
+
const readinessCheck = new ReadinessCheck({ database: closedDb });
|
|
146
|
+
const result = await readinessCheck.check();
|
|
147
|
+
expect(result.ready).toBe(false);
|
|
148
|
+
expect(result.statusCode).toBe(503);
|
|
149
|
+
});
|
|
150
|
+
it('should check cache status', async () => {
|
|
151
|
+
const readinessCheck = new ReadinessCheck({
|
|
152
|
+
database: db,
|
|
153
|
+
cacheCheck: async () => true,
|
|
154
|
+
});
|
|
155
|
+
const result = await readinessCheck.check();
|
|
156
|
+
const cacheCheck = result.checks.find((c) => c.name === 'cache');
|
|
157
|
+
expect(cacheCheck).toBeDefined();
|
|
158
|
+
expect(cacheCheck?.status).toBe('ok');
|
|
159
|
+
});
|
|
160
|
+
it('should report cache failure', async () => {
|
|
161
|
+
const readinessCheck = new ReadinessCheck({
|
|
162
|
+
database: db,
|
|
163
|
+
cacheCheck: async () => false,
|
|
164
|
+
});
|
|
165
|
+
const result = await readinessCheck.check();
|
|
166
|
+
const cacheCheck = result.checks.find((c) => c.name === 'cache');
|
|
167
|
+
expect(cacheCheck?.status).toBe('unhealthy');
|
|
168
|
+
expect(result.ready).toBe(false);
|
|
169
|
+
});
|
|
170
|
+
it('should run custom checks', async () => {
|
|
171
|
+
const readinessCheck = new ReadinessCheck({
|
|
172
|
+
database: db,
|
|
173
|
+
customChecks: [
|
|
174
|
+
{
|
|
175
|
+
name: 'external-api',
|
|
176
|
+
check: async () => ({ ok: true, details: { endpoint: 'https://api.example.com' } }),
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
});
|
|
180
|
+
const result = await readinessCheck.check();
|
|
181
|
+
const customCheck = result.checks.find((c) => c.name === 'external-api');
|
|
182
|
+
expect(customCheck).toBeDefined();
|
|
183
|
+
expect(customCheck?.status).toBe('ok');
|
|
184
|
+
expect(customCheck?.details?.endpoint).toBe('https://api.example.com');
|
|
185
|
+
});
|
|
186
|
+
it('should handle custom check failures', async () => {
|
|
187
|
+
const readinessCheck = new ReadinessCheck({
|
|
188
|
+
database: db,
|
|
189
|
+
customChecks: [
|
|
190
|
+
{
|
|
191
|
+
name: 'failing-check',
|
|
192
|
+
check: async () => {
|
|
193
|
+
throw new Error('Connection refused');
|
|
194
|
+
},
|
|
195
|
+
critical: true,
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
});
|
|
199
|
+
const result = await readinessCheck.check();
|
|
200
|
+
const failingCheck = result.checks.find((c) => c.name === 'failing-check');
|
|
201
|
+
expect(failingCheck?.status).toBe('unhealthy');
|
|
202
|
+
expect(failingCheck?.error).toBe('Connection refused');
|
|
203
|
+
expect(result.ready).toBe(false);
|
|
204
|
+
});
|
|
205
|
+
it('should not fail on non-critical check failure', async () => {
|
|
206
|
+
const readinessCheck = new ReadinessCheck({
|
|
207
|
+
database: db,
|
|
208
|
+
customChecks: [
|
|
209
|
+
{
|
|
210
|
+
name: 'non-critical',
|
|
211
|
+
check: async () => ({ ok: false }),
|
|
212
|
+
critical: false,
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
});
|
|
216
|
+
const result = await readinessCheck.check();
|
|
217
|
+
// Database is ok, so overall should still be ready even with non-critical failure
|
|
218
|
+
expect(result.ready).toBe(true);
|
|
219
|
+
});
|
|
220
|
+
it('should add checks dynamically', async () => {
|
|
221
|
+
const readinessCheck = new ReadinessCheck({ database: db });
|
|
222
|
+
readinessCheck.addCheck('dynamic-check', async () => ({ ok: true, details: { added: 'dynamically' } }), false);
|
|
223
|
+
const result = await readinessCheck.check();
|
|
224
|
+
const dynamicCheck = result.checks.find((c) => c.name === 'dynamic-check');
|
|
225
|
+
expect(dynamicCheck).toBeDefined();
|
|
226
|
+
});
|
|
227
|
+
it('should set database after construction', async () => {
|
|
228
|
+
const readinessCheck = new ReadinessCheck();
|
|
229
|
+
readinessCheck.setDatabase(db);
|
|
230
|
+
const result = await readinessCheck.check();
|
|
231
|
+
const dbCheck = result.checks.find((c) => c.name === 'database');
|
|
232
|
+
expect(dbCheck?.status).toBe('ok');
|
|
233
|
+
});
|
|
234
|
+
it('should return boolean from isReady', async () => {
|
|
235
|
+
const readinessCheck = new ReadinessCheck({ database: db });
|
|
236
|
+
const isReady = await readinessCheck.isReady();
|
|
237
|
+
expect(typeof isReady).toBe('boolean');
|
|
238
|
+
expect(isReady).toBe(true);
|
|
239
|
+
});
|
|
240
|
+
it('should timeout slow checks', async () => {
|
|
241
|
+
const readinessCheck = new ReadinessCheck({
|
|
242
|
+
database: db,
|
|
243
|
+
checkTimeout: 100, // 100ms timeout
|
|
244
|
+
customChecks: [
|
|
245
|
+
{
|
|
246
|
+
name: 'slow-check',
|
|
247
|
+
check: async () => {
|
|
248
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
249
|
+
return { ok: true };
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
});
|
|
254
|
+
const result = await readinessCheck.check();
|
|
255
|
+
const slowCheck = result.checks.find((c) => c.name === 'slow-check');
|
|
256
|
+
expect(slowCheck?.status).toBe('unhealthy');
|
|
257
|
+
expect(slowCheck?.error).toContain('timed out');
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
describe('checkReadiness function', () => {
|
|
261
|
+
it('should use default readiness check instance', async () => {
|
|
262
|
+
const result = await checkReadiness();
|
|
263
|
+
expect(result.checks).toBeDefined();
|
|
264
|
+
expect(result.timestamp).toBeDefined();
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
describe('createReadinessCheck function', () => {
|
|
268
|
+
it('should create new instance with config', async () => {
|
|
269
|
+
const readinessCheck = createReadinessCheck({ database: db });
|
|
270
|
+
const result = await readinessCheck.check();
|
|
271
|
+
expect(result.ready).toBe(true);
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
describe('formatReadinessResponse', () => {
|
|
275
|
+
it('should return correct status codes', () => {
|
|
276
|
+
const readyResponse = {
|
|
277
|
+
ready: true,
|
|
278
|
+
statusCode: 200,
|
|
279
|
+
timestamp: new Date().toISOString(),
|
|
280
|
+
checks: [],
|
|
281
|
+
totalDuration: 10,
|
|
282
|
+
};
|
|
283
|
+
const notReadyResponse = {
|
|
284
|
+
ready: false,
|
|
285
|
+
statusCode: 503,
|
|
286
|
+
timestamp: new Date().toISOString(),
|
|
287
|
+
checks: [],
|
|
288
|
+
totalDuration: 10,
|
|
289
|
+
};
|
|
290
|
+
expect(formatReadinessResponse(readyResponse).statusCode).toBe(200);
|
|
291
|
+
expect(formatReadinessResponse(notReadyResponse).statusCode).toBe(503);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
describe('Combined Health and Readiness (SMI-740)', () => {
|
|
296
|
+
describe('checkAll function', () => {
|
|
297
|
+
it('should return both health and readiness', async () => {
|
|
298
|
+
const result = await checkAll();
|
|
299
|
+
expect(result.health).toBeDefined();
|
|
300
|
+
expect(result.health.status).toBeDefined();
|
|
301
|
+
expect(result.health.uptime).toBeGreaterThanOrEqual(0);
|
|
302
|
+
expect(result.readiness).toBeDefined();
|
|
303
|
+
expect(result.readiness.checks).toBeDefined();
|
|
304
|
+
expect(result.readiness.timestamp).toBeDefined();
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
//# sourceMappingURL=health.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.test.js","sourceRoot":"","sources":["../../tests/health.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.integration.test.d.ts","sourceRoot":"","sources":["../../../tests/integration/analyze.integration.test.ts"],"names":[],"mappings":""}
|