import { test } from 'node:test' import assert from 'node:assert/strict' import { runVerify, verifyCommandFor, summariseVerify } from '../src/verify.mjs' test('verifyCommandFor prefers the stage command over the global default', () => { assert.equal(verifyCommandFor({ verify: 'pnpm test' }, { verify: 'global' }), 'pnpm test') assert.equal(verifyCommandFor({}, { verify: 'global' }), 'global') assert.equal(verifyCommandFor({}, {}), null) }) test('verifyCommandFor unwraps inline-code backticks from a verify value', () => { // `:: verify: \`pnpm test\`` must run `pnpm test`, not a command substitution // whose stdout ("Test run for …") is then executed as a command (exit 127). assert.equal(verifyCommandFor({ verify: '`pnpm test`' }, {}), 'pnpm test') assert.equal(verifyCommandFor({}, { verify: '`node --test`' }), 'node --test') // An inner pair of backticks is legitimate shell syntax: leave it alone. assert.equal(verifyCommandFor({ verify: 'echo "`date`"' }, {}), 'echo "`date`"') }) test('runVerify reports success and captures output', async () => { const res = await runVerify({ command: 'echo hello-verify', cwd: process.cwd() }) assert.equal(res.ok, true) assert.equal(res.exitCode, 0) assert.match(res.output, /hello-verify/) }) test('runVerify reports a non-zero exit as failure', async () => { const res = await runVerify({ command: 'exit 7', cwd: process.cwd() }) assert.equal(res.ok, false) assert.equal(res.exitCode, 7) assert.match(summariseVerify(res), /FAILED \(exit 7\)/) }) test('runVerify times out and kills a hanging command', async () => { const res = await runVerify({ command: 'sleep 5', cwd: process.cwd(), timeoutMs: 300 }) assert.equal(res.ok, false) assert.equal(res.timedOut, true) assert.match(summariseVerify(res), /TIMED OUT/) })