mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
149 lines
3.7 KiB
TypeScript
149 lines
3.7 KiB
TypeScript
import { beforeAll, describe, expect, it } from "bun:test";
|
|
import { getJwtHeaders } from "tests/helpers/jwt";
|
|
import { expectStatus } from "tests/utils";
|
|
import { db } from "~/db";
|
|
import { shows } from "~/db/schema";
|
|
import { bubble } from "~/models/examples";
|
|
import { dune1984 } from "~/models/examples/dune-1984";
|
|
import { dune } from "~/models/examples/dune-2021";
|
|
import { createMovie, getMovies, handlers } from "../helpers";
|
|
|
|
beforeAll(async () => {
|
|
await db.delete(shows);
|
|
for (const movie of [bubble, dune1984, dune]) {
|
|
const [ret, body] = await createMovie(movie);
|
|
expectStatus(ret, body).toBe(201);
|
|
}
|
|
});
|
|
|
|
describe("with a null value", () => {
|
|
// Those before/after hooks are NOT scoped to the describe due to a bun bug
|
|
// instead we just make a new file for those /shrug
|
|
// see: https://github.com/oven-sh/bun/issues/5738
|
|
beforeAll(async () => {
|
|
const [ret, body] = await createMovie({
|
|
slug: "no-air-date",
|
|
translations: {
|
|
en: {
|
|
name: "no air date",
|
|
description: null,
|
|
aliases: [],
|
|
banner: null,
|
|
logo: null,
|
|
poster: null,
|
|
tagline: null,
|
|
tags: [],
|
|
thumbnail: null,
|
|
trailer: null,
|
|
},
|
|
},
|
|
genres: [],
|
|
status: "unknown",
|
|
rating: null,
|
|
runtime: null,
|
|
airDate: null,
|
|
originalLanguage: "en",
|
|
externalId: {},
|
|
studios: [],
|
|
});
|
|
expectStatus(ret, body).toBe(201);
|
|
});
|
|
|
|
it("sort by dates desc with a null value", async () => {
|
|
let [resp, body] = await getMovies({
|
|
limit: 2,
|
|
sort: "-airDate",
|
|
langs: "en",
|
|
});
|
|
expectStatus(resp, body).toBe(200);
|
|
|
|
expect(body.items.map((x: any) => x.slug)).toMatchObject([
|
|
bubble.slug,
|
|
dune.slug,
|
|
]);
|
|
|
|
// we copy this due to https://github.com/oven-sh/bun/issues/3521
|
|
const next = body.next;
|
|
expect(body).toMatchObject({
|
|
items: [
|
|
expect.objectContaining({ slug: bubble.slug, airDate: bubble.airDate }),
|
|
expect.objectContaining({ slug: dune.slug, airDate: dune.airDate }),
|
|
],
|
|
this: "http://localhost/movies?limit=2&sort=-airDate",
|
|
next: expect.stringContaining(
|
|
"http://localhost/movies?limit=2&sort=-airDate&after=WyIyMDIxLTEwLTIyIiw",
|
|
),
|
|
});
|
|
|
|
resp = await handlers.handle(
|
|
new Request(next, { headers: await getJwtHeaders() }),
|
|
);
|
|
body = await resp.json();
|
|
|
|
expectStatus(resp, body).toBe(200);
|
|
expect(body.items.map((x: any) => x.slug)).toMatchObject([
|
|
dune1984.slug,
|
|
"no-air-date",
|
|
]);
|
|
expect(body).toMatchObject({
|
|
items: [
|
|
expect.objectContaining({
|
|
slug: dune1984.slug,
|
|
airDate: dune1984.airDate,
|
|
}),
|
|
expect.objectContaining({
|
|
slug: "no-air-date",
|
|
airDate: null,
|
|
}),
|
|
],
|
|
this: next,
|
|
next: expect.anything(),
|
|
});
|
|
});
|
|
it("sort by dates asc with a null value", async () => {
|
|
let [resp, body] = await getMovies({
|
|
limit: 2,
|
|
sort: "airDate",
|
|
langs: "en",
|
|
});
|
|
expectStatus(resp, body).toBe(200);
|
|
|
|
// we copy this due to https://github.com/oven-sh/bun/issues/3521
|
|
const next = body.next;
|
|
expect(body).toMatchObject({
|
|
items: [
|
|
expect.objectContaining({
|
|
slug: dune1984.slug,
|
|
airDate: dune1984.airDate,
|
|
}),
|
|
expect.objectContaining({ slug: dune.slug, airDate: dune.airDate }),
|
|
],
|
|
this: "http://localhost/movies?limit=2&sort=airDate",
|
|
next: expect.stringContaining(
|
|
"http://localhost/movies?limit=2&sort=airDate&after=WyIyMDIxLTEwLTIyIiw",
|
|
),
|
|
});
|
|
|
|
resp = await handlers.handle(
|
|
new Request(next, { headers: await getJwtHeaders() }),
|
|
);
|
|
body = await resp.json();
|
|
|
|
expectStatus(resp, body).toBe(200);
|
|
expect(body).toMatchObject({
|
|
items: [
|
|
expect.objectContaining({
|
|
slug: bubble.slug,
|
|
airDate: bubble.airDate,
|
|
}),
|
|
expect.objectContaining({
|
|
slug: "no-air-date",
|
|
airDate: null,
|
|
}),
|
|
],
|
|
this: next,
|
|
next: expect.anything(),
|
|
});
|
|
});
|
|
});
|