mirror of
https://github.com/sussy-code/smov.git
synced 2024-12-20 14:37:43 +01:00
add unit tests for providers
This commit is contained in:
parent
4f9ef382dc
commit
444156236c
7 changed files with 2687 additions and 138 deletions
|
@ -32,7 +32,7 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"preview": "vite preview",
|
"test": "vitest run",
|
||||||
"lint": "eslint --ext .tsx,.ts src",
|
"lint": "eslint --ext .tsx,.ts src",
|
||||||
"lint:fix": "eslint --fix --ext .tsx,.ts src",
|
"lint:fix": "eslint --fix --ext .tsx,.ts src",
|
||||||
"lint:report": "eslint --ext .tsx,.ts --output-file eslint_report.json --format json src"
|
"lint:report": "eslint --ext .tsx,.ts --output-file eslint_report.json --format json src"
|
||||||
|
@ -76,6 +76,7 @@
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
"eslint-plugin-react": "7.29.4",
|
"eslint-plugin-react": "7.29.4",
|
||||||
"eslint-plugin-react-hooks": "4.3.0",
|
"eslint-plugin-react-hooks": "4.3.0",
|
||||||
|
"jsdom": "^21.1.0",
|
||||||
"postcss": "^8.4.20",
|
"postcss": "^8.4.20",
|
||||||
"prettier": "^2.5.1",
|
"prettier": "^2.5.1",
|
||||||
"prettier-plugin-tailwindcss": "^0.1.7",
|
"prettier-plugin-tailwindcss": "^0.1.7",
|
||||||
|
@ -84,6 +85,7 @@
|
||||||
"typescript": "^4.6.4",
|
"typescript": "^4.6.4",
|
||||||
"vite": "^4.0.1",
|
"vite": "^4.0.1",
|
||||||
"vite-plugin-checker": "^0.5.6",
|
"vite-plugin-checker": "^0.5.6",
|
||||||
"vite-plugin-package-version": "^1.0.2"
|
"vite-plugin-package-version": "^1.0.2",
|
||||||
|
"vitest": "^0.28.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
51
src/__tests__/providers/providers.test.ts
Normal file
51
src/__tests__/providers/providers.test.ts
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
import { describe, it } from "vitest";
|
||||||
|
import "@/backend";
|
||||||
|
import { getProviders } from "@/backend/helpers/register";
|
||||||
|
import { MWMediaType } from "@/backend/metadata/types";
|
||||||
|
import { runProvider } from "@/backend/helpers/run";
|
||||||
|
import { testData } from "@/__tests__/providers/testdata";
|
||||||
|
|
||||||
|
describe("providers", () => {
|
||||||
|
const providers = getProviders();
|
||||||
|
|
||||||
|
it("have at least one provider", ({ expect }) => {
|
||||||
|
expect(providers.length).toBeGreaterThan(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const provider of providers) {
|
||||||
|
describe(provider.displayName, () => {
|
||||||
|
it("must have at least one type", async ({ expect }) => {
|
||||||
|
expect(provider.type.length).toBeGreaterThan(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (provider.type.includes(MWMediaType.MOVIE)) {
|
||||||
|
it("must work with movies", async ({ expect }) => {
|
||||||
|
const movie = testData.find((v) => v.meta.type === MWMediaType.MOVIE);
|
||||||
|
if (!movie) throw new Error("no movie to test with");
|
||||||
|
const results = await runProvider(provider, {
|
||||||
|
media: movie,
|
||||||
|
progress() {},
|
||||||
|
type: movie.meta.type as any,
|
||||||
|
});
|
||||||
|
expect(results).toBeTruthy();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (provider.type.includes(MWMediaType.SERIES)) {
|
||||||
|
it("must work with series", async ({ expect }) => {
|
||||||
|
const show = testData.find((v) => v.meta.type === MWMediaType.SERIES);
|
||||||
|
if (show?.meta.type !== MWMediaType.SERIES)
|
||||||
|
throw new Error("no show to test with");
|
||||||
|
const results = await runProvider(provider, {
|
||||||
|
media: show,
|
||||||
|
progress() {},
|
||||||
|
type: show.meta.type as MWMediaType.SERIES,
|
||||||
|
episode: show.meta.seasonData.episodes[0].id,
|
||||||
|
season: show.meta.seasons[0].id,
|
||||||
|
});
|
||||||
|
expect(results).toBeTruthy();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
45
src/__tests__/providers/testdata.ts
Normal file
45
src/__tests__/providers/testdata.ts
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
import { DetailedMeta } from "@/backend/metadata/getmeta";
|
||||||
|
import { MWMediaType } from "@/backend/metadata/types";
|
||||||
|
|
||||||
|
export const testData: DetailedMeta[] = [
|
||||||
|
{
|
||||||
|
imdbId: "tt10954562",
|
||||||
|
tmdbId: "572716",
|
||||||
|
meta: {
|
||||||
|
id: "439596",
|
||||||
|
title: "Hamilton",
|
||||||
|
type: MWMediaType.MOVIE,
|
||||||
|
year: "2020",
|
||||||
|
seasons: undefined,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imdbId: "tt11126994",
|
||||||
|
tmdbId: "94605",
|
||||||
|
meta: {
|
||||||
|
id: "222333",
|
||||||
|
title: "Arcane",
|
||||||
|
type: MWMediaType.SERIES,
|
||||||
|
year: "2021",
|
||||||
|
seasons: [
|
||||||
|
{
|
||||||
|
id: "230301",
|
||||||
|
number: 1,
|
||||||
|
title: "Season 1",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
seasonData: {
|
||||||
|
id: "230301",
|
||||||
|
number: 1,
|
||||||
|
title: "Season 1",
|
||||||
|
episodes: [
|
||||||
|
{
|
||||||
|
id: "4243445",
|
||||||
|
number: 1,
|
||||||
|
title: "Welcome to the Playground",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
|
@ -2,11 +2,11 @@ import { MWProviderScrapeResult } from "@/backend/helpers/provider";
|
||||||
import { getProviders } from "@/backend/helpers/register";
|
import { getProviders } from "@/backend/helpers/register";
|
||||||
import { runProvider } from "@/backend/helpers/run";
|
import { runProvider } from "@/backend/helpers/run";
|
||||||
import { DetailedMeta } from "@/backend/metadata/getmeta";
|
import { DetailedMeta } from "@/backend/metadata/getmeta";
|
||||||
import { MWMediaType } from "@/backend/metadata/types";
|
|
||||||
import { Navigation } from "@/components/layout/Navigation";
|
import { Navigation } from "@/components/layout/Navigation";
|
||||||
import { ArrowLink } from "@/components/text/ArrowLink";
|
import { ArrowLink } from "@/components/text/ArrowLink";
|
||||||
import { Title } from "@/components/text/Title";
|
import { Title } from "@/components/text/Title";
|
||||||
import { useLoading } from "@/hooks/useLoading";
|
import { useLoading } from "@/hooks/useLoading";
|
||||||
|
import { testData } from "@/__tests__/providers/testdata";
|
||||||
import { ReactNode, useEffect, useState } from "react";
|
import { ReactNode, useEffect, useState } from "react";
|
||||||
|
|
||||||
interface MediaSelectorProps {
|
interface MediaSelectorProps {
|
||||||
|
@ -23,48 +23,7 @@ interface MediaScraperProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
function MediaSelector(props: MediaSelectorProps) {
|
function MediaSelector(props: MediaSelectorProps) {
|
||||||
const options: DetailedMeta[] = [
|
const options: DetailedMeta[] = testData;
|
||||||
{
|
|
||||||
imdbId: "tt10954562",
|
|
||||||
tmdbId: "572716",
|
|
||||||
meta: {
|
|
||||||
id: "439596",
|
|
||||||
title: "Hamilton",
|
|
||||||
type: MWMediaType.MOVIE,
|
|
||||||
year: "2020",
|
|
||||||
seasons: undefined,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
imdbId: "tt11126994",
|
|
||||||
tmdbId: "94605",
|
|
||||||
meta: {
|
|
||||||
id: "222333",
|
|
||||||
title: "Arcane",
|
|
||||||
type: MWMediaType.SERIES,
|
|
||||||
year: "2021",
|
|
||||||
seasons: [
|
|
||||||
{
|
|
||||||
id: "230301",
|
|
||||||
number: 1,
|
|
||||||
title: "Season 1",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
seasonData: {
|
|
||||||
id: "230301",
|
|
||||||
number: 1,
|
|
||||||
title: "Season 1",
|
|
||||||
episodes: [
|
|
||||||
{
|
|
||||||
id: "4243445",
|
|
||||||
number: 1,
|
|
||||||
title: "Welcome to the Playground",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col space-y-4">
|
<div className="flex flex-col space-y-4">
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "ES2020",
|
"target": "ES2020",
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": ["dom", "dom.iterable", "esnext"],
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"forceConsistentCasingInFileNames": true,
|
"forceConsistentCasingInFileNames": true,
|
||||||
"noFallthroughCasesInSwitch": true,
|
"noFallthroughCasesInSwitch": true,
|
||||||
"module": "esnext",
|
"module": "esnext",
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
"jsx": "react-jsx",
|
"jsx": "react-jsx",
|
||||||
"baseUrl": "./src",
|
"baseUrl": "./src",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./*"]
|
"@/*": ["./*"]
|
||||||
},
|
},
|
||||||
"types": ["vite/client"]
|
"types": ["vite/client", "jest"]
|
||||||
},
|
},
|
||||||
"include": ["src"]
|
"include": ["src"]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vitest/config";
|
||||||
import react from "@vitejs/plugin-react-swc";
|
import react from "@vitejs/plugin-react-swc";
|
||||||
import loadVersion from "vite-plugin-package-version";
|
import loadVersion from "vite-plugin-package-version";
|
||||||
import checker from "vite-plugin-checker";
|
import checker from "vite-plugin-checker";
|
||||||
|
@ -24,4 +24,8 @@ export default defineConfig({
|
||||||
"@": path.resolve(__dirname, "./src"),
|
"@": path.resolve(__dirname, "./src"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
test: {
|
||||||
|
environment: "jsdom",
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue