Proyecto App Windows
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
import { createReducer } from '@ngrx/store';
|
||||
import { PlaylistActions } from '../actions';
|
||||
import { playlistsAdapter } from '../playlists.state';
|
||||
import { initialState } from '../state';
|
||||
import { playlistReducers } from './playlist.reducers';
|
||||
import { Channel, Playlist, PlaylistMeta } from 'shared-interfaces';
|
||||
|
||||
const reducer = createReducer(initialState, ...playlistReducers);
|
||||
|
||||
describe('playlistReducers', () => {
|
||||
it('persists updateDate and hiddenGroupTitles when playlist meta is updated', () => {
|
||||
const existingPlaylist: PlaylistMeta = {
|
||||
_id: 'playlist-1',
|
||||
title: 'Xtream Playlist',
|
||||
count: 0,
|
||||
importDate: '2026-03-28T00:00:00.000Z',
|
||||
autoRefresh: false,
|
||||
serverUrl: 'http://localhost:8080',
|
||||
username: 'demo',
|
||||
password: 'secret',
|
||||
};
|
||||
const state = {
|
||||
...initialState,
|
||||
playlists: playlistsAdapter.addOne(
|
||||
existingPlaylist,
|
||||
initialState.playlists
|
||||
),
|
||||
};
|
||||
|
||||
const nextState = reducer(
|
||||
state,
|
||||
PlaylistActions.updatePlaylistMeta({
|
||||
playlist: {
|
||||
...existingPlaylist,
|
||||
hiddenGroupTitles: ['Movies', 'News'],
|
||||
updateDate: 1712145600000,
|
||||
},
|
||||
})
|
||||
);
|
||||
|
||||
expect(nextState.playlists.entities['playlist-1']?.updateDate).toBe(
|
||||
1712145600000
|
||||
);
|
||||
expect(
|
||||
nextState.playlists.entities['playlist-1']?.hiddenGroupTitles
|
||||
).toEqual(['Movies', 'News']);
|
||||
});
|
||||
|
||||
it('updates the active playlist channel cache and clears loading on playlist refresh', () => {
|
||||
const refreshedChannel = {
|
||||
epgParams: '',
|
||||
http: {
|
||||
origin: '',
|
||||
referrer: '',
|
||||
'user-agent': '',
|
||||
},
|
||||
id: 'channel-1',
|
||||
name: 'Refreshed TV',
|
||||
radio: 'false',
|
||||
tvg: {
|
||||
id: 'channel-1',
|
||||
logo: '',
|
||||
name: 'Refreshed TV',
|
||||
rec: '',
|
||||
url: '',
|
||||
},
|
||||
url: 'https://example.com/refreshed.m3u8',
|
||||
} as Channel;
|
||||
const existingPlaylist: PlaylistMeta = {
|
||||
_id: 'playlist-1',
|
||||
count: 1,
|
||||
importDate: '2026-03-28T00:00:00.000Z',
|
||||
title: 'Playlist One',
|
||||
} as PlaylistMeta;
|
||||
const refreshedPlaylist = {
|
||||
playlist: {
|
||||
items: [refreshedChannel],
|
||||
},
|
||||
} as Playlist;
|
||||
const state = {
|
||||
...initialState,
|
||||
channelsLoading: true,
|
||||
playlists: playlistsAdapter.addOne(existingPlaylist, {
|
||||
...initialState.playlists,
|
||||
selectedId: 'playlist-1',
|
||||
}),
|
||||
};
|
||||
|
||||
const nextState = reducer(
|
||||
state,
|
||||
PlaylistActions.updatePlaylist({
|
||||
playlist: refreshedPlaylist,
|
||||
playlistId: 'playlist-1',
|
||||
})
|
||||
);
|
||||
|
||||
expect(nextState.channels).toEqual([refreshedChannel]);
|
||||
expect(nextState.channelsLoading).toBe(false);
|
||||
});
|
||||
|
||||
it('keeps hiddenGroupTitles on playlist refresh when the refreshed payload omits them', () => {
|
||||
const existingPlaylist: PlaylistMeta = {
|
||||
_id: 'playlist-1',
|
||||
count: 1,
|
||||
hiddenGroupTitles: ['Radio-de'],
|
||||
importDate: '2026-03-28T00:00:00.000Z',
|
||||
title: 'Playlist One',
|
||||
} as PlaylistMeta;
|
||||
const state = {
|
||||
...initialState,
|
||||
playlists: playlistsAdapter.addOne(existingPlaylist, {
|
||||
...initialState.playlists,
|
||||
selectedId: 'playlist-1',
|
||||
}),
|
||||
};
|
||||
|
||||
const nextState = reducer(
|
||||
state,
|
||||
PlaylistActions.updatePlaylist({
|
||||
playlist: {
|
||||
playlist: {
|
||||
items: [],
|
||||
},
|
||||
} as Playlist,
|
||||
playlistId: 'playlist-1',
|
||||
})
|
||||
);
|
||||
|
||||
expect(
|
||||
nextState.playlists.entities['playlist-1']?.hiddenGroupTitles
|
||||
).toEqual(['Radio-de']);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user