bug
CI/CD Pipeline / Build and Push PocketBase Docker Image (push) Successful in 8s
CI/CD Pipeline / i18n Catalog Check (push) Successful in 30s
CI/CD Pipeline / Build and Push App Docker Image (push) Successful in 2m3s
CI/CD Pipeline / Deploy to Kubernetes (push) Successful in 8m27s

This commit is contained in:
2026-08-25 21:54:50 -07:00
parent 15aeb64b19
commit 4af4a65527
4 changed files with 34 additions and 10 deletions
+9
View File
@@ -0,0 +1,9 @@
import { describe, expect, it } from "vitest";
import { matchInputSchema } from "./types";
describe("matchInputSchema.partial()", () => {
it("does not inject keys the caller did not send", () => {
const parsed = matchInputSchema.partial().parse({ home_cups: 7 });
expect(parsed).toEqual({ home_cups: 7 });
});
});
+9 -9
View File
@@ -42,20 +42,20 @@ export interface Match {
export const matchInputSchema = z.object({ export const matchInputSchema = z.object({
order: z.number().int().min(1).optional(), order: z.number().int().min(1).optional(),
lid: z.number().int().min(1), lid: z.number().int().min(1),
reset: z.boolean().optional().default(false), reset: z.boolean().optional(),
round: z.number().int().min(1), round: z.number().int().min(1),
home_cups: z.number().int().min(0).optional().default(0), home_cups: z.number().int().min(0).optional(),
away_cups: z.number().int().min(0).optional().default(0), away_cups: z.number().int().min(0).optional(),
ot_count: z.number().int().min(0).optional().default(0), ot_count: z.number().int().min(0).optional(),
start_time: z.iso.datetime().optional(), start_time: z.iso.datetime().optional(),
end_time: z.iso.datetime().optional(), end_time: z.iso.datetime().optional(),
bye: z.boolean().optional().default(false), bye: z.boolean().optional(),
home_from_lid: z.number().int().min(1).optional(), home_from_lid: z.number().int().min(1).optional(),
away_from_lid: z.number().int().min(1).optional(), away_from_lid: z.number().int().min(1).optional(),
home_from_loser: z.boolean().optional().default(false), home_from_loser: z.boolean().optional(),
away_from_loser: z.boolean().optional().default(false), away_from_loser: z.boolean().optional(),
is_losers_bracket: z.boolean().optional().default(false), is_losers_bracket: z.boolean().optional(),
status: z.enum(["tbd", "ready", "started", "ended"]).optional().default("tbd"), status: z.enum(["tbd", "ready", "started", "ended"]).optional(),
tournament: z.string().min(1), tournament: z.string().min(1),
home: z.string().min(1).nullable().optional(), home: z.string().min(1).nullable().optional(),
away: z.string().min(1).nullable().optional(), away: z.string().min(1).nullable().optional(),
+15
View File
@@ -0,0 +1,15 @@
import { describe, expect, it } from "vitest";
import { tournamentInputSchema } from "./types";
describe("tournamentInputSchema.partial()", () => {
it("does not inject keys the caller did not send", () => {
const parsed = tournamentInputSchema.partial().parse({ rules: "<p>rules</p>" });
expect(parsed).toEqual({ rules: "<p>rules</p>" });
});
it("passes an explicit regional flag through unchanged", () => {
expect(tournamentInputSchema.partial().parse({ regional: true })).toEqual({
regional: true,
});
});
});
+1 -1
View File
@@ -98,7 +98,7 @@ export const tournamentInputSchema = z.object({
enroll_time: z.string(), enroll_time: z.string(),
start_time: z.string(), start_time: z.string(),
end_time: z.string().optional(), end_time: z.string().optional(),
regional: z.boolean().optional().default(false), regional: z.boolean().optional(),
format: z.enum(["single_elim", "double_elim", "groups", "swiss", "swiss_bracket", "round_robin"]).optional(), format: z.enum(["single_elim", "double_elim", "groups", "swiss", "swiss_bracket", "round_robin"]).optional(),
phase: z.enum(["seeding", "group_stage", "knockout", "completed"]).optional(), phase: z.enum(["seeding", "group_stage", "knockout", "completed"]).optional(),
group_config: z.object({ group_config: z.object({