import 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"/, ) })