Test initial track selection

This commit is contained in:
Jordan Eldredge 2019-03-09 16:41:08 -08:00
parent 41e0ad4563
commit e41fb3d9b4
4 changed files with 51 additions and 5 deletions

View file

@ -65,7 +65,7 @@ export function loadPresets(presets: StatePreset[]): Dispatchable {
const state = getState();
const presetsLength = state.milkdrop.presets.length;
dispatch({ type: GOT_BUTTERCHURN_PRESETS, presets });
if (state.milkdrop.randomize) {
if (presetsLength === 0 && Selectors.getRandomizePresets(state)) {
dispatch(selectRandomPreset());
} else {
dispatch(
@ -116,7 +116,7 @@ export function selectNextPreset(
): Dispatchable {
return (dispatch, getState) => {
const state = getState();
if (state.milkdrop.randomize) {
if (Selectors.getRandomizePresets(state)) {
return dispatch(selectRandomPreset(transitionType));
}
const currentPresetIndex = Selectors.getCurrentPresetIndex(state);

View file

@ -225,7 +225,7 @@ function mapStateToProps(state: AppState): StateProps {
function mapDispatchToProps(dispatch: Dispatch): DispatchProps {
return {
requestPresetAtIndex: (i: number) => {
dispatch(Actions.requestPresetAtIndex(i, TransitionType.DEFAULT));
dispatch(Actions.requestPresetAtIndex(i, TransitionType.DEFAULT, true));
},
togglePresetOverlay: () => dispatch(Actions.togglePresetOverlay()),
appendPresetFileList: (fileList: FileList) =>

View file

@ -13,14 +13,31 @@ const media = {
on: jest.fn()
};
const store = createStore(media, new Emitter());
test("The first tack is picked at random", () => {
const store = createStore(media, new Emitter());
const mockPreset = [
{ type: "RESOLVED", name: "First", preset: {} },
{ type: "RESOLVED", name: "Second", preset: {} },
{ type: "RESOLVED", name: "Third", preset: {} },
{ type: "RESOLVED", name: "Fourth", preset: {} }
];
Math.random = () => 0.5;
// Just confirm that the default setting is correct
expect(Selectors.getRandomizePresets(store.getState())).toBe(true);
store.dispatch(Actions.loadPresets(mockPreset));
expect(Selectors.getCurrentPresetIndex(store.getState())).toBe(2);
});
test("handles history correctly", () => {
test("handles history (prev/next) correctly", () => {
const store = createStore(media, new Emitter());
const mockPreset = [
{ type: "RESOLVED", name: "First", preset: {} },
{ type: "RESOLVED", name: "Second", preset: {} }
];
expect(Selectors.getRandomizePresets(store.getState())).toBe(true);
store.dispatch(Actions.toggleRandomizePresets());
expect(Selectors.getRandomizePresets(store.getState())).toBe(false);
// Check initial state
expect(store.getState().milkdrop.presetHistory).toEqual([]);
expect(Selectors.getCurrentPreset(store.getState())).toBe(null);
@ -51,3 +68,28 @@ test("handles history correctly", () => {
expect(store.getState().milkdrop.presetHistory).toEqual([0]);
expect(Selectors.getCurrentPresetIndex(store.getState())).toBe(0);
});
test("selectes the first preset in a new set when added", async () => {
const store = createStore(media, new Emitter());
const mockPreset = [
{ type: "RESOLVED", name: "First", preset: {} },
{ type: "RESOLVED", name: "Second", preset: {} }
];
store.dispatch(Actions.toggleRandomizePresets());
// Load some presets
store.dispatch(Actions.loadPresets(mockPreset));
expect(Selectors.getCurrentPresetIndex(store.getState())).toBe(0);
const presetPromise = Promise.resolve({});
// Load some more presets
const newMockPresets = [
{ type: "UNRESOLVED", name: "First", getPreset: () => presetPromise }
];
store.dispatch(Actions.loadPresets(newMockPresets));
// The new presets are not selected right away
expect(Selectors.getCurrentPresetIndex(store.getState())).toBe(0);
await presetPromise;
// Once the first preset is loaded, it gets selected
expect(Selectors.getCurrentPresetIndex(store.getState())).toBe(2);
});

View file

@ -652,3 +652,7 @@ export function getPresetOverlayOpen(state: AppState): boolean {
export function getPresetsAreCycling(state: AppState): boolean {
return state.milkdrop.cycling;
}
export function getRandomizePresets(state: AppState): boolean {
return state.milkdrop.randomize;
}