Initial commit of 001code-html Scratch frontend project.
Includes scratch-gui, scratch-vm, scratch-blocks, scratch-render, scratch-l10n, and deployment config. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
68
scratch-gui/test/unit/util/project-fetcher-hoc.test.jsx
Normal file
68
scratch-gui/test/unit/util/project-fetcher-hoc.test.jsx
Normal file
@@ -0,0 +1,68 @@
|
||||
import React from 'react';
|
||||
import configureStore from 'redux-mock-store';
|
||||
|
||||
import {mountWithIntl} from '../../helpers/intl-helpers.jsx';
|
||||
|
||||
import ProjectFetcherHOC from '../../../src/lib/project-fetcher-hoc.jsx';
|
||||
import storage from '../../../src/lib/storage';
|
||||
import {LoadingState} from '../../../src/reducers/project-state';
|
||||
|
||||
jest.mock('react-ga');
|
||||
|
||||
describe('ProjectFetcherHOC', () => {
|
||||
const mockStore = configureStore();
|
||||
let store;
|
||||
|
||||
beforeEach(() => {
|
||||
store = mockStore({
|
||||
scratchGui: {
|
||||
projectState: {},
|
||||
vm: {
|
||||
clear: () => {},
|
||||
stop: () => {}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
test.skip('when there is an id, it tries to update the store with that id', () => {
|
||||
const Component = ({projectId}) => <div>{projectId}</div>;
|
||||
const WrappedComponent = ProjectFetcherHOC(Component);
|
||||
const mockSetProjectIdFunc = jest.fn();
|
||||
mountWithIntl(
|
||||
<WrappedComponent
|
||||
projectId="100"
|
||||
setProjectId={mockSetProjectIdFunc}
|
||||
store={store}
|
||||
/>
|
||||
);
|
||||
expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('100');
|
||||
});
|
||||
test.skip('when there is a reduxProjectId and isFetchingWithProjectId is true, it loads the project', () => {
|
||||
const mockedOnFetchedProject = jest.fn();
|
||||
const originalLoad = storage.load;
|
||||
storage.load = jest.fn((type, id) => Promise.resolve({data: id}));
|
||||
const Component = ({projectId}) => <div>{projectId}</div>;
|
||||
const WrappedComponent = ProjectFetcherHOC(Component);
|
||||
const mounted = mountWithIntl(
|
||||
<WrappedComponent
|
||||
store={store}
|
||||
onFetchedProjectData={mockedOnFetchedProject}
|
||||
/>
|
||||
);
|
||||
mounted.setProps({
|
||||
reduxProjectId: '100',
|
||||
isFetchingWithId: true,
|
||||
loadingState: LoadingState.FETCHING_WITH_ID
|
||||
});
|
||||
expect(storage.load).toHaveBeenLastCalledWith(
|
||||
storage.AssetType.Project, '100', storage.DataFormat.JSON
|
||||
);
|
||||
storage.load = originalLoad;
|
||||
// nextTick needed since storage.load is async, and onFetchedProject is called in its then()
|
||||
process.nextTick(
|
||||
() => expect(mockedOnFetchedProject)
|
||||
.toHaveBeenLastCalledWith('100', LoadingState.FETCHING_WITH_ID)
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user