| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import { ActionKeyPressed, ActionTypeKeyPressed, Keys } from '../../../../hooks/vim';
- import { Song } from '../../../../types';
- import { CmusUIActionType, searched } from '../actions';
- import { CmusUIState, LibraryModeWindow, View } from '../types';
- import { stateSearching } from './fixtures';
- import { cmusUIReducer, initialCmusUIState } from './reducer';
- describe('Searching', () => {
- const actionToSearch: ActionKeyPressed = { type: ActionTypeKeyPressed, key: Keys.slash };
- describe(Keys.slash, () => {
- it('should set searchMode to true', () => {
- expect.assertions(1);
- const result = cmusUIReducer(initialCmusUIState, actionToSearch);
- expect(result.searchMode).toBe(true);
- });
- });
- describe(CmusUIActionType.Searched, () => {
- const stateSearchingArtists: CmusUIState = {
- ...stateSearching,
- view: View.Library,
- artists: ['Amy Winehouse', 'Anticon', 'Bach'],
- library: {
- ...stateSearching.library,
- activeArtist: 'Amy Winehouse',
- activeAlbum: 'Back to Black',
- modeWindow: LibraryModeWindow.ArtistList,
- activeSongId: 883,
- },
- };
- const stateSearchingSongs: CmusUIState = {
- ...stateSearching,
- view: View.Library,
- artists: ['Amy Winehouse'],
- artistSongs: {
- 'Amy Winehouse': [
- { id: 184, title: 'Rehab' } as Song,
- { id: 883, title: 'Wake Up Alone' } as Song,
- ],
- },
- library: {
- ...stateSearching.library,
- activeArtist: 'Amy Winehouse',
- activeSongId: null,
- modeWindow: LibraryModeWindow.SongList,
- },
- };
- describe('artists', () => {
- it('should select the first match', () => {
- expect.assertions(3);
- const result = cmusUIReducer(stateSearchingArtists, searched('ant'));
- expect(result.library.activeArtist).toBe('Anticon');
- expect(result.library.activeSongId).toBeNull();
- expect(result.library.activeAlbum).toBeNull();
- });
- describe('when the artist has songs loaded', () => {
- const stateWithSongsLoaded: CmusUIState = {
- ...stateSearchingArtists,
- artistSongs: { Anticon: [{ id: 174 } as Song] },
- };
- it('should select the first song', () => {
- expect.assertions(1);
- const result = cmusUIReducer(stateWithSongsLoaded, searched('ant'));
- expect(result.library.activeSongId).toBe(174);
- });
- });
- });
- describe('songs', () => {
- it('should select the first match (by title)', () => {
- expect.assertions(1);
- const result = cmusUIReducer(stateSearchingSongs, searched('w'));
- expect(result.library.activeSongId).toBe(883);
- });
- });
- describe('when finishing / cancelling', () => {
- it('should set searchMode to false', () => {
- expect.assertions(1);
- const result = cmusUIReducer(stateSearchingArtists, searched(null));
- expect(result.searchMode).toBe(false);
- });
- });
- });
- });
|