diff --git a/app/gateway-api/src/scenario/scenarioCatalog.ts b/app/gateway-api/src/scenario/scenarioCatalog.ts index cd5a266..0a3b303 100644 --- a/app/gateway-api/src/scenario/scenarioCatalog.ts +++ b/app/gateway-api/src/scenario/scenarioCatalog.ts @@ -62,6 +62,9 @@ const runGit = (args: string[]): Promise<{ ok: boolean; output: string }> => child.stderr.on('data', (chunk) => { output += chunk.toString(); }); + child.on('error', (error) => { + resolve({ ok: false, output: `${output}${error.message}` }); + }); child.on('close', (code) => { resolve({ ok: code === 0, output }); }); @@ -308,7 +311,10 @@ export const listScenarioPreviews = async (options?: { gitRef?: string | null }) return cached.data; } const ids = await listScenarioIdsFromGit(commitSha); - const previews = await Promise.all(ids.map((id) => buildScenarioPreviewFromGit(commitSha, id))); + const previews: ScenarioPreview[] = []; + for (const id of ids) { + previews.push(await buildScenarioPreviewFromGit(commitSha, id)); + } previewCache.set(cacheKey, { loadedAt: Date.now(), data: previews, diff --git a/app/gateway-api/test/scenarioCatalog.test.ts b/app/gateway-api/test/scenarioCatalog.test.ts index 0fbc865..2fbabb1 100644 --- a/app/gateway-api/test/scenarioCatalog.test.ts +++ b/app/gateway-api/test/scenarioCatalog.test.ts @@ -15,4 +15,14 @@ describe('scenarioCatalog git ref support', () => { const sorted = [...ids].sort((a, b) => a - b); expect(ids).toEqual(sorted); }); + + it('rejects without crashing when git cannot be spawned', async () => { + const originalPath = process.env.PATH; + process.env.PATH = '/nonexistent'; + try { + await expect(resolveGitCommitSha('HEAD')).rejects.toThrow('git ref not found.'); + } finally { + process.env.PATH = originalPath; + } + }); });