import 'web-audio-test-api'; import React from 'react'; import configureStore from 'redux-mock-store'; import {mountWithIntl, shallowWithIntl} from '../../helpers/intl-helpers.jsx'; import {LoadingState} from '../../../src/reducers/project-state'; import VM from 'scratch-vm'; import SBFileUploaderHOC from '../../../src/lib/sb-file-uploader-hoc.jsx'; describe('SBFileUploaderHOC', () => { const mockStore = configureStore(); let store; let vm; // Wrap this in a function so it gets test specific states and can be reused. const getContainer = function () { const Component = () =>
; return SBFileUploaderHOC(Component); }; const shallowMountWithContext = component => ( shallowWithIntl(component, {context: {store}}) ); const unwrappedInstance = () => { const WrappedComponent = getContainer(); // default starting state: looking at a project you created, not logged in const wrapper = shallowMountWithContext( ); return wrapper .dive() // unwrap intl .dive() // unwrap redux Connect(SBFileUploaderComponent) .instance(); // SBFileUploaderComponent }; beforeEach(() => { vm = new VM(); store = mockStore({ scratchGui: { projectState: { loadingState: LoadingState.SHOWING_WITHOUT_ID }, vm: {} }, locales: { locale: 'en' } }); }); test('correctly sets title with .sb3 filename', () => { const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb3'); expect(projectName).toBe('my project is great'); }); test('correctly sets title with .sb2 filename', () => { const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb2'); expect(projectName).toBe('my project is great'); }); test('correctly sets title with .sb filename', () => { const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb'); expect(projectName).toBe('my project is great'); }); test('sets blank title with filename with no extension', () => { const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great'); expect(projectName).toBe(''); }); /* tw: test is broken by flag required to fix issues with multiple instances test('if isLoadingUpload becomes true, without fileToUpload set, will call cancelFileUpload', () => { const mockedCancelFileUpload = jest.fn(); const WrappedComponent = getContainer(); const mounted = mountWithIntl( ); mounted.setProps({ isLoadingUpload: true }); expect(mockedCancelFileUpload).toHaveBeenCalled(); }); */ });