diff --git a/libs/portal/stalker/data-access/src/lib/stalker-series.adapters.spec.ts b/libs/portal/stalker/data-access/src/lib/stalker-series.adapters.spec.ts index df4f64560..181f31a3d 100644 --- a/libs/portal/stalker/data-access/src/lib/stalker-series.adapters.spec.ts +++ b/libs/portal/stalker/data-access/src/lib/stalker-series.adapters.spec.ts @@ -82,6 +82,31 @@ describe('stalker-series.adapters', () => { expect(firstEpisode.id).not.toBe(mapped['1'][1].id); }); + it('preserves the Specials season zero through VOD episode mapping', () => { + const mapped = mapVodSeriesEpisodes( + [ + { + id: 'specials', + video_id: 'v1', + name: 'Specials', + season_number: '0', + episodes: [ + { + id: 'special-1', + series_number: 1, + name: 'Special episode', + }, + ], + isLoading: false, + isExpanded: false, + }, + ], + { parentSeriesId: 100 } + ); + + expect(mapped['0'][0].season).toBe(0); + }); + it('generates deterministic VOD-series episode IDs for the same parent and provider episode', () => { const seasons = [ { diff --git a/libs/portal/stalker/data-access/src/lib/stalker-series.adapters.ts b/libs/portal/stalker/data-access/src/lib/stalker-series.adapters.ts index 17ec5dcec..49aa8df8a 100644 --- a/libs/portal/stalker/data-access/src/lib/stalker-series.adapters.ts +++ b/libs/portal/stalker/data-access/src/lib/stalker-series.adapters.ts @@ -74,10 +74,7 @@ function generateVodEpisodeId(options: { ); } -function generateRegularEpisodeId( - seed: string, - episodeNum: number -): number { +function generateRegularEpisodeId(seed: string, episodeNum: number): number { return hashString(`${seed}_ep_${episodeNum}`); } @@ -269,8 +266,13 @@ export function getVodSeriesSeasonNumber( season: VodSeriesSeasonVm, seasons: ReadonlyArray ): number { - const parsedSeasonNumber = Number(season.season_number); - if (Number.isInteger(parsedSeasonNumber) && parsedSeasonNumber > 0) { + const normalizedSeasonNumber = season.season_number.trim(); + const parsedSeasonNumber = Number(normalizedSeasonNumber); + if ( + normalizedSeasonNumber !== '' && + Number.isInteger(parsedSeasonNumber) && + parsedSeasonNumber >= 0 + ) { return parsedSeasonNumber; }