From 529da3621d85c3e6036ac2699f41a640dca1b9de Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Thu, 6 Aug 2026 11:43:10 +0700 Subject: [PATCH] feat(schema): allow single-entry wheels --- renderer/src/schemas/wheel-request.js | 2 +- renderer/test/gif-route.test.js | 2 +- renderer/test/render-local-args.test.js | 2 +- renderer/test/wheel-request.test.js | 10 ++++++++++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/renderer/src/schemas/wheel-request.js b/renderer/src/schemas/wheel-request.js index 4171bc7..042da97 100644 --- a/renderer/src/schemas/wheel-request.js +++ b/renderer/src/schemas/wheel-request.js @@ -34,7 +34,7 @@ export const createWheelRequestSchema = (limits) => .pipe( z .array(z.string().min(1).max(limits.maxOptionChars)) - .min(2) + .min(1) .max(limits.maxOptions), ), winnerIndex: z.number().int().nonnegative().optional(), diff --git a/renderer/test/gif-route.test.js b/renderer/test/gif-route.test.js index fca2e51..c44248c 100644 --- a/renderer/test/gif-route.test.js +++ b/renderer/test/gif-route.test.js @@ -56,7 +56,7 @@ describe('POST /api/gif', () => { method: 'POST', url: '/api/gif', payload: { - options: ['only one'], + options: [], }, }); diff --git a/renderer/test/render-local-args.test.js b/renderer/test/render-local-args.test.js index 18cc2df..3b2831b 100644 --- a/renderer/test/render-local-args.test.js +++ b/renderer/test/render-local-args.test.js @@ -62,7 +62,7 @@ describe('parseRenderLocalArgs', () => { }); test('rejects missing options and invalid integer flags', () => { - expect(() => parseRenderLocalArgs(['--option', 'alpha'])).toThrow(); + expect(() => parseRenderLocalArgs([])).toThrow(); expect(() => parseRenderLocalArgs(['--option', 'alpha', '--option', 'beta', '--winner', '1.5']), ).toThrow('--winner must be an integer'); diff --git a/renderer/test/wheel-request.test.js b/renderer/test/wheel-request.test.js index c1c2cd1..2678803 100644 --- a/renderer/test/wheel-request.test.js +++ b/renderer/test/wheel-request.test.js @@ -36,6 +36,16 @@ describe('parseWheelRequest', () => { ).toThrow(); }); + test('accepts a single option', () => { + const request = parseWheelRequest({options: ['solo']}, limits, () => 0); + expect(request.options).toEqual(['solo']); + expect(request.winnerIndex).toBe(0); + }); + + test('rejects empty options', () => { + expect(() => parseWheelRequest({options: []}, limits, () => 0)).toThrow(); + }); + test('selects winner when omitted', () => { const request = parseWheelRequest({options: ['a', 'b']}, limits, () => 1); expect(request.winnerIndex).toBe(1);