Skip to content

Commit a7529ba

Browse files
Fix extension panel manual add validation
1 parent 0ddcf70 commit a7529ba

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/lib/validation.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,26 @@ export const extensionPlaylistMutationSchema = z.discriminatedUnion("action", [
414414
action: z.literal("deleteItem"),
415415
itemId: z.string().trim().min(1).max(80),
416416
}),
417+
z.object({
418+
action: z.literal("manualAdd"),
419+
songId: z.string().trim().min(1).max(80),
420+
requesterLogin: z.string().trim().min(2).max(25).optional(),
421+
requesterTwitchUserId: z.string().trim().min(1).max(50).optional(),
422+
requesterDisplayName: z.string().trim().min(1).max(100).optional(),
423+
title: z.string().trim().min(1).max(200),
424+
authorId: z.number().int().positive().optional(),
425+
groupedProjectId: z.number().int().positive().optional(),
426+
artist: z.string().trim().min(1).max(200).optional(),
427+
album: z.string().trim().min(1).max(200).optional(),
428+
creator: z.string().trim().min(1).max(200).optional(),
429+
tuning: z.string().trim().min(1).max(200).optional(),
430+
parts: z.array(z.string().trim().min(1).max(50)).max(20).optional(),
431+
durationText: z.string().trim().min(1).max(20).optional(),
432+
source: z.string().trim().min(1).max(50),
433+
sourceUrl: z.string().url().optional(),
434+
sourceId: z.number().int().positive().optional(),
435+
candidateMatchesJson: z.string().trim().min(2).max(20_000).optional(),
436+
}),
417437
z.object({
418438
action: z.literal("changeRequestKind"),
419439
itemId: z.string().trim().min(1).max(80),
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { describe, expect, it } from "vitest";
2+
import { extensionPlaylistMutationSchema } from "~/lib/validation";
3+
4+
describe("extensionPlaylistMutationSchema", () => {
5+
it("accepts manager manual-add payloads from the Twitch panel", () => {
6+
const parsed = extensionPlaylistMutationSchema.safeParse({
7+
action: "manualAdd",
8+
songId: "cat_c8f25ebdd52c4f08a2b647c023b0ae3f",
9+
requesterLogin: "jimmy_pants_",
10+
requesterTwitchUserId: "172957013",
11+
requesterDisplayName: "Jimmy_Pants_",
12+
title: "On My Soul",
13+
authorId: 282415,
14+
artist: "Bruno Mars",
15+
album: "The Romantic",
16+
creator: "Djpavs",
17+
tuning: "E Standard",
18+
parts: ["lead", "rhythm", "bass", "voice"],
19+
durationText: "2:54",
20+
source: "library",
21+
sourceUrl: "https://ignition4.customsforge.com/cdlc/99078",
22+
sourceId: 99078,
23+
candidateMatchesJson:
24+
'[{"id":"cat_c8f25ebdd52c4f08a2b647c023b0ae3f","artist":"Bruno Mars"}]',
25+
});
26+
27+
expect(parsed.success).toBe(true);
28+
});
29+
});

0 commit comments

Comments
 (0)