mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-31 14:33:50 -04:00
Add tests for /videos/:id
This commit is contained in:
parent
dc0c412eda
commit
f99a144bc4
@ -266,6 +266,81 @@ export const madeInAbyss = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
kind: "episode",
|
||||||
|
order: 15,
|
||||||
|
seasonNumber: 2,
|
||||||
|
episodeNumber: 2,
|
||||||
|
translations: {
|
||||||
|
en: {
|
||||||
|
name: " Resurrection Festival ",
|
||||||
|
description:
|
||||||
|
"Riko and Reg find out more about their past but the question still remains, who or what exactly is Reg?",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
runtime: 23,
|
||||||
|
airDate: "2022-07-06",
|
||||||
|
thumbnail:
|
||||||
|
"https://artworks.thetvdb.com/banners/episodes/326109/6174129.jpg",
|
||||||
|
externalId: {
|
||||||
|
themoviedatabase: {
|
||||||
|
serieId: "72636",
|
||||||
|
season: 2,
|
||||||
|
episode: 2,
|
||||||
|
link: "https://www.themoviedb.org/tv/72636/season/2/episode/2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: "episode",
|
||||||
|
order: 16,
|
||||||
|
seasonNumber: 2,
|
||||||
|
episodeNumber: 3,
|
||||||
|
translations: {
|
||||||
|
en: {
|
||||||
|
name: "Departure",
|
||||||
|
description:
|
||||||
|
"Reg goes on his first cave raid! Meanwhile, Riko makes preparations to go into the abyss to find her mother.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
runtime: 23,
|
||||||
|
airDate: "2022-07-06",
|
||||||
|
thumbnail:
|
||||||
|
"https://artworks.thetvdb.com/banners/episodes/326109/6180539.jpg",
|
||||||
|
externalId: {
|
||||||
|
themoviedatabase: {
|
||||||
|
serieId: "72636",
|
||||||
|
season: 2,
|
||||||
|
episode: 3,
|
||||||
|
link: "https://www.themoviedb.org/tv/72636/season/2/episode/4",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: "episode",
|
||||||
|
order: 17,
|
||||||
|
seasonNumber: 2,
|
||||||
|
episodeNumber: 4,
|
||||||
|
translations: {
|
||||||
|
en: {
|
||||||
|
name: "The Edge of the Abyss",
|
||||||
|
description:
|
||||||
|
"Riko and Reg start their adventure into the Abyss, while there they run into an unexpected familiar face.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
runtime: 23,
|
||||||
|
airDate: "2022-07-06",
|
||||||
|
thumbnail:
|
||||||
|
"https://artworks.thetvdb.com/banners/episodes/326109/6180540.jpg",
|
||||||
|
externalId: {
|
||||||
|
themoviedatabase: {
|
||||||
|
serieId: "72636",
|
||||||
|
season: 2,
|
||||||
|
episode: 4,
|
||||||
|
link: "https://www.themoviedb.org/tv/72636/season/2/episode/4",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
extras: [
|
extras: [
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,25 @@ export const getVideos = async () => {
|
|||||||
return [resp, body] as const;
|
return [resp, body] as const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getVideo = async (
|
||||||
|
id: string,
|
||||||
|
{ langs, ...query }: { langs?: string; with?: string[] },
|
||||||
|
) => {
|
||||||
|
const resp = await handlers.handle(
|
||||||
|
new Request(buildUrl(`videos/${id}`, query), {
|
||||||
|
method: "GET",
|
||||||
|
headers: langs
|
||||||
|
? {
|
||||||
|
"Accept-Language": langs,
|
||||||
|
...(await getJwtHeaders()),
|
||||||
|
}
|
||||||
|
: await getJwtHeaders(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
const body = await resp.json();
|
||||||
|
return [resp, body] as const;
|
||||||
|
};
|
||||||
|
|
||||||
export const deleteVideo = async (paths: string[]) => {
|
export const deleteVideo = async (paths: string[]) => {
|
||||||
const resp = await handlers.handle(
|
const resp = await handlers.handle(
|
||||||
new Request(buildUrl("videos"), {
|
new Request(buildUrl("videos"), {
|
||||||
|
204
api/tests/videos/get-id.test.ts
Normal file
204
api/tests/videos/get-id.test.ts
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
import { beforeAll, describe, expect, it } from "bun:test";
|
||||||
|
import { createSerie, createVideo, getVideo } from "tests/helpers";
|
||||||
|
import { expectStatus } from "tests/utils";
|
||||||
|
import { db } from "~/db";
|
||||||
|
import { shows, videos } from "~/db/schema";
|
||||||
|
import { madeInAbyss } from "~/models/examples";
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
await db.delete(shows);
|
||||||
|
const [ret, _] = await createSerie(madeInAbyss);
|
||||||
|
expect(ret.status).toBe(201);
|
||||||
|
await db.delete(videos);
|
||||||
|
|
||||||
|
await createVideo([
|
||||||
|
{
|
||||||
|
path: "/video/Made in abyss S01E13.mkv",
|
||||||
|
rendering: "mia13",
|
||||||
|
part: null,
|
||||||
|
version: 1,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
episodes: [{ season: 1, episode: 13 }],
|
||||||
|
kind: "episode",
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
for: [{ serie: madeInAbyss.slug, season: 1, episode: 13 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/video/Made in abyss movie.mkv",
|
||||||
|
rendering: "mia-movie",
|
||||||
|
part: null,
|
||||||
|
version: 1,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
kind: "movie",
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
// TODO: i feel like there's a better way than that. we need to make this api better
|
||||||
|
for: [{ serie: madeInAbyss.slug, order: 13.5 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/video/Made in abyss s2e1 p1.mkv",
|
||||||
|
rendering: "mia-s2e1",
|
||||||
|
part: 1,
|
||||||
|
version: 1,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
kind: "episode",
|
||||||
|
episodes: [{ season: 2, episode: 1 }],
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
for: [{ serie: madeInAbyss.slug, season: 2, episode: 1 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/video/Made in abyss s2e1 p2.mkv",
|
||||||
|
rendering: "mia-s2e1",
|
||||||
|
part: 2,
|
||||||
|
version: 1,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
kind: "episode",
|
||||||
|
episodes: [{ season: 2, episode: 1 }],
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
for: [{ serie: madeInAbyss.slug, season: 2, episode: 1 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/video/Made in abyss s2e1 p2 v2.mkv",
|
||||||
|
rendering: "mia-s2e1",
|
||||||
|
part: 2,
|
||||||
|
version: 2,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
kind: "episode",
|
||||||
|
episodes: [{ season: 2, episode: 1 }],
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
for: [{ serie: madeInAbyss.slug, season: 2, episode: 1 }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/video/Made in abyss s2e2.mkv",
|
||||||
|
rendering: "mia-s2e2",
|
||||||
|
part: null,
|
||||||
|
version: 2,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
kind: "episode",
|
||||||
|
episodes: [{ season: 2, episode: 2 }],
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
for: [
|
||||||
|
{ serie: madeInAbyss.slug, season: 2, episode: 2 },
|
||||||
|
{ serie: madeInAbyss.slug, season: 2, episode: 3 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/video/Made in abyss s2e4.mkv",
|
||||||
|
rendering: "mia-s2e4",
|
||||||
|
part: null,
|
||||||
|
version: 2,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
kind: "episode",
|
||||||
|
episodes: [{ season: 2, episode: 4 }],
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
for: [{ serie: madeInAbyss.slug, season: 2, episode: 4 }],
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("Get videos", () => {
|
||||||
|
it("Invalid slug", async () => {
|
||||||
|
const [resp, body] = await getVideo("sotneuhn", { langs: "en" });
|
||||||
|
expectStatus(resp, body).toBe(404);
|
||||||
|
expect(body).toMatchObject({
|
||||||
|
status: 404,
|
||||||
|
message: expect.any(String),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Get video", async () => {
|
||||||
|
const [resp, body] = await getVideo("made-in-abyss-s1e13", { langs: "en" });
|
||||||
|
expectStatus(resp, body).toBe(200);
|
||||||
|
expect(body).toMatchObject({
|
||||||
|
id: expect.any(String),
|
||||||
|
path: "/video/Made in abyss S01E13.mkv",
|
||||||
|
rendering: "mia13",
|
||||||
|
part: null,
|
||||||
|
version: 1,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
episodes: [{ season: 1, episode: 13 }],
|
||||||
|
kind: "episode",
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
slugs: ["made-in-abyss-s1e13"],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Get video with null previous", async () => {
|
||||||
|
const [resp, body] = await getVideo("made-in-abyss-s1e13", {
|
||||||
|
langs: "en",
|
||||||
|
with: ["previous"],
|
||||||
|
});
|
||||||
|
expectStatus(resp, body).toBe(200);
|
||||||
|
expect(body).toMatchObject({
|
||||||
|
id: expect.any(String),
|
||||||
|
path: "/video/Made in abyss S01E13.mkv",
|
||||||
|
rendering: "mia13",
|
||||||
|
part: null,
|
||||||
|
version: 1,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
episodes: [{ season: 1, episode: 13 }],
|
||||||
|
kind: "episode",
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
slugs: ["made-in-abyss-s1e13"],
|
||||||
|
previous: null,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Get video with movie next", async () => {
|
||||||
|
const [resp, body] = await getVideo("made-in-abyss-s1e13", {
|
||||||
|
langs: "en",
|
||||||
|
with: ["previous", "next"],
|
||||||
|
});
|
||||||
|
expectStatus(resp, body).toBe(200);
|
||||||
|
expect(body).toMatchObject({
|
||||||
|
id: expect.any(String),
|
||||||
|
path: "/video/Made in abyss S01E13.mkv",
|
||||||
|
rendering: "mia13",
|
||||||
|
part: null,
|
||||||
|
version: 1,
|
||||||
|
guess: {
|
||||||
|
title: "Made in abyss",
|
||||||
|
episodes: [{ season: 1, episode: 13 }],
|
||||||
|
kind: "episode",
|
||||||
|
from: "guessit",
|
||||||
|
history: [],
|
||||||
|
},
|
||||||
|
slugs: ["made-in-abyss-s1e13"],
|
||||||
|
previous: null,
|
||||||
|
next: {
|
||||||
|
video: "made-in-abyss-dawn-of-the-deep-soul",
|
||||||
|
entry: expect.objectContaining({
|
||||||
|
slug: "made-in-abyss-dawn-of-the-deep-soul",
|
||||||
|
name: "Made in Abyss: Dawn of the Deep Soul",
|
||||||
|
order: 13.5,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user