mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
feat(shared): make collab note optional fields nullable in the request contracts
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import {
|
||||
collabNoteCreateRequestSchema,
|
||||
collabNoteUpdateRequestSchema,
|
||||
collabPollCreateRequestSchema,
|
||||
collabPollVoteRequestSchema,
|
||||
collabMessageCreateRequestSchema,
|
||||
@@ -14,6 +15,35 @@ describe('collabNoteCreateRequestSchema', () => {
|
||||
expect(collabNoteCreateRequestSchema.safeParse({ title: '' }).success).toBe(false);
|
||||
expect(collabNoteCreateRequestSchema.safeParse({}).success).toBe(false);
|
||||
});
|
||||
|
||||
it('accepts explicit null for the optional fields (desktop null-clearing)', () => {
|
||||
expect(
|
||||
collabNoteCreateRequestSchema.safeParse({
|
||||
title: 'Idea',
|
||||
content: 'Body',
|
||||
category: null,
|
||||
color: '#6366f1',
|
||||
website: null,
|
||||
}).success,
|
||||
).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('collabNoteUpdateRequestSchema', () => {
|
||||
it('accepts explicit null for the optional fields (desktop null-clearing)', () => {
|
||||
expect(
|
||||
collabNoteUpdateRequestSchema.safeParse({
|
||||
title: 'Idea',
|
||||
content: null,
|
||||
category: null,
|
||||
color: null,
|
||||
website: null,
|
||||
pinned: 1,
|
||||
}).success,
|
||||
).toBe(true);
|
||||
expect(collabNoteUpdateRequestSchema.safeParse({ pinned: true }).success).toBe(true);
|
||||
expect(collabNoteUpdateRequestSchema.safeParse({ title: null }).success).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('collabPollCreateRequestSchema', () => {
|
||||
|
||||
@@ -13,20 +13,24 @@ import { z } from 'zod';
|
||||
|
||||
export const collabNoteCreateRequestSchema = z.object({
|
||||
title: z.string().min(1),
|
||||
content: z.string().optional(),
|
||||
category: z.string().optional(),
|
||||
color: z.string().optional(),
|
||||
website: z.string().optional(),
|
||||
// The desktop notes form clears optional fields by sending explicit null
|
||||
// (the service coerces falsy to its defaults), so they are all nullable.
|
||||
content: z.string().nullable().optional(),
|
||||
category: z.string().nullable().optional(),
|
||||
color: z.string().nullable().optional(),
|
||||
website: z.string().nullable().optional(),
|
||||
});
|
||||
export type CollabNoteCreateRequest = z.infer<typeof collabNoteCreateRequestSchema>;
|
||||
|
||||
export const collabNoteUpdateRequestSchema = z.object({
|
||||
title: z.string().optional(),
|
||||
content: z.string().optional(),
|
||||
category: z.string().optional(),
|
||||
color: z.string().optional(),
|
||||
// Same null-clearing protocol as create (the desktop form resends the whole
|
||||
// note object, with cleared fields as explicit null).
|
||||
content: z.string().nullable().optional(),
|
||||
category: z.string().nullable().optional(),
|
||||
color: z.string().nullable().optional(),
|
||||
pinned: z.union([z.boolean(), z.number()]).optional(),
|
||||
website: z.string().optional(),
|
||||
website: z.string().nullable().optional(),
|
||||
});
|
||||
export type CollabNoteUpdateRequest = z.infer<typeof collabNoteUpdateRequestSchema>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user