-
-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathinclude.test-utils.ts
More file actions
115 lines (100 loc) · 3.61 KB
/
include.test-utils.ts
File metadata and controls
115 lines (100 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import type { H3 } from "h3"
import { describe, expect, test } from "vitest"
import { db, Source, type SourceValue } from "../../db/db.ts"
export const testIncludeQueryParam = (
app: H3,
path: string,
source: SourceValue = Source.AniList,
) => {
const arrayify = <T>(data: T) => (source !== Source.AniList ? [data] : data)
const prefixify = <S extends SourceValue, T extends string | number>(source: S, input: T) =>
source === "imdb" ? (`tt${input}` as const) : input
describe("?include", () => {
test("single source", async () => {
await db
.insertInto("relations")
.values({ anilist: 1337, thetvdb: 1337, themoviedb: 1337, imdb: "tt1337" })
.execute()
const query = new URLSearchParams({
source,
id: prefixify(source, "1337"),
include: source,
})
const response = await app.fetch(new Request(`http://localhost${path}?${query.toString()}`))
await expect(response.json()).resolves.toStrictEqual(
arrayify({ [source]: prefixify(source, 1337) }),
)
expect(response.status).toBe(200)
expect(response.headers.get("content-type")).toContain("application/json")
})
test("multiple sources (anilist,thetvdb,themoviedb)", async () => {
await db
.insertInto("relations")
.values({ anilist: 1337, thetvdb: 1337, themoviedb: 1337, imdb: "tt1337" })
.execute()
const query = new URLSearchParams({
source,
id: prefixify(source, "1337"),
include: [Source.AniList, Source.TheTVDB, Source.TheMovieDB, Source.IMDB].join(","),
})
const response = await app.fetch(new Request(`http://localhost${path}?${query.toString()}`))
await expect(response.json()).resolves.toStrictEqual(
arrayify({ anilist: 1337, thetvdb: 1337, themoviedb: 1337, imdb: "tt1337" }),
)
expect(response.status).toBe(200)
expect(response.headers.get("content-type")).toContain("application/json")
})
test("duplicate sources (anilist,anilist,themoviedb)", async () => {
await db
.insertInto("relations")
.values({ anilist: 1337, thetvdb: 1337, themoviedb: 1337, imdb: "tt1337" })
.execute()
const query = new URLSearchParams({
source,
id: prefixify(source, "1337"),
include: [Source.AniList, Source.AniList, Source.TheMovieDB].join(","),
})
const response = await app.fetch(new Request(`http://localhost${path}?${query.toString()}`))
await expect(response.json()).resolves.toStrictEqual(
arrayify({ anilist: 1337, themoviedb: 1337 }),
)
expect(response.status).toBe(200)
expect(response.headers.get("content-type")).toContain("application/json")
})
test("all the sources", async () => {
await db
.insertInto("relations")
.values({ anilist: 1337, [source]: prefixify(source, 1337) })
.execute()
const query = new URLSearchParams({
source,
id: prefixify(source, "1337"),
include: Object.values(Source).join(","),
})
const response = await app.fetch(new Request(`http://localhost${path}?${query.toString()}`))
const expectedResult: Record<SourceValue, number | null> = {
anidb: null,
anilist: 1337,
"anime-planet": null,
anisearch: null,
imdb: null,
kitsu: null,
livechart: null,
animenewsnetwork: null,
"notify-moe": null,
themoviedb: null,
"themoviedb-season": null,
thetvdb: null,
"thetvdb-season": null,
myanimelist: null,
simkl: null,
animecountdown: null,
media: null,
}
expectedResult[source] = prefixify(source, 1337) as never
await expect(response.json()).resolves.toStrictEqual(arrayify(expectedResult))
expect(response.status).toBe(200)
expect(response.headers.get("content-type")).toContain("application/json")
})
})
}