From 3e30778f5118225ea533a24fcc95d47ff94aa40a Mon Sep 17 00:00:00 2001 From: 4gray Date: Sat, 11 Apr 2026 22:31:51 +0200 Subject: [PATCH] chore(xtream-mock-server): add support for empty metadata fallback in VOD details --- apps/xtream-mock-server/src/app/data-store.ts | 4 ++ .../src/app/generators/vod.generator.ts | 64 ++++++++++--------- apps/xtream-mock-server/src/app/scenarios.ts | 15 +++++ 3 files changed, 52 insertions(+), 31 deletions(-) diff --git a/apps/xtream-mock-server/src/app/data-store.ts b/apps/xtream-mock-server/src/app/data-store.ts index 10af189c0..474facd2a 100644 --- a/apps/xtream-mock-server/src/app/data-store.ts +++ b/apps/xtream-mock-server/src/app/data-store.ts @@ -84,6 +84,10 @@ export function getVodDetails(username: string, password: string, vodId: number) const data = getPortalData(username, password); const stream = data.vodStreams.find(v => v.stream_id === vodId); if (!stream) return null; + if (data.scenario.vodDetailsFixture === 'empty-metadata') { + vodDetailsCache.set(vodId, { info: [] }); + return vodDetailsCache.get(vodId) ?? null; + } vodDetailsCache.set(vodId, generateVodDetails(stream)); } return vodDetailsCache.get(vodId) ?? null; diff --git a/apps/xtream-mock-server/src/app/generators/vod.generator.ts b/apps/xtream-mock-server/src/app/generators/vod.generator.ts index 2eba20abe..1c7e8c528 100644 --- a/apps/xtream-mock-server/src/app/generators/vod.generator.ts +++ b/apps/xtream-mock-server/src/app/generators/vod.generator.ts @@ -19,37 +19,39 @@ export interface RawVodStream { } export interface RawVodDetails { - info: { - kinopoisk_url: string; - tmdb_id: number; - name: string; - o_name: string; - cover_big: string; - movie_image: string; - releasedate: string; - episode_run_time: number; - youtube_trailer: string; - director: string; - actors: string; - cast: string; - description: string; - plot: string; - age: string; - mpaa_rating: string; - rating_count_kinopoisk: number; - country: string; - genre: string; - backdrop_path: string[]; - duration_secs: number; - duration: string; - video: string[]; - audio: string[]; - bitrate: number; - rating: number; - rating_kinopoisk: string; - rating_imdb: string; - }; - movie_data: { + info: + | { + kinopoisk_url: string; + tmdb_id: number; + name: string; + o_name: string; + cover_big: string; + movie_image: string; + releasedate: string; + episode_run_time: number; + youtube_trailer: string; + director: string; + actors: string; + cast: string; + description: string; + plot: string; + age: string; + mpaa_rating: string; + rating_count_kinopoisk: number; + country: string; + genre: string; + backdrop_path: string[]; + duration_secs: number; + duration: string; + video: string[]; + audio: string[]; + bitrate: number; + rating: number; + rating_kinopoisk: string; + rating_imdb: string; + } + | []; + movie_data?: { stream_id: number; name: string; added: string; diff --git a/apps/xtream-mock-server/src/app/scenarios.ts b/apps/xtream-mock-server/src/app/scenarios.ts index c63762098..3ad3b9207 100644 --- a/apps/xtream-mock-server/src/app/scenarios.ts +++ b/apps/xtream-mock-server/src/app/scenarios.ts @@ -13,6 +13,8 @@ export interface ScenarioConfig { expiryDate: string; /** Optional deterministic EPG fixture profile for scenario-specific tests. */ epgFixture?: 'timezone-focus'; + /** Optional deterministic VOD detail profile for metadata fallback tests. */ + vodDetailsFixture?: 'empty-metadata'; } /** @@ -90,6 +92,19 @@ export const SCENARIOS: Record = { expiryDate: '2099-12-31', epgFixture: 'timezone-focus', }, + 'emptyvod:emptyvod': { + name: 'empty-vod-metadata', + description: + 'Xtream VOD fixture with list data intact but empty get_vod_info metadata responses', + seed: 7007, + categoryCount: { live: 2, vod: 2, series: 2 }, + itemsPerCategory: 5, + seasonsPerSeries: 2, + episodesPerSeason: 4, + accountStatus: 'Active', + expiryDate: '2099-12-31', + vodDetailsFixture: 'empty-metadata', + }, 'expired:expired': { name: 'expired', description: 'Expired account — tests subscription expiry UI flow',