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