diff --git a/test/unit/reducers/project-state-reducer.test.js b/test/unit/reducers/project-state-reducer.test.js index aee74afd8c9dd85413bc2b7f93381d2ab61c09ef..faf208bf4341b8114df38fd8e6543ecb430b8724 100644 --- a/test/unit/reducers/project-state-reducer.test.js +++ b/test/unit/reducers/project-state-reducer.test.js @@ -96,142 +96,173 @@ test('onFetchedProjectData new loads project data into vm', () => { test('onLoadedProject(LOADING_VM_WITH_ID, true, true) results in state SHOWING_WITH_ID', () => { const initialState = { + projectId: '100', loadingState: LoadingState.LOADING_VM_WITH_ID }; const action = onLoadedProject(initialState.loadingState, true, true); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); + expect(resultState.projectId).toBe('100'); }); test('onLoadedProject(LOADING_VM_WITH_ID, false, true) results in state SHOWING_WITH_ID', () => { const initialState = { + projectId: '100', loadingState: LoadingState.LOADING_VM_WITH_ID }; - const action = onLoadedProject(initialState.loadingState, true, true); + const action = onLoadedProject(initialState.loadingState, false, true); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); + expect(resultState.projectId).toBe('100'); }); +// case where we started out viewing a project with a projectId, then +// started to load another project; but loading fails. We go back to +// showing the original project. test('onLoadedProject(LOADING_VM_WITH_ID, false, false), with project id, ' + 'results in state SHOWING_WITH_ID', () => { const initialState = { - loadingState: LoadingState.LOADING_VM_WITH_ID, - projectId: '12345' + projectId: '100', + loadingState: LoadingState.LOADING_VM_WITH_ID }; const action = onLoadedProject(initialState.loadingState, false, false); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); + expect(resultState.projectId).toBe('100'); }); +// case where we started out viewing a project with default projectId, then +// started to load one with an id, such as in standalone mode when user adds +// '#PROJECT_ID_NUMBER' to the URI; but loading fails. We go back to +// showing the original project. test('onLoadedProject(LOADING_VM_WITH_ID, false, false), with no project id, ' + 'results in state SHOWING_WITHOUT_ID', () => { const initialState = { - loadingState: LoadingState.LOADING_VM_WITH_ID, - projectId: null + projectId: '0', + loadingState: LoadingState.LOADING_VM_WITH_ID }; const action = onLoadedProject(initialState.loadingState, false, false); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); + expect(resultState.projectId).toBe('0'); }); // onLoadedProject: LOADING_VM_FILE_UPLOAD test('onLoadedProject(LOADING_VM_FILE_UPLOAD, true, true) prepares to save', () => { const initialState = { + projectId: '100', loadingState: LoadingState.LOADING_VM_FILE_UPLOAD }; const action = onLoadedProject(initialState.loadingState, true, true); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.AUTO_UPDATING); + expect(resultState.projectId).toBe('100'); }); test('onLoadedProject(LOADING_VM_FILE_UPLOAD, false, true) results in state SHOWING_WITHOUT_ID', () => { const initialState = { + projectId: '0', loadingState: LoadingState.LOADING_VM_FILE_UPLOAD }; const action = onLoadedProject(initialState.loadingState, false, true); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); + expect(resultState.projectId).toBe('0'); }); test('onLoadedProject(LOADING_VM_FILE_UPLOAD, false, false), when we know project id, ' + 'results in state SHOWING_WITH_ID', () => { const initialState = { - loadingState: LoadingState.LOADING_VM_FILE_UPLOAD, - projectId: '12345' + projectId: '100', + loadingState: LoadingState.LOADING_VM_FILE_UPLOAD }; const action = onLoadedProject(initialState.loadingState, false, false); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); + expect(resultState.projectId).toBe('100'); }); test('onLoadedProject(LOADING_VM_FILE_UPLOAD, false, false), when we ' + 'don\'t know project id, results in state SHOWING_WITHOUT_ID', () => { const initialState = { - loadingState: LoadingState.LOADING_VM_FILE_UPLOAD, - projectId: null + projectId: '0', + loadingState: LoadingState.LOADING_VM_FILE_UPLOAD }; const action = onLoadedProject(initialState.loadingState, false, false); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); + expect(resultState.projectId).toBe('0'); }); // onLoadedProject: LOADING_VM_NEW_DEFAULT test('onLoadedProject(LOADING_VM_NEW_DEFAULT, true, true) results in state SHOWING_WITHOUT_ID', () => { const initialState = { + projectId: '0', loadingState: LoadingState.LOADING_VM_NEW_DEFAULT }; const action = onLoadedProject(initialState.loadingState, true, true); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); + expect(resultState.projectId).toBe('0'); }); test('onLoadedProject(LOADING_VM_NEW_DEFAULT, false, true) results in state SHOWING_WITHOUT_ID', () => { const initialState = { + projectId: '0', loadingState: LoadingState.LOADING_VM_NEW_DEFAULT }; const action = onLoadedProject(initialState.loadingState, false, true); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); + expect(resultState.projectId).toBe('0'); }); test('onLoadedProject(LOADING_VM_NEW_DEFAULT, false, false) results in ERROR state', () => { const initialState = { + projectId: '0', loadingState: LoadingState.LOADING_VM_NEW_DEFAULT }; const action = onLoadedProject(initialState.loadingState, false, false); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.ERROR); + expect(resultState.projectId).toBe('0'); }); // doneUpdatingProject test('doneUpdatingProject with id results in state SHOWING_WITH_ID', () => { const initialState = { + projectId: '100', loadingState: LoadingState.MANUAL_UPDATING }; const action = doneUpdatingProject(initialState.loadingState); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); + expect(resultState.projectId).toBe('100'); }); test('doneUpdatingProject with id, before copy occurs, results in state CREATING_COPY', () => { const initialState = { + projectId: '100', loadingState: LoadingState.UPDATING_BEFORE_COPY }; const action = doneUpdatingProject(initialState.loadingState); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.CREATING_COPY); + expect(resultState.projectId).toBe('100'); }); test('doneUpdatingProject with id, before new, results in state FETCHING_NEW_DEFAULT', () => { const initialState = { + projectId: '100', loadingState: LoadingState.UPDATING_BEFORE_NEW }; const action = doneUpdatingProject(initialState.loadingState); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.FETCHING_NEW_DEFAULT); + expect(resultState.projectId).toBe('0'); // resets id }); test('calling setProjectId, using with same id as already showing, ' + @@ -272,84 +303,102 @@ test('setProjectId, with same id as before, but not same type, ' + test('requestNewProject, when can\'t create/save, results in FETCHING_NEW_DEFAULT', () => { const initialState = { + projectId: '0', loadingState: LoadingState.SHOWING_WITHOUT_ID }; const action = requestNewProject(false); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.FETCHING_NEW_DEFAULT); + expect(resultState.projectId).toBe('0'); }); test('requestNewProject, when can create/save, results in UPDATING_BEFORE_NEW ' + '(in order to save before fetching default project)', () => { const initialState = { + projectId: '100', loadingState: LoadingState.SHOWING_WITH_ID }; const action = requestNewProject(true); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.UPDATING_BEFORE_NEW); + expect(resultState.projectId).toBe('100'); }); test('requestProjectUpload when project not loaded results in state LOADING_VM_FILE_UPLOAD', () => { const initialState = { + projectId: null, loadingState: LoadingState.NOT_LOADED }; const action = requestProjectUpload(initialState.loadingState); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.LOADING_VM_FILE_UPLOAD); + expect(resultState.projectId).toBe(null); }); test('requestProjectUpload when showing project with id results in state LOADING_VM_FILE_UPLOAD', () => { const initialState = { + projectId: '100', loadingState: LoadingState.SHOWING_WITH_ID }; const action = requestProjectUpload(initialState.loadingState); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.LOADING_VM_FILE_UPLOAD); + expect(resultState.projectId).toBe('100'); }); test('requestProjectUpload when showing project without id results in state LOADING_VM_FILE_UPLOAD', () => { const initialState = { + projectId: null, loadingState: LoadingState.SHOWING_WITHOUT_ID }; const action = requestProjectUpload(initialState.loadingState); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.LOADING_VM_FILE_UPLOAD); + expect(resultState.projectId).toBe(null); }); test('manualUpdateProject should prepare to update', () => { const initialState = { + projectId: '100', loadingState: LoadingState.SHOWING_WITH_ID }; const action = manualUpdateProject(); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.MANUAL_UPDATING); + expect(resultState.projectId).toBe('100'); }); test('autoUpdateProject should prepare to update', () => { const initialState = { + projectId: '100', loadingState: LoadingState.SHOWING_WITH_ID }; const action = autoUpdateProject(); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.AUTO_UPDATING); + expect(resultState.projectId).toBe('100'); }); test('saveProjectAsCopy should save, before preparing to save as a copy', () => { const initialState = { + projectId: '100', loadingState: LoadingState.SHOWING_WITH_ID }; const action = saveProjectAsCopy(); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.UPDATING_BEFORE_COPY); + expect(resultState.projectId).toBe('100'); }); test('remixProject should prepare to remix', () => { const initialState = { + projectId: '100', loadingState: LoadingState.SHOWING_WITH_ID }; const action = remixProject(); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.REMIXING); + expect(resultState.projectId).toBe('100'); }); test('projectError from various states should show error', () => { @@ -368,11 +417,13 @@ test('projectError from various states should show error', () => { for (const startState of startStates) { const initialState = { error: null, + projectId: '100', loadingState: startState }; const action = projectError('Error string'); const resultState = projectStateReducer(initialState, action); expect(resultState.error).toEqual('Error string'); + expect(resultState.projectId).toBe('100'); } }); @@ -386,11 +437,13 @@ test('fatal projectError should show error state', () => { for (const startState of startStates) { const initialState = { error: null, + projectId: '100', loadingState: startState }; const action = projectError('Error string'); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.ERROR); + expect(resultState.projectId).toBe('100'); } }); @@ -405,11 +458,13 @@ test('non-fatal projectError should show normal state', () => { for (const startState of startStates) { const initialState = { error: null, + projectId: '100', loadingState: startState }; const action = projectError('Error string'); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); + expect(resultState.projectId).toBe('100'); } }); @@ -423,6 +478,7 @@ test('projectError when creating new while viewing project with id should ' + const action = projectError('Error string'); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); + expect(resultState.projectId).toBe('12345'); }); test('projectError when creating new while logged out, looking at default project ' + @@ -435,16 +491,19 @@ test('projectError when creating new while logged out, looking at default projec const action = projectError('Error string'); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); + expect(resultState.projectId).toBe('0'); }); test('projectError encountered while in state FETCHING_WITH_ID results in ' + 'ERROR state', () => { const initialState = { error: null, + projectId: null, loadingState: LoadingState.FETCHING_WITH_ID }; const action = projectError('Error string'); const resultState = projectStateReducer(initialState, action); expect(resultState.loadingState).toBe(LoadingState.ERROR); + expect(resultState.projectId).toBe(null); expect(resultState.error).toEqual('Error string'); });