import { SHIFT_CLICKED_TRACK, CLICKED_TRACK, CTRL_CLICKED_TRACK, ADD_TRACK_FROM_URL, } from "../actionTypes"; import reducer from "./playlist"; describe("playlist reducer", () => { it("can handle adding a track", () => { const initialState = { trackOrder: [], selectedTracks: new Set(), lastSelectedIndex: null, }; const nextState = reducer(initialState, { type: ADD_TRACK_FROM_URL, id: 100, defaultName: "My Track Name", url: "url://some-url", }); expect(nextState).toEqual({ trackOrder: [100], selectedTracks: new Set(), lastSelectedIndex: null, }); }); it("defaults to adding new tracks to the end of the list", () => { const initialState = { trackOrder: [3, 2], selectedTracks: new Set(), lastSelectedIndex: 0, }; const nextState = reducer(initialState, { type: ADD_TRACK_FROM_URL, id: 100, defaultName: "My Track Name", url: "url://some-url", }); expect(nextState).toEqual({ selectedTracks: new Set(), trackOrder: [3, 2, 100], lastSelectedIndex: null, }); }); it("can handle adding a track at a given index", () => { const initialState = { selectedTracks: new Set(), trackOrder: [3, 2], lastSelectedIndex: 0, }; const nextState = reducer(initialState, { type: ADD_TRACK_FROM_URL, id: 100, defaultName: "My Track Name", url: "url://some-url", atIndex: 1, }); expect(nextState).toEqual({ selectedTracks: new Set(), trackOrder: [3, 100, 2], lastSelectedIndex: null, }); }); it("can handle clicking a track", () => { const initialState = { trackOrder: [3, 2], selectedTracks: new Set(), lastSelectedIndex: 0, }; const nextState = reducer(initialState, { type: CLICKED_TRACK, index: 1, }); expect(nextState).toEqual({ selectedTracks: new Set([2]), trackOrder: [3, 2], lastSelectedIndex: 1, }); }); it("can handle ctrl-clicking a track", () => { const initialState = { selectedTracks: new Set([2]), trackOrder: [3, 2], lastSelectedIndex: 1, }; const nextState = reducer(initialState, { type: CTRL_CLICKED_TRACK, index: 0, }); expect(nextState).toEqual({ selectedTracks: new Set([2, 3]), trackOrder: [3, 2], lastSelectedIndex: 0, }); }); it("can handle shift-click", () => { const initialState = { selectedTracks: new Set(), trackOrder: [3, 2, 1, 0], lastSelectedIndex: 1, }; const nextState = reducer(initialState, { type: SHIFT_CLICKED_TRACK, index: 3, }); expect(nextState).toEqual({ lastSelectedIndex: 1, selectedTracks: new Set([0, 1, 2]), trackOrder: [3, 2, 1, 0], }); }); });