From 2e11787ac5a5f52f8e4a17ba4fb48b790ca78239 Mon Sep 17 00:00:00 2001
From: Ben Wheeler <wheeler.benjamin@gmail.com>
Date: Wed, 26 Feb 2020 16:48:33 -0500
Subject: [PATCH] test resulting projectId; add comments; fix params

---
 .../reducers/project-state-reducer.test.js    | 77 ++++++++++++++++---
 1 file changed, 68 insertions(+), 9 deletions(-)

diff --git a/test/unit/reducers/project-state-reducer.test.js b/test/unit/reducers/project-state-reducer.test.js
index aee74afd8..faf208bf4 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');
 });
-- 
GitLab