webamp/js/reducers/playlist.test.js
2019-03-19 06:55:24 -07:00

116 lines
2.8 KiB
JavaScript

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],
});
});
});