import { describe, expect, test } from 'bun:test'; import { translateOutputLine } from '@celilo/core'; describe('translateOutputLine', () => { test('start marker → progress start', () => { expect(translateOutputLine('[progress:start] Deploying caddy | Deployed caddy')).toEqual({ type: 'progress', kind: 'start', doing: 'Deploying caddy', done: 'Deployed caddy', }); }); test('push marker → progress push', () => { expect(translateOutputLine('[progress:push] Sub step | Sub done')).toEqual({ type: 'progress', kind: 'push', doing: 'Sub step', done: 'Sub done', }); }); test('done marker with override message', () => { expect(translateOutputLine('[progress:done] all good')).toEqual({ type: 'progress', kind: 'done', message: 'all good', }); }); test('done marker without message', () => { expect(translateOutputLine('[progress:done]')).toEqual({ type: 'progress', kind: 'done', message: undefined, }); }); test('fail marker → progress fail', () => { expect(translateOutputLine('[progress:fail] it broke')).toEqual({ type: 'progress', kind: 'fail', message: 'it broke', }); }); test('sub marker → progress sub', () => { expect(translateOutputLine('[progress:sub] running terraform')).toEqual({ type: 'progress', kind: 'sub', message: 'running terraform', }); }); test('legacy instant marker → progress message', () => { expect(translateOutputLine('[progress] heads up')).toEqual({ type: 'progress', kind: 'message', message: 'heads up', }); }); test('plain line → log', () => { expect(translateOutputLine('just some output')).toEqual({ type: 'log', message: 'just some output', }); }); test('a line that only resembles a marker → log', () => { expect(translateOutputLine('see [progress:start] in the docs')).toEqual({ type: 'log', message: 'see [progress:start] in the docs', }); }); });