Skip to content

Commit 7901c66

Browse files
committed
moved, updated sb file uploader tests, related project state tests
1 parent 4820132 commit 7901c66

File tree

5 files changed

+179
-108
lines changed

5 files changed

+179
-108
lines changed

src/reducers/project-state.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,12 +437,17 @@ const onLoadedProject = (loadingState, canSave, success) => {
437437
}
438438
} else {
439439
switch (loadingState) {
440+
case LoadingState.LOADING_VM_WITH_ID:
440441
case LoadingState.LOADING_VM_FILE_UPLOAD:
441442
return {
442443
type: RETURN_TO_SHOWING
443444
};
445+
case LoadingState.LOADING_VM_NEW_DEFAULT:
446+
return {
447+
type: START_ERROR
448+
};
444449
default:
445-
break;
450+
return;
446451
}
447452
}
448453
};

test/unit/containers/sb-file-uploader.test.jsx

Lines changed: 0 additions & 87 deletions
This file was deleted.

test/unit/reducers/project-state-reducer.test.js

Lines changed: 65 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,49 @@ test('onFetchedProjectData new loads project data into vm', () => {
9292
expect(resultState.projectData).toBe('1010101');
9393
});
9494

95-
test('onLoadedProject upload, with canSave false, shows without id', () => {
95+
// onLoadedProject: LOADING_VM_WITH_ID
96+
97+
test('onLoadedProject (LOADING_VM_WITH_ID, true, true) shows with id', () => {
9698
const initialState = {
97-
loadingState: LoadingState.LOADING_VM_FILE_UPLOAD
99+
loadingState: LoadingState.LOADING_VM_WITH_ID
98100
};
99-
const action = onLoadedProject(initialState.loadingState, false, true);
101+
const action = onLoadedProject(initialState.loadingState, true, true);
102+
const resultState = projectStateReducer(initialState, action);
103+
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID);
104+
});
105+
106+
test('onLoadedProject (LOADING_VM_WITH_ID, false, true) shows with id', () => {
107+
const initialState = {
108+
loadingState: LoadingState.LOADING_VM_WITH_ID
109+
};
110+
const action = onLoadedProject(initialState.loadingState, true, true);
111+
const resultState = projectStateReducer(initialState, action);
112+
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID);
113+
});
114+
115+
test('onLoadedProject (LOADING_VM_WITH_ID, false, false), with project id, shows with id', () => {
116+
const initialState = {
117+
loadingState: LoadingState.LOADING_VM_WITH_ID,
118+
projectId: '12345'
119+
};
120+
const action = onLoadedProject(initialState.loadingState, false, false);
121+
const resultState = projectStateReducer(initialState, action);
122+
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID);
123+
});
124+
125+
test('onLoadedProject (LOADING_VM_WITH_ID, false, false), with no project id, shows without id', () => {
126+
const initialState = {
127+
loadingState: LoadingState.LOADING_VM_WITH_ID,
128+
projectId: null
129+
};
130+
const action = onLoadedProject(initialState.loadingState, false, false);
100131
const resultState = projectStateReducer(initialState, action);
101132
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID);
102133
});
103134

104-
test('onLoadedProject upload, with canSave true, prepares to save', () => {
135+
// onLoadedProject: LOADING_VM_FILE_UPLOAD
136+
137+
test('onLoadedProject(LOADING_VM_FILE_UPLOAD, true, true) prepares to save', () => {
105138
const initialState = {
106139
loadingState: LoadingState.LOADING_VM_FILE_UPLOAD
107140
};
@@ -110,25 +143,38 @@ test('onLoadedProject upload, with canSave true, prepares to save', () => {
110143
expect(resultState.loadingState).toBe(LoadingState.AUTO_UPDATING);
111144
});
112145

113-
test('onLoadedProject with id shows with id', () => {
146+
test('onLoadedProject (LOADING_VM_FILE_UPLOAD, false, true) shows without id', () => {
114147
const initialState = {
115-
loadingState: LoadingState.LOADING_VM_WITH_ID
148+
loadingState: LoadingState.LOADING_VM_FILE_UPLOAD
116149
};
117-
const action = onLoadedProject(initialState.loadingState, true, true);
150+
const action = onLoadedProject(initialState.loadingState, false, true);
151+
const resultState = projectStateReducer(initialState, action);
152+
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID);
153+
});
154+
155+
test('onLoadedProject (LOADING_VM_FILE_UPLOAD, false, false), with project id, shows with id', () => {
156+
const initialState = {
157+
loadingState: LoadingState.LOADING_VM_FILE_UPLOAD,
158+
projectId: '12345'
159+
};
160+
const action = onLoadedProject(initialState.loadingState, false, false);
118161
const resultState = projectStateReducer(initialState, action);
119162
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID);
120163
});
121164

122-
test('onLoadedProject new shows without id', () => {
165+
test('onLoadedProject (LOADING_VM_FILE_UPLOAD, false, false), with no project id, shows without id', () => {
123166
const initialState = {
124-
loadingState: LoadingState.LOADING_VM_NEW_DEFAULT
167+
loadingState: LoadingState.LOADING_VM_FILE_UPLOAD,
168+
projectId: null
125169
};
126-
const action = onLoadedProject(initialState.loadingState, false, true);
170+
const action = onLoadedProject(initialState.loadingState, false, false);
127171
const resultState = projectStateReducer(initialState, action);
128172
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID);
129173
});
130174

131-
test('onLoadedProject new, to save shows without id', () => {
175+
// onLoadedProject: LOADING_VM_NEW_DEFAULT
176+
177+
test('onLoadedProject (LOADING_VM_NEW_DEFAULT, true, true) shows without id', () => {
132178
const initialState = {
133179
loadingState: LoadingState.LOADING_VM_NEW_DEFAULT
134180
};
@@ -137,26 +183,26 @@ test('onLoadedProject new, to save shows without id', () => {
137183
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID);
138184
});
139185

140-
test('onLoadedProject with success false, no project id, shows without id', () => {
186+
test('onLoadedProject (LOADING_VM_NEW_DEFAULT, false, true) shows without id', () => {
141187
const initialState = {
142-
loadingState: LoadingState.LOADING_VM_WITH_ID,
143-
projectId: null
188+
loadingState: LoadingState.LOADING_VM_NEW_DEFAULT
144189
};
145-
const action = onLoadedProject(initialState.loadingState, false, false);
190+
const action = onLoadedProject(initialState.loadingState, false, true);
146191
const resultState = projectStateReducer(initialState, action);
147192
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID);
148193
});
149194

150-
test('onLoadedProject with success false, valid project id, shows with id', () => {
195+
test('onLoadedProject (LOADING_VM_NEW_DEFAULT, false, false) shows error', () => {
151196
const initialState = {
152-
loadingState: LoadingState.LOADING_VM_WITH_ID,
153-
projectId: '12345'
197+
loadingState: LoadingState.LOADING_VM_NEW_DEFAULT
154198
};
155199
const action = onLoadedProject(initialState.loadingState, false, false);
156200
const resultState = projectStateReducer(initialState, action);
157-
expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID);
201+
expect(resultState.loadingState).toBe(LoadingState.ERROR);
158202
});
159203

204+
// doneUpdatingProject
205+
160206
test('doneUpdatingProject with id shows with id', () => {
161207
const initialState = {
162208
loadingState: LoadingState.MANUAL_UPDATING

test/unit/util/project-saver-hoc.test.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ describe('projectSaverHOC', () => {
5656
expect(mockedUpdateProject).toHaveBeenCalled();
5757
});
5858

59-
test('if canSave is alreatdy true and we show a project with an id, project will NOT be saved', () => {
59+
test('if canSave is already true and we show a project with an id, project will NOT be saved', () => {
6060
const mockedSaveProject = jest.fn();
6161
const Component = () => <div />;
6262
const WrappedComponent = projectSaverHOC(Component);
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import 'web-audio-test-api';
2+
3+
import React from 'react';
4+
import configureStore from 'redux-mock-store';
5+
import {mount, shallow} from 'enzyme';
6+
import {LoadingState} from '../../../src/reducers/project-state';
7+
import VM from 'scratch-vm';
8+
9+
import SBFileUploaderHOC from '../../../src/lib/sb-file-uploader-hoc.jsx';
10+
11+
describe('SBFileUploaderHOC', () => {
12+
const mockStore = configureStore();
13+
let store;
14+
let vm;
15+
16+
// Wrap this in a function so it gets test specific states and can be reused.
17+
const getContainer = function () {
18+
const Component = () => <div />;
19+
return SBFileUploaderHOC(Component);
20+
};
21+
22+
const shallowMountWithContext = component => (
23+
shallow(component, {context: {store}})
24+
);
25+
26+
const unwrappedInstance = () => {
27+
const WrappedComponent = getContainer();
28+
// default starting state: looking at a project you created, not logged in
29+
const wrapper = shallowMountWithContext(
30+
<WrappedComponent
31+
projectChanged
32+
canSave={false}
33+
cancelFileUpload={jest.fn()}
34+
closeFileMenu={jest.fn()}
35+
requestProjectUpload={jest.fn()}
36+
userOwnsProject={false}
37+
vm={vm}
38+
onLoadingFinished={jest.fn()}
39+
onLoadingStarted={jest.fn()}
40+
onUpdateProjectTitle={jest.fn()}
41+
/>
42+
);
43+
return wrapper
44+
.dive() // unwrap redux Connect(SBFileUploaderComponent)
45+
.instance(); // SBFileUploaderComponent
46+
};
47+
48+
beforeEach(() => {
49+
vm = new VM();
50+
store = mockStore({
51+
scratchGui: {
52+
projectState: {
53+
loadingState: LoadingState.SHOWING_WITHOUT_ID
54+
},
55+
vm: {}
56+
},
57+
locales: {
58+
locale: 'en'
59+
}
60+
});
61+
});
62+
63+
test('correctly sets title with .sb3 filename', () => {
64+
const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb3');
65+
expect(projectName).toBe('my project is great');
66+
});
67+
68+
test('correctly sets title with .sb2 filename', () => {
69+
const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb2');
70+
expect(projectName).toBe('my project is great');
71+
});
72+
73+
test('correctly sets title with .sb filename', () => {
74+
const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb');
75+
expect(projectName).toBe('my project is great');
76+
});
77+
78+
test('sets blank title with filename with no extension', () => {
79+
const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great');
80+
expect(projectName).toBe('');
81+
});
82+
83+
test('if isLoadingUpload becomes true, without fileToUpload set, will call cancelFileUpload', () => {
84+
const mockedCancelFileUpload = jest.fn();
85+
const WrappedComponent = getContainer();
86+
const mounted = mount(
87+
<WrappedComponent
88+
projectChanged
89+
canSave={false}
90+
cancelFileUpload={mockedCancelFileUpload}
91+
closeFileMenu={jest.fn()}
92+
isLoadingUpload={false}
93+
requestProjectUpload={jest.fn()}
94+
store={store}
95+
userOwnsProject={false}
96+
vm={vm}
97+
onLoadingFinished={jest.fn()}
98+
onLoadingStarted={jest.fn()}
99+
onUpdateProjectTitle={jest.fn()}
100+
/>
101+
);
102+
mounted.setProps({
103+
isLoadingUpload: true
104+
});
105+
expect(mockedCancelFileUpload).toHaveBeenCalled();
106+
});
107+
});

0 commit comments

Comments
 (0)