Merge pull request #74 from movie-web/provider-tests
Provider unit tests
This commit is contained in:
commit
54db7efcee
|
@ -26,6 +26,7 @@
|
|||
"@typescript-eslint/parser": "^5.60.0",
|
||||
"@vitest/coverage-v8": "^0.34.3",
|
||||
"commander": "^11.0.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"dotenv": "^16.3.1",
|
||||
"enquirer": "^2.4.1",
|
||||
"eslint": "^8.30.0",
|
||||
|
@ -1794,6 +1795,24 @@
|
|||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cross-env": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
|
||||
"integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"cross-spawn": "^7.0.1"
|
||||
},
|
||||
"bin": {
|
||||
"cross-env": "src/bin/cross-env.js",
|
||||
"cross-env-shell": "src/bin/cross-env-shell.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.14",
|
||||
"npm": ">=6",
|
||||
"yarn": ">=1"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-fetch": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
"cli": "ts-node ./src/dev-cli/index.ts",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest",
|
||||
"test:providers": "cross-env MW_TEST_PROVIDERS=true vitest run --reporter verbose",
|
||||
"test:integration": "node ./tests/cjs && node ./tests/esm && node ./tests/browser",
|
||||
"test:coverage": "vitest run --coverage",
|
||||
"lint": "eslint --ext .ts,.js src/",
|
||||
|
@ -55,6 +56,7 @@
|
|||
"@typescript-eslint/parser": "^5.60.0",
|
||||
"@vitest/coverage-v8": "^0.34.3",
|
||||
"commander": "^11.0.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"dotenv": "^16.3.1",
|
||||
"enquirer": "^2.4.1",
|
||||
"eslint": "^8.30.0",
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
import { buildProviders } from "@/entrypoint/builder";
|
||||
import { ScrapeMedia } from "@/entrypoint/utils/media";
|
||||
import { targets } from "@/entrypoint/utils/targets";
|
||||
import { makeStandardFetcher } from "@/fetchers/standardFetch";
|
||||
import { Embed, Sourcerer, SourcererEmbed } from "@/providers/base";
|
||||
import { TestTypes } from "./providerUtils";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { ProviderControls } from "@/entrypoint/controls";
|
||||
import { makeSimpleProxyFetcher } from "@/fetchers/simpleProxy";
|
||||
|
||||
export interface TestEmbedOptions {
|
||||
embed: Embed;
|
||||
source: Sourcerer;
|
||||
testSuite: ScrapeMedia[];
|
||||
types: TestTypes[];
|
||||
debug?: boolean;
|
||||
expect: {
|
||||
embeds: number;
|
||||
streams?: number;
|
||||
error?: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
function makeBaseEmbedProviders() {
|
||||
const builder = buildProviders()
|
||||
.setTarget(targets.ANY)
|
||||
.setFetcher(makeStandardFetcher(fetch));
|
||||
return builder;
|
||||
}
|
||||
|
||||
export function testEmbed(ops: TestEmbedOptions) {
|
||||
if (ops.testSuite.length === 0) throw new Error("Test suite must have at least one test");
|
||||
describe(`embed:${ops.source.id}:${ops.embed.id}`, () => {
|
||||
ops.testSuite.forEach((test) => {
|
||||
describe(`test ${test.title}`, async () => {
|
||||
async function gatherEmbeds(providers: ProviderControls): Promise<SourcererEmbed[]> {
|
||||
const results = await providers.runSourceScraper({
|
||||
id: ops.source.id,
|
||||
media: test,
|
||||
})
|
||||
if (results.embeds.length !== ops.expect.embeds) throw new Error(`Embeds don't match expected amount of embeds (${ops.source.id}, ${ops.embed.id}, got ${results.embeds.length} but expected ${ops.expect.embeds})`);
|
||||
return results.embeds;
|
||||
}
|
||||
|
||||
async function runTest(providers: ProviderControls, embedUrl: string) {
|
||||
let hasError = false;
|
||||
let streamCount = 0;
|
||||
try {
|
||||
const result = await providers.runEmbedScraper({
|
||||
id: ops.embed.id,
|
||||
url: embedUrl,
|
||||
})
|
||||
if (ops.debug) console.log(result);
|
||||
streamCount = (result.stream ?? []).length;
|
||||
} catch (err) {
|
||||
if (ops.debug) console.log(err);
|
||||
hasError = true;
|
||||
}
|
||||
expect(ops.expect.error ?? false).toBe(hasError);
|
||||
expect(ops.expect.streams ?? 0).toBe(streamCount);
|
||||
}
|
||||
|
||||
for (const t of ops.types) {
|
||||
const builder = makeBaseEmbedProviders().addSource(ops.source).addEmbed(ops.embed);
|
||||
if (t === 'standard') {}
|
||||
else if (t === 'ip:standard')
|
||||
builder.enableConsistentIpForRequests();
|
||||
else if (t === 'proxied') {
|
||||
if (!process.env.MOVIE_WEB_PROXY_URL)
|
||||
throw new Error("Cant use proxied test without setting MOVIE_WEB_PROXY_URL env");
|
||||
builder.setProxiedFetcher(makeSimpleProxyFetcher(process.env.MOVIE_WEB_PROXY_URL, fetch));
|
||||
}
|
||||
const providers = builder.build();
|
||||
try {
|
||||
const embeds = await gatherEmbeds(providers);
|
||||
embeds.forEach((embed, i) => {
|
||||
it(`${t} - embed ${i}`, async () => {
|
||||
await runTest(providers, embed.url);
|
||||
})
|
||||
})
|
||||
} catch (err) {
|
||||
it(`${t} - embed ??`, () => {
|
||||
throw new Error("Failed to get streams: " + err);
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
import dotenv from 'dotenv';
|
||||
import { febboxMp4Scraper } from "@/providers/embeds/febbox/mp4";
|
||||
import { testEmbed } from "./embedUtils";
|
||||
import { showboxScraper } from "@/providers/sources/showbox";
|
||||
import { testMedia } from "./testMedia";
|
||||
import { flixhqScraper } from "@/providers/sources/flixhq";
|
||||
import { upcloudScraper } from "@/providers/embeds/upcloud";
|
||||
import { goMoviesScraper } from "@/providers/sources/gomovies";
|
||||
import { smashyStreamScraper } from "@/providers/sources/smashystream";
|
||||
import { smashyStreamDScraper } from "@/providers/embeds/smashystream/dued";
|
||||
import { vidsrcembedScraper } from '@/providers/embeds/vidsrc';
|
||||
import { vidsrcScraper } from '@/providers/sources/vidsrc';
|
||||
import { vidSrcToScraper } from '@/providers/sources/vidsrcto';
|
||||
import { vidplayScraper } from '@/providers/embeds/vidplay';
|
||||
import { fileMoonScraper } from '@/providers/embeds/filemoon';
|
||||
import { zoechipScraper } from '@/providers/sources/zoechip';
|
||||
import { mixdropScraper } from '@/providers/embeds/mixdrop';
|
||||
|
||||
dotenv.config();
|
||||
|
||||
testEmbed({
|
||||
embed: febboxMp4Scraper,
|
||||
source: showboxScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testEmbed({
|
||||
embed: upcloudScraper,
|
||||
source: flixhqScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testEmbed({
|
||||
embed: upcloudScraper,
|
||||
source: goMoviesScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testEmbed({
|
||||
embed: smashyStreamDScraper,
|
||||
source: smashyStreamScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testEmbed({
|
||||
embed: vidsrcembedScraper,
|
||||
source: vidsrcScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testEmbed({
|
||||
embed: vidplayScraper,
|
||||
source: vidSrcToScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testEmbed({
|
||||
embed: fileMoonScraper,
|
||||
source: vidSrcToScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testEmbed({
|
||||
embed: upcloudScraper,
|
||||
source: zoechipScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 2,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testEmbed({
|
||||
embed: mixdropScraper,
|
||||
source: zoechipScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 2,
|
||||
streams: 1,
|
||||
}
|
||||
})
|
|
@ -0,0 +1,102 @@
|
|||
import { ScrapeMedia } from "@/entrypoint/utils/media";
|
||||
import { Embed, Sourcerer, SourcererEmbed } from "@/providers/base";
|
||||
import { buildProviders } from "@/entrypoint/builder";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { makeStandardFetcher } from "@/fetchers/standardFetch";
|
||||
import { ProviderControls } from "@/entrypoint/controls";
|
||||
import { NotFoundError } from "@/utils/errors";
|
||||
import { targets } from "@/entrypoint/utils/targets";
|
||||
import { getBuiltinEmbeds } from "@/entrypoint/providers";
|
||||
import { makeSimpleProxyFetcher } from "@/fetchers/simpleProxy";
|
||||
|
||||
export type TestTypes = 'standard' | 'ip:standard' | 'proxied';
|
||||
|
||||
export interface TestSourceOptions {
|
||||
source: Sourcerer;
|
||||
testSuite: ScrapeMedia[];
|
||||
types: TestTypes[];
|
||||
debug?: boolean;
|
||||
expect: {
|
||||
embeds?: number;
|
||||
streams?: number;
|
||||
error?: boolean;
|
||||
notfound?: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
function makeBaseProviders() {
|
||||
const builder = buildProviders()
|
||||
.setTarget(targets.ANY)
|
||||
.setFetcher(makeStandardFetcher(fetch));
|
||||
const embeds = getBuiltinEmbeds();
|
||||
embeds.forEach(embed => builder.addEmbed(embed));
|
||||
return builder;
|
||||
}
|
||||
|
||||
export function testSource(ops: TestSourceOptions) {
|
||||
if (ops.testSuite.length === 0) throw new Error("Test suite must have at least one test");
|
||||
describe(`source:${ops.source.id}`, () => {
|
||||
ops.testSuite.forEach((test) => {
|
||||
describe(`test ${test.title}`, () => {
|
||||
async function runTest(providers: ProviderControls) {
|
||||
let hasNotFound = false;
|
||||
let hasError = false;
|
||||
let streamCount = 0;
|
||||
let embedCount = 0;
|
||||
let embeds = [];
|
||||
try {
|
||||
const result = await providers.runSourceScraper({
|
||||
id: ops.source.id,
|
||||
media: test,
|
||||
})
|
||||
if (ops.debug) console.log(result);
|
||||
streamCount = (result.stream ?? []).length;
|
||||
embedCount = result.embeds.length;
|
||||
} catch (err) {
|
||||
if (ops.debug) console.log(err);
|
||||
if (err instanceof NotFoundError)
|
||||
hasNotFound = true;
|
||||
else
|
||||
hasError = true;
|
||||
}
|
||||
expect(ops.expect.error ?? false).toBe(hasError);
|
||||
expect(ops.expect.notfound ?? false).toBe(hasNotFound);
|
||||
expect(ops.expect.streams ?? 0).toBe(streamCount);
|
||||
expect(ops.expect.embeds ?? 0).toBe(embedCount);
|
||||
}
|
||||
|
||||
if (ops.types.includes('standard')) {
|
||||
it(`standard`, async () => {
|
||||
const providers = makeBaseProviders()
|
||||
.addSource(ops.source)
|
||||
.build();
|
||||
await runTest(providers);
|
||||
})
|
||||
}
|
||||
|
||||
if (ops.types.includes('ip:standard')) {
|
||||
it(`standard:ip`, async () => {
|
||||
const providers = makeBaseProviders()
|
||||
.addSource(ops.source)
|
||||
.enableConsistentIpForRequests()
|
||||
.build();
|
||||
await runTest(providers);
|
||||
})
|
||||
}
|
||||
|
||||
if (ops.types.includes('proxied')) {
|
||||
it(`proxied`, async () => {
|
||||
if (!process.env.MOVIE_WEB_PROXY_URL)
|
||||
throw new Error("Cant use proxied test without setting MOVIE_WEB_PROXY_URL env");
|
||||
const providers = makeBaseProviders()
|
||||
.addSource(ops.source)
|
||||
.setProxiedFetcher(makeSimpleProxyFetcher(process.env.MOVIE_WEB_PROXY_URL, fetch))
|
||||
.build();
|
||||
await runTest(providers);
|
||||
})
|
||||
}
|
||||
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
import { testSource } from "./providerUtils";
|
||||
import { lookmovieScraper } from "@/providers/sources/lookmovie";
|
||||
import { testMedia } from "./testMedia";
|
||||
import { showboxScraper } from "@/providers/sources/showbox";
|
||||
import dotenv from 'dotenv';
|
||||
import { flixhqScraper } from "@/providers/sources/flixhq";
|
||||
import { goMoviesScraper } from "@/providers/sources/gomovies";
|
||||
import { smashyStreamScraper } from "@/providers/sources/smashystream";
|
||||
import { vidsrcScraper } from "@/providers/sources/vidsrc";
|
||||
import { vidSrcToScraper } from "@/providers/sources/vidsrcto";
|
||||
import { zoechipScraper } from "@/providers/sources/zoechip";
|
||||
import { remotestreamScraper } from "@/providers/sources/remotestream";
|
||||
|
||||
dotenv.config();
|
||||
|
||||
testSource({
|
||||
source: lookmovieScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['ip:standard'],
|
||||
expect: {
|
||||
streams: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testSource({
|
||||
source: showboxScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testSource({
|
||||
source: flixhqScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testSource({
|
||||
source: goMoviesScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testSource({
|
||||
source: smashyStreamScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testSource({
|
||||
source: vidsrcScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 1,
|
||||
}
|
||||
})
|
||||
|
||||
testSource({
|
||||
source: vidSrcToScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 2,
|
||||
}
|
||||
})
|
||||
|
||||
testSource({
|
||||
source: zoechipScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
embeds: 3,
|
||||
}
|
||||
})
|
||||
|
||||
testSource({
|
||||
source: remotestreamScraper,
|
||||
testSuite: [testMedia.arcane, testMedia.hamilton],
|
||||
types: ['standard', 'proxied'],
|
||||
expect: {
|
||||
streams: 1,
|
||||
}
|
||||
})
|
|
@ -0,0 +1,30 @@
|
|||
import { ScrapeMedia } from "@/entrypoint/utils/media";
|
||||
|
||||
function makeMedia(media: ScrapeMedia): ScrapeMedia {
|
||||
return media;
|
||||
}
|
||||
|
||||
export const testMedia = {
|
||||
arcane: makeMedia({
|
||||
type: "show",
|
||||
title: "Arcane",
|
||||
tmdbId: "94605",
|
||||
releaseYear: 2021,
|
||||
episode: {
|
||||
number: 1,
|
||||
tmdbId: '1953812',
|
||||
},
|
||||
season: {
|
||||
number: 1,
|
||||
tmdbId: '134187',
|
||||
},
|
||||
imdbId: 'tt11126994'
|
||||
}),
|
||||
hamilton: makeMedia({
|
||||
type: 'movie',
|
||||
tmdbId: '556574',
|
||||
imdbId: 'tt8503618',
|
||||
releaseYear: 2020,
|
||||
title: 'Hamilton'
|
||||
})
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
import { vi } from 'vitest';
|
||||
|
||||
import { gatherAllEmbeds, gatherAllSources } from '@/providers/all';
|
||||
import { Embed, Sourcerer } from '@/providers/base';
|
||||
import { makeEmbed, makeSourcerer } from '@/providers/base';
|
||||
|
||||
export function makeProviderMocks() {
|
||||
const embedsMock = vi.fn<Parameters<typeof gatherAllEmbeds>, ReturnType<typeof gatherAllEmbeds>>();
|
||||
|
@ -13,104 +13,104 @@ export function makeProviderMocks() {
|
|||
};
|
||||
}
|
||||
|
||||
const sourceA = {
|
||||
const sourceA = makeSourcerer({
|
||||
id: 'a',
|
||||
name: 'A',
|
||||
rank: 1,
|
||||
disabled: false,
|
||||
flags: [],
|
||||
} as Sourcerer;
|
||||
const sourceB = {
|
||||
});
|
||||
const sourceB = makeSourcerer({
|
||||
id: 'b',
|
||||
name: 'B',
|
||||
rank: 2,
|
||||
disabled: false,
|
||||
flags: [],
|
||||
} as Sourcerer;
|
||||
const sourceCDisabled = {
|
||||
});
|
||||
const sourceCDisabled = makeSourcerer({
|
||||
id: 'c',
|
||||
name: 'C',
|
||||
rank: 3,
|
||||
disabled: true,
|
||||
flags: [],
|
||||
} as Sourcerer;
|
||||
const sourceAHigherRank = {
|
||||
});
|
||||
const sourceAHigherRank = makeSourcerer({
|
||||
id: 'a',
|
||||
name: 'A',
|
||||
rank: 100,
|
||||
disabled: false,
|
||||
flags: [],
|
||||
} as Sourcerer;
|
||||
const sourceGSameRankAsA = {
|
||||
});
|
||||
const sourceGSameRankAsA = makeSourcerer({
|
||||
id: 'g',
|
||||
name: 'G',
|
||||
rank: 1,
|
||||
disabled: false,
|
||||
flags: [],
|
||||
} as Sourcerer;
|
||||
const fullSourceYMovie = {
|
||||
});
|
||||
const fullSourceYMovie = makeSourcerer({
|
||||
id: 'y',
|
||||
name: 'Y',
|
||||
rank: 105,
|
||||
scrapeMovie: vi.fn(),
|
||||
flags: [],
|
||||
} as Sourcerer;
|
||||
const fullSourceYShow = {
|
||||
});
|
||||
const fullSourceYShow = makeSourcerer({
|
||||
id: 'y',
|
||||
name: 'Y',
|
||||
rank: 105,
|
||||
scrapeShow: vi.fn(),
|
||||
flags: [],
|
||||
} as Sourcerer;
|
||||
const fullSourceZBoth = {
|
||||
});
|
||||
const fullSourceZBoth = makeSourcerer({
|
||||
id: 'z',
|
||||
name: 'Z',
|
||||
rank: 106,
|
||||
scrapeMovie: vi.fn(),
|
||||
scrapeShow: vi.fn(),
|
||||
flags: [],
|
||||
} as Sourcerer;
|
||||
});
|
||||
|
||||
const embedD = {
|
||||
const embedD = makeEmbed({
|
||||
id: 'd',
|
||||
rank: 4,
|
||||
disabled: false,
|
||||
} as Embed;
|
||||
const embedA = {
|
||||
} as any);
|
||||
const embedA = makeEmbed({
|
||||
id: 'a',
|
||||
rank: 5,
|
||||
disabled: false,
|
||||
} as Embed;
|
||||
const embedEDisabled = {
|
||||
} as any);
|
||||
const embedEDisabled = makeEmbed({
|
||||
id: 'e',
|
||||
rank: 6,
|
||||
disabled: true,
|
||||
} as Embed;
|
||||
const embedDHigherRank = {
|
||||
} as any);
|
||||
const embedDHigherRank = makeEmbed({
|
||||
id: 'd',
|
||||
rank: 4000,
|
||||
disabled: false,
|
||||
} as Embed;
|
||||
const embedFSameRankAsA = {
|
||||
} as any);
|
||||
const embedFSameRankAsA = makeEmbed({
|
||||
id: 'f',
|
||||
rank: 5,
|
||||
disabled: false,
|
||||
} as Embed;
|
||||
const embedHSameRankAsSourceA = {
|
||||
} as any);
|
||||
const embedHSameRankAsSourceA = makeEmbed({
|
||||
id: 'h',
|
||||
rank: 1,
|
||||
disabled: false,
|
||||
} as Embed;
|
||||
const fullEmbedX = {
|
||||
} as any);
|
||||
const fullEmbedX = makeEmbed({
|
||||
id: 'x',
|
||||
name: 'X',
|
||||
rank: 104,
|
||||
} as Embed;
|
||||
const fullEmbedZ = {
|
||||
} as any);
|
||||
const fullEmbedZ = makeEmbed({
|
||||
id: 'z',
|
||||
name: 'Z',
|
||||
rank: 109,
|
||||
} as Embed;
|
||||
} as any);
|
||||
|
||||
export const mockSources = {
|
||||
sourceA,
|
|
@ -1,4 +1,4 @@
|
|||
import { mockEmbeds, mockSources } from '@/__test__/providerTests';
|
||||
import { mockEmbeds, mockSources } from '../providerTests';
|
||||
import { getBuiltinEmbeds, getBuiltinSources } from '@/entrypoint/providers';
|
||||
import { FeatureMap } from '@/entrypoint/utils/targets';
|
||||
import { getProviders } from '@/providers/get';
|
|
@ -1,4 +1,4 @@
|
|||
import { mockEmbeds, mockSources } from '@/__test__/providerTests';
|
||||
import { mockEmbeds, mockSources } from '../providerTests.ts';
|
||||
import { makeProviders } from '@/entrypoint/declare';
|
||||
import { targets } from '@/entrypoint/utils/targets';
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
@ -1,4 +1,4 @@
|
|||
import { mockEmbeds, mockSources } from '@/__test__/providerTests';
|
||||
import { mockEmbeds, mockSources } from '../providerTests.ts';
|
||||
import { makeProviders } from '@/entrypoint/declare';
|
||||
import { targets } from '@/entrypoint/utils/targets';
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
@ -2,6 +2,7 @@ import { flags } from '@/entrypoint/utils/targets';
|
|||
import { makeEmbed } from '@/providers/base';
|
||||
import { parseInputUrl } from '@/providers/embeds/febbox/common';
|
||||
import { getStreamQualities } from '@/providers/embeds/febbox/qualities';
|
||||
import { getSubtitles } from '@/providers/embeds/febbox/subtitles';
|
||||
|
||||
export const febboxMp4Scraper = makeEmbed({
|
||||
id: 'febbox-mp4',
|
||||
|
@ -41,7 +42,7 @@ export const febboxMp4Scraper = makeEmbed({
|
|||
stream: [
|
||||
{
|
||||
id: 'primary',
|
||||
captions: [], // subtitles temporarily disabled, the endpoints are broken
|
||||
captions: await getSubtitles(ctx, id, fid, type, episode, season),
|
||||
qualities,
|
||||
type: 'file',
|
||||
flags: [flags.CORS_ALLOWED],
|
||||
|
|
|
@ -5,7 +5,9 @@ const dts = require('vite-plugin-dts');
|
|||
const pkg = require('./package.json');
|
||||
const fs = require('fs/promises');
|
||||
|
||||
const main = path.resolve(__dirname, 'src/index.ts');
|
||||
const shouldTestProviders = process.env.MW_TEST_PROVIDERS === "true"
|
||||
let tests = ['src/__test__/standard/**/*.test.ts'];
|
||||
if (shouldTestProviders) tests = ['src/__test__/providers/**/*.test.ts']
|
||||
|
||||
module.exports = defineConfig({
|
||||
plugins: [
|
||||
|
@ -34,10 +36,13 @@ module.exports = defineConfig({
|
|||
outDir: 'lib',
|
||||
|
||||
lib: {
|
||||
entry: main,
|
||||
entry: path.resolve(__dirname, 'src/index.ts'),
|
||||
name: 'index',
|
||||
fileName: 'index',
|
||||
formats: ['umd', 'es'],
|
||||
},
|
||||
},
|
||||
test: {
|
||||
include: tests
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue