mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-23 10:07:35 +00:00
116 lines
2.8 KiB
JavaScript
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]
|
|
});
|
|
});
|
|
});
|