/** * Build Stream Tests * Tests build execution without actual long-running builds */ import { describe, expect, test } from 'bun:test'; import { executeBuildWithProgress } from './build-stream'; describe('executeBuildWithProgress', () => { test('executes successful command', async () => { const result = await executeBuildWithProgress({ command: 'echo', args: ['hello world'], cwd: process.cwd(), }); expect(result.success).toBe(true); expect(result.exitCode).toBe(0); expect(result.output).toContain('hello world'); }); test('captures command output', async () => { const result = await executeBuildWithProgress({ command: 'echo', args: ['test output line 1'], cwd: process.cwd(), }); expect(result.success).toBe(true); expect(result.output).toContain('test output line 1'); }); test('handles command failure', async () => { const result = await executeBuildWithProgress({ command: 'sh', args: ['-c', 'echo error message >&2 && exit 1'], cwd: process.cwd(), }); expect(result.success).toBe(false); expect(result.exitCode).toBe(1); expect(result.error).toContain('exited with code 1'); }); test('handles non-existent command', async () => { const result = await executeBuildWithProgress({ command: 'nonexistent-command-xyz', args: [], cwd: process.cwd(), }); expect(result.success).toBe(false); expect(result.exitCode).toBe(127); // Shell returns 127 for "command not found" expect(result.error).toBeTruthy(); }); test('calls onOutput callback', async () => { const outputLines: string[] = []; await executeBuildWithProgress({ command: 'echo', args: ['callback test'], cwd: process.cwd(), onOutput: (line) => { outputLines.push(line); }, }); expect(outputLines.length).toBeGreaterThan(0); expect(outputLines.join('')).toContain('callback test'); }); test('captures stderr separately', async () => { const result = await executeBuildWithProgress({ command: 'echo stdout && echo stderr >&2', args: [], cwd: process.cwd(), }); expect(result.success).toBe(true); expect(result.output).toContain('stdout'); expect(result.output).toContain('stderr'); }); test('handles multi-line output', async () => { const result = await executeBuildWithProgress({ command: 'echo line1 && echo line2 && echo line3', args: [], cwd: process.cwd(), }); expect(result.success).toBe(true); expect(result.output).toContain('line1'); expect(result.output).toContain('line2'); expect(result.output).toContain('line3'); }); test('uses specified working directory', async () => { const result = await executeBuildWithProgress({ command: 'pwd', args: [], cwd: '/tmp', }); expect(result.success).toBe(true); expect(result.output).toContain('/tmp'); }); test('passes environment variables', async () => { const result = await executeBuildWithProgress({ command: 'echo $TEST_VAR', args: [], cwd: process.cwd(), env: { TEST_VAR: 'custom value', }, }); expect(result.success).toBe(true); expect(result.output).toContain('custom value'); }); });