From a8342f125c1841002b1619130d2cc546c6cdf4c3 Mon Sep 17 00:00:00 2001 From: 4gray Date: Sun, 21 Jun 2026 23:09:36 +0200 Subject: [PATCH] test(stalker): cover route playlist fallback paths --- ...er-workspace-route-session.service.spec.ts | 29 ++++++++++++++++++- ...stalker-workspace-route-session.service.ts | 11 ++++--- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/libs/portal/stalker/feature/src/lib/stalker-workspace-route-session.service.spec.ts b/libs/portal/stalker/feature/src/lib/stalker-workspace-route-session.service.spec.ts index ea5b8ea5f..93854bffa 100644 --- a/libs/portal/stalker/feature/src/lib/stalker-workspace-route-session.service.spec.ts +++ b/libs/portal/stalker/feature/src/lib/stalker-workspace-route-session.service.spec.ts @@ -1,7 +1,7 @@ import { signal } from '@angular/core'; import { TestBed } from '@angular/core/testing'; import { NavigationEnd, Router } from '@angular/router'; -import { Subject, of } from 'rxjs'; +import { EMPTY, Subject, of } from 'rxjs'; import { PlaylistContextFacade } from '@iptvnator/playlist/shared/util'; import { StalkerStore } from '@iptvnator/portal/stalker/data-access'; import { PlaylistsService } from '@iptvnator/services'; @@ -173,4 +173,31 @@ describe('StalkerWorkspaceRouteSession', () => { FULL_STALKER_PLAYLIST ); }); + + it('falls back to the active playlist when the full playlist lookup completes empty', async () => { + activePlaylist.set(ACTIVE_PLAYLIST); + playlistsService.getPlaylistById.mockReturnValue(EMPTY); + + TestBed.inject(StalkerWorkspaceRouteSession); + await flushEffects(); + + expect(playlistsService.getPlaylistById).toHaveBeenCalledWith( + PLAYLIST_ID + ); + expect(stalkerStore.setCurrentPlaylist).toHaveBeenCalledWith( + ACTIVE_PLAYLIST + ); + }); + + it('uses active Stalker playlist metadata directly when the portal mode is explicit', async () => { + activePlaylist.set(FULL_STALKER_PLAYLIST); + + TestBed.inject(StalkerWorkspaceRouteSession); + await flushEffects(); + + expect(playlistsService.getPlaylistById).not.toHaveBeenCalled(); + expect(stalkerStore.setCurrentPlaylist).toHaveBeenCalledWith( + FULL_STALKER_PLAYLIST + ); + }); }); diff --git a/libs/portal/stalker/feature/src/lib/stalker-workspace-route-session.service.ts b/libs/portal/stalker/feature/src/lib/stalker-workspace-route-session.service.ts index 5efa32349..7aa702d7b 100644 --- a/libs/portal/stalker/feature/src/lib/stalker-workspace-route-session.service.ts +++ b/libs/portal/stalker/feature/src/lib/stalker-workspace-route-session.service.ts @@ -113,13 +113,12 @@ export class StalkerWorkspaceRouteSession { return activePlaylist; } - return ( - (await firstValueFrom( - this.playlistsService.getPlaylistById(playlistId) - )) ?? - activePlaylist ?? - undefined + const storedPlaylist = await firstValueFrom( + this.playlistsService.getPlaylistById(playlistId), + { defaultValue: null } ); + + return storedPlaylist ?? activePlaylist ?? undefined; } private hasExplicitStalkerPortalMode(