← Public packages
@kentcdodds/ship-pr
Progressive ship-pr loop for agents: PR status, Bugbot, review sort, 7-day decisions, merge, deploy, wrap-up.
src/input.test.ts
21 lines · 1.3 KB · TypeScriptimport assert from 'node:assert/strict'
import test from 'node:test'
import { oneOf } from './input.ts'
test('oneOf matches case-insensitively and returns the canonical spelling', () => {
const difficulties = ['Easy', 'Medium', 'Hard'] as const
assert.equal(oneOf({ difficulty: 'medium' }, 'difficulty', difficulties, 'x'), 'Medium')
assert.equal(oneOf({ difficulty: ' HARD ' }, 'difficulty', difficulties, 'x'), 'Hard')
assert.equal(oneOf({ d: 'Accepted' }, 'd', ['ignored', 'accepted'] as const, 'x'), 'accepted')
assert.equal(oneOf({}, 'difficulty', difficulties, 'x'), undefined)
assert.throws(() => oneOf({ d: 'done' }, 'd', ['ignored', 'skipped', 'wontfix', 'accepted'] as const, 'x', true), /must be one of ignored \| skipped \| wontfix \| accepted; got "done"/)
})
test('oneOf canonicalizes risk and disposition casing the same way', () => {
assert.equal(oneOf({ risk: 'MEDIUM' }, 'risk', ['low', 'medium', 'high'] as const, 'x', true), 'medium')
assert.equal(oneOf({ disposition: 'WONTFIX' }, 'disposition', ['ignored', 'skipped', 'wontfix', 'accepted'] as const, 'x', true), 'wontfix')
assert.throws(
() => oneOf({ difficulty: 'extreme' }, 'difficulty', ['Easy', 'Medium', 'Hard'] as const, 'send-summary', true),
/must be one of Easy \| Medium \| Hard; got "extreme"/,
)
})