mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-10-30 18:22:41 -04:00 
			
		
		
		
	Add tests setup for post /movies
This commit is contained in:
		
							parent
							
								
									24035c15bf
								
							
						
					
					
						commit
						5e1e2fb6e2
					
				
							
								
								
									
										2
									
								
								api/bunfig.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								api/bunfig.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | [test] | ||||||
|  | preload = ["./tests/setup.ts"] | ||||||
							
								
								
									
										72
									
								
								api/src/models/examples/dune-1984.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								api/src/models/examples/dune-1984.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | |||||||
|  | import type { SeedMovie } from "../movie"; | ||||||
|  | import type { Video } from "../video"; | ||||||
|  | 
 | ||||||
|  | export const dune1984Video: Video = { | ||||||
|  | 	id: "d1a62b87-9cfd-4f9c-9ad7-21f9b7fa6290", | ||||||
|  | 	slug: "dune-1984", | ||||||
|  | 	path: "/video/Dune_1984/Dune (1984).mkv", | ||||||
|  | 	rendering: "ea3a0f8f2f2c5b61a07f61e4e8d9f8e01b2b92bcbb6f5ed1151e1f61619c2c0f", | ||||||
|  | 	part: null, | ||||||
|  | 	version: 1, | ||||||
|  | 	createdAt: "2024-12-02T11:45:12.968Z", | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export const dune1984: SeedMovie = { | ||||||
|  | 	slug: "dune-1984", | ||||||
|  | 	translations: { | ||||||
|  | 		en: { | ||||||
|  | 			name: "Dune", | ||||||
|  | 			tagline: "A journey to the stars begins with a single step.", | ||||||
|  | 			description: | ||||||
|  | 				"On the planet Arrakis, the young Paul Atreides and his family are thrust into a world of political intrigue and warfare over control of the spice melange, the most valuable substance in the universe.", | ||||||
|  | 			aliases: ["Dune 1984", "Dune: David Lynch's Vision", "Dune: The Movie"], | ||||||
|  | 			tags: ["sci-fi", "adventure", "drama", "cult-classic", "epic"], | ||||||
|  | 			poster: | ||||||
|  | 				"https://image.tmdb.org/t/p/original/eVnVrIWkT8esL3XsTc4BjhDhQKq.jpg", | ||||||
|  | 			thumbnail: | ||||||
|  | 				"https://image.tmdb.org/t/p/original/pCHV6BntWLO2H6wQOj4LwzAWqpa.jpg", | ||||||
|  | 			banner: null, | ||||||
|  | 			logo: "https://image.tmdb.org/t/p/original/olbKnk2VvFcM2STl0dJAf6kfydo.png", | ||||||
|  | 			trailerUrl: "https://www.youtube.com/watch?v=vczYTLQ6oiE", | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	genres: ["adventure", "drama", "science-fiction"], | ||||||
|  | 	rating: 60, | ||||||
|  | 	status: "finished", | ||||||
|  | 	runtime: 137, | ||||||
|  | 	airDate: "1984-12-14", | ||||||
|  | 	originalLanguage: "en", | ||||||
|  | 	externalId: { | ||||||
|  | 		themoviedatabase: { | ||||||
|  | 			dataId: "9495", | ||||||
|  | 			link: "https://www.themoviedb.org/movie/9495", | ||||||
|  | 		}, | ||||||
|  | 		imdb: { | ||||||
|  | 			dataId: "tt0087182", | ||||||
|  | 			link: "https://www.imdb.com/title/tt0087182", | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	videos: [dune1984Video.id], | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export const dune1984Images = { | ||||||
|  | 	poster: { | ||||||
|  | 		id: "a5e1c5e4-4176-42f0-a279-8ab6f1ae2d30", | ||||||
|  | 		source: | ||||||
|  | 			"https://image.tmdb.org/t/p/original/eVnVrIWkT8esL3XsTc4BjhDhQKq.jpg", | ||||||
|  | 		blurhash: "L32^9tc~%8~U%OItfNGq9FoLV@X9", | ||||||
|  | 	}, | ||||||
|  | 	thumbnail: { | ||||||
|  | 		id: "fe44141b-58bc-42b7-a5c5-e10b801e99ae", | ||||||
|  | 		source: | ||||||
|  | 			"https://image.tmdb.org/t/p/original/pCHV6BntWLO2H6wQOj4LwzAWqpa.jpg", | ||||||
|  | 		blurhash: "L56~XM~q9ZZX4wbD9Wa|ECxvS~V@", | ||||||
|  | 	}, | ||||||
|  | 	banner: null, | ||||||
|  | 	logo: { | ||||||
|  | 		id: "515d7d72-b4f0-4a7d-a27a-eac3495ea8b3", | ||||||
|  | 		source: | ||||||
|  | 			"https://image.tmdb.org/t/p/original/olbKnk2VvFcM2STl0dJAf6kfydo.png", | ||||||
|  | 		blurhash: "LJ4XXK*]JFMzM]V?~Xz$sV?tMdm+", | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
							
								
								
									
										72
									
								
								api/src/models/examples/dune-2021.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								api/src/models/examples/dune-2021.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | |||||||
|  | import type { SeedMovie } from "../movie"; | ||||||
|  | import type { Video } from "../video"; | ||||||
|  | 
 | ||||||
|  | export const duneVideo: Video = { | ||||||
|  | 	id: "c9a0d02e-6b8e-4ac1-b431-45b022ec0708", | ||||||
|  | 	slug: "dune", | ||||||
|  | 	path: "/video/Dune/Dune (2021).mkv", | ||||||
|  | 	rendering: "f1953a4fb58247efb6c15b76468b6a9d13b4155b02094863b1a4f0c3fbb6db58", | ||||||
|  | 	part: null, | ||||||
|  | 	version: 1, | ||||||
|  | 	createdAt: "2024-12-02T10:10:24.968Z", | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export const dune: SeedMovie = { | ||||||
|  | 	slug: "dune", | ||||||
|  | 	translations: { | ||||||
|  | 		en: { | ||||||
|  | 			name: "Dune", | ||||||
|  | 			tagline: "A mythic and emotionally charged hero's journey.", | ||||||
|  | 			description: | ||||||
|  | 				"On the desert planet Arrakis, a young nobleman becomes embroiled in a complex struggle for control of the planet's valuable resource, the spice melange.", | ||||||
|  | 			aliases: ["Dune: Part One", "Dune 2021"], | ||||||
|  | 			tags: ["sci-fi", "adventure", "drama", "action", "epic"], | ||||||
|  | 			poster: | ||||||
|  | 				"https://image.tmdb.org/t/p/original/wD57HqZ6fXwwDdfQLo4hXLRwGV1.jpg", | ||||||
|  | 			thumbnail: | ||||||
|  | 				"https://image.tmdb.org/t/p/original/k2ocXnNkmvE6rJomRkExIStFq3v.jpg", | ||||||
|  | 			banner: null, | ||||||
|  | 			logo: "https://image.tmdb.org/t/p/original/5nDsd3u1c6kDphbtIqkHseLg7HL.png", | ||||||
|  | 			trailerUrl: "https://www.youtube.com/watch?v=n9xhJrPXop4", | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	genres: ["adventure", "drama", "science-fiction", "action"], | ||||||
|  | 	rating: 83, | ||||||
|  | 	status: "finished", | ||||||
|  | 	runtime: 155, | ||||||
|  | 	airDate: "2021-10-22", | ||||||
|  | 	originalLanguage: "en", | ||||||
|  | 	externalId: { | ||||||
|  | 		themoviedatabase: { | ||||||
|  | 			dataId: "496243", | ||||||
|  | 			link: "https://www.themoviedb.org/movie/496243", | ||||||
|  | 		}, | ||||||
|  | 		imdb: { | ||||||
|  | 			dataId: "tt1160419", | ||||||
|  | 			link: "https://www.imdb.com/title/tt1160419", | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	videos: [duneVideo.id], | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export const duneImages = { | ||||||
|  | 	poster: { | ||||||
|  | 		id: "ea0426d1-4d16-4be9-9e6f-08e5fdf8f209", | ||||||
|  | 		source: | ||||||
|  | 			"https://image.tmdb.org/t/p/original/wD57HqZ6fXwwDdfQLo4hXLRwGV1.jpg", | ||||||
|  | 		blurhash: "L3D8AK$A5l=j~Bt7_4Mw-;WBt4Gf", | ||||||
|  | 	}, | ||||||
|  | 	thumbnail: { | ||||||
|  | 		id: "1b629b7f-3b44-45b9-9432-cb5505045899", | ||||||
|  | 		source: | ||||||
|  | 			"https://image.tmdb.org/t/p/original/k2ocXnNkmvE6rJomRkExIStFq3v.jpg", | ||||||
|  | 		blurhash: "L6l5}7$S0nt7p~2R.9W9tQ%NflWC", | ||||||
|  | 	}, | ||||||
|  | 	banner: null, | ||||||
|  | 	logo: { | ||||||
|  | 		id: "c02ec0d2-d04e-4f51-8d4e-4cdd9ca75a7e", | ||||||
|  | 		source: | ||||||
|  | 			"https://image.tmdb.org/t/p/original/5nDsd3u1c6kDphbtIqkHseLg7HL.png", | ||||||
|  | 		blurhash: "LLOQ0t-7e,X6jY?qBtt6c8A4gYof", | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
							
								
								
									
										50
									
								
								api/tests/seed-movies.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								api/tests/seed-movies.test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | import { afterAll, beforeAll, describe, expect, it, test } from "bun:test"; | ||||||
|  | import { inArray } from "drizzle-orm"; | ||||||
|  | import Elysia from "elysia"; | ||||||
|  | import { seed } from "~/controllers/seed"; | ||||||
|  | import { db } from "~/db"; | ||||||
|  | import { shows, videos } from "~/db/schema"; | ||||||
|  | import { dune, duneVideo } from "~/models/examples/dune-2021"; | ||||||
|  | 
 | ||||||
|  | const app = new Elysia().use(seed); | ||||||
|  | 
 | ||||||
|  | const cleanup = async () => { | ||||||
|  | 	await db.delete(shows).where(inArray(shows.slug, [dune.slug])); | ||||||
|  | 	await db.delete(videos).where(inArray(videos.id, [duneVideo.id])); | ||||||
|  | }; | ||||||
|  | // cleanup db beforehand to unsure tests are consistent
 | ||||||
|  | beforeAll(cleanup); | ||||||
|  | afterAll(cleanup); | ||||||
|  | 
 | ||||||
|  | describe("Movie seeding", () => { | ||||||
|  | 	it("Can create a movie", async () => { | ||||||
|  | 		// create video beforehand to test linking
 | ||||||
|  | 		await db.insert(videos).values(duneVideo); | ||||||
|  | 
 | ||||||
|  | 		const resp = await app.handle( | ||||||
|  | 			new Request("http://localhost/movies", { | ||||||
|  | 				method: "POST", | ||||||
|  | 				body: JSON.stringify(dune), | ||||||
|  | 				headers: { | ||||||
|  | 					"Content-Type": "application/json", | ||||||
|  | 				}, | ||||||
|  | 			}), | ||||||
|  | 		); | ||||||
|  | 		const body = await resp.json(); | ||||||
|  | 
 | ||||||
|  | 		expect(resp.status).toBe(201); | ||||||
|  | 		expect(body.id).toBeString(); | ||||||
|  | 		expect(body.slug).toBe("dune"); | ||||||
|  | 		expect(body.videos).toContain({ slug: "dune" }); | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | 	test.todo("Conflicting slug auto-correct", async () => {}); | ||||||
|  | 	test.todo("Conflict in slug+year fails", async () => {}); | ||||||
|  | 	test.todo("Missing videos send info", async () => {}); | ||||||
|  | 	test.todo("Schema error", async () => {}); | ||||||
|  | 	test.todo("Invalid translation name", async () => {}); | ||||||
|  | 	test.todo("Update existing movie", async () => {}); | ||||||
|  | 	test.todo("Create correct video slug (version)", async () => {}); | ||||||
|  | 	test.todo("Create correct video slug (part)", async () => {}); | ||||||
|  | 	test.todo("Create correct video slug (rendering)", async () => {}); | ||||||
|  | }); | ||||||
							
								
								
									
										10
									
								
								api/tests/setup.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								api/tests/setup.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | import { beforeAll } from "bun:test"; | ||||||
|  | import { migrate } from "drizzle-orm/node-postgres/migrator"; | ||||||
|  | import { db } from "~/db"; | ||||||
|  | 
 | ||||||
|  | beforeAll(async () => { | ||||||
|  | 	await migrate(db, { | ||||||
|  | 		migrationsSchema: "kyoo", | ||||||
|  | 		migrationsFolder: "./drizzle", | ||||||
|  | 	}); | ||||||
|  | }); | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user