clawdie-ai/setup/status.test.ts
Clawdie AI bd61a5ab94 test: add setup and upstream module unit tests
103 new tests across 7 files:
- setup/status: emitStatus output structure
- setup/packages: loadPackageList (real files), loadAllPackageLists
- setup/tailscale: maybeEnableTailscaleInJail enabled/disabled/pkg-fail paths
- setup/bastille-helpers: bastille(), jailRoot, jailExists, resolveJailName
- setup/hosts: syncLocalHosts with jail discovery and skip logic
- src/upstream/classify: classifyUpstreamFiles, classificationHint, summarizeCommit
- src/upstream/git: getUpstreamConfig, isGitRepo, listRemotes, readEnvFlag/writeEnvFlag, countCommitsBetween, listCommitHashes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---
Build: FAIL | Tests: pass — Tests  1493 passed (1493)
2026-04-15 05:32:50 +00:00

65 lines
1.9 KiB
TypeScript

/**
* setup/status.test.ts — emitStatus unit tests.
*
* Run with: npx vitest run setup/status.test.ts
*/
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import { emitStatus } from './status.js';
describe('emitStatus', () => {
let consoleSpy: ReturnType<typeof vi.spyOn>;
beforeEach(() => {
consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});
});
afterEach(() => {
consoleSpy.mockRestore();
});
it('outputs a header line with the step name', () => {
emitStatus('MY_STEP', {});
const output = consoleSpy.mock.calls[0][0] as string;
expect(output).toContain('MY_STEP');
expect(output).toContain('CLAWDIE SETUP');
});
it('outputs an END marker', () => {
emitStatus('MY_STEP', {});
const output = consoleSpy.mock.calls[0][0] as string;
expect(output).toContain('=== END ===');
});
it('includes each key=value pair', () => {
emitStatus('TEST', { STATUS: 'success', COUNT: 3, FLAG: true });
const output = consoleSpy.mock.calls[0][0] as string;
expect(output).toContain('STATUS: success');
expect(output).toContain('COUNT: 3');
expect(output).toContain('FLAG: true');
});
it('handles empty fields object', () => {
emitStatus('EMPTY', {});
const output = consoleSpy.mock.calls[0][0] as string;
expect(output).toContain('EMPTY');
expect(output).toContain('=== END ===');
});
it('calls console.log exactly once', () => {
emitStatus('STEP', { A: '1' });
expect(consoleSpy).toHaveBeenCalledOnce();
});
it('handles number values', () => {
emitStatus('NUMS', { X: 42, Y: 0 });
const output = consoleSpy.mock.calls[0][0] as string;
expect(output).toContain('X: 42');
expect(output).toContain('Y: 0');
});
it('handles boolean false', () => {
emitStatus('BOOLS', { ENABLED: false });
const output = consoleSpy.mock.calls[0][0] as string;
expect(output).toContain('ENABLED: false');
});
});