diff --git a/api/src/controllers/seed/index.ts b/api/src/controllers/seed/index.ts index 8a5dac11..9926f37d 100644 --- a/api/src/controllers/seed/index.ts +++ b/api/src/controllers/seed/index.ts @@ -17,8 +17,9 @@ export const seed = new Elysia() const err = validateTranslations(body.translations); if (err) return error(400, err); - const { status, ...ret } = await seedMovie(body); - return error(status, ret); + const ret = await seedMovie(body); + if (ret.status === 422) return error(422, ret); + return error(ret.status, ret); }, { body: "seed-movie", diff --git a/api/src/controllers/seed/movies.ts b/api/src/controllers/seed/movies.ts index d4b36771..396fcd27 100644 --- a/api/src/controllers/seed/movies.ts +++ b/api/src/controllers/seed/movies.ts @@ -30,18 +30,22 @@ export type SeedMovieResponse = typeof SeedMovieResponse.static; export const seedMovie = async ( seed: SeedMovie, -): Promise => { - const { translations, videos: vids, ...bMovie } = seed; - +): Promise< + | (SeedMovieResponse & { status: "Created" | "OK" | "Conflict" }) + | { status: 422; message: string } +> => { if (seed.slug === "random") { - if (seed.airDate === null) { - throw new KErrorT("`random` is a reserved slug. Use something else."); + if (!seed.airDate) { + return { + status: 422, + message: "`random` is a reserved slug. Use something else.", + }; } seed.slug = `random-${getYear(seed.airDate)}`; } + const { translations, videos: vids, ...bMovie } = seed; + const ret = await db.transaction(async (tx) => { const movie: Show = { kind: "movie", diff --git a/api/tests/movies/seed-movies.test.ts b/api/tests/movies/seed-movies.test.ts index cb32428a..827072d3 100644 --- a/api/tests/movies/seed-movies.test.ts +++ b/api/tests/movies/seed-movies.test.ts @@ -192,6 +192,16 @@ describe("Movie seeding", () => { }); }); + it("Refuses random as a slug", async () => { + const [resp, body] = await createMovie({ ...bubble, slug: "random", airDate: null }); + expectStatus(resp, body).toBe(422); + }); + it("Refuses random as a slug but fallback w/ airDate", async () => { + const [resp, body] = await createMovie({ ...bubble, slug: "random" }); + expectStatus(resp, body).toBe(201); + expect(body.slug).toBe("random-2022"); + }); + test.todo("Create correct video slug (version)", async () => {}); test.todo("Create correct video slug (part)", async () => {}); test.todo("Create correct video slug (rendering)", async () => {});