From f8dd687c32b7e74b94ec3b31dca2d827aa9af9c2 Mon Sep 17 00:00:00 2001 From: Scrum4Me Agent <30029041+madhura68@users.noreply.github.com> Date: Fri, 15 May 2026 03:48:24 +0200 Subject: [PATCH] feat(user-settings): voeg IdeasListPrefs schema toe met filterStatuses Nieuw IdeasListPrefs-subschema met filterStatuses (array van IdeaStatusApi-waarden), ingehangen als views.ideasList in ViewsPrefs. Testdekking voor geldig, ongeldig en leeg filterStatuses. Co-Authored-By: Claude Sonnet 4.6 --- __tests__/lib/user-settings.test.ts | 11 +++++++++++ lib/user-settings.ts | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/__tests__/lib/user-settings.test.ts b/__tests__/lib/user-settings.test.ts index d62648a..2e694d7 100644 --- a/__tests__/lib/user-settings.test.ts +++ b/__tests__/lib/user-settings.test.ts @@ -108,6 +108,7 @@ describe('UserSettingsSchema', () => { storyPanel: { sort: 'date' }, jobsColumns: { 'queue:active': { kinds: ['TASK_IMPLEMENTATION'], statuses: [] } }, jobs: { timeFilter: '24h' }, + ideasList: { filterStatuses: ['draft', 'planned'] }, }, devTools: { debugMode: true }, layout: { @@ -185,6 +186,16 @@ describe('UserSettingsSchema', () => { expect(result.success).toBe(false) }) + it('rejects an invalid ideasList.filterStatuses value', () => { + const result = UserSettingsSchema.safeParse({ views: { ideasList: { filterStatuses: ['BOGUS'] } } }) + expect(result.success).toBe(false) + }) + + it('accepts an empty ideasList.filterStatuses array', () => { + const result = UserSettingsSchema.safeParse({ views: { ideasList: { filterStatuses: [] } } }) + expect(result.success).toBe(true) + }) + it('rejects unknown intent value', () => { const result = UserSettingsSchema.safeParse({ workflow: { diff --git a/lib/user-settings.ts b/lib/user-settings.ts index e294dc9..7137006 100644 --- a/lib/user-settings.ts +++ b/lib/user-settings.ts @@ -1,5 +1,6 @@ import { z } from 'zod' import { JOBS_TIME_FILTER_VALUES } from '@/lib/jobs-time-filter' +import { IDEA_STATUS_API_VALUES, type IdeaStatusApi } from '@/lib/idea-status' const PriorityFilter = z.union([ z.number().int().min(1).max(4), @@ -37,12 +38,19 @@ const JobsViewPrefs = z.object({ timeFilter: z.enum(JOBS_TIME_FILTER_VALUES).optional(), }).strict() +const IdeasListPrefs = z.object({ + filterStatuses: z.array( + z.enum(IDEA_STATUS_API_VALUES as [IdeaStatusApi, ...IdeaStatusApi[]]) + ).optional(), +}).strict() + const ViewsPrefs = z.object({ sprintBacklog: SprintBacklogPrefs.optional(), pbiList: PbiListPrefs.optional(), storyPanel: StoryPanelPrefs.optional(), jobsColumns: z.record(z.string(), JobsColumnPrefs).optional(), jobs: JobsViewPrefs.optional(), + ideasList: IdeasListPrefs.optional(), }).strict() const DevToolsPrefs = z.object({