import { createLocalVue, mount, RefSelector, Wrapper } from '@vue/test-utils'; import Vue, { VueConstructor } from 'vue'; import { createMockFile } from '../../../tests/helpers/file'; import { addMessages } from '../../../tests/helpers/lang'; import FilePlugin from '../../utils/file/file'; import { BUTTON_NAME, FILE_SELECT_NAME, ICON_BUTTON_NAME, MODAL_NAME } from '../component-names'; import { CROP_IMAGE_NAME, IMAGE_DISPLAYER_NAME } from './component-names'; import { MPhotoEditor, MPhotoEditorMode } from './photo-editor'; const REF_MODAL: RefSelector = { ref: 'modal' }; const REF_IMAGE_DISPLAYER: RefSelector = { ref: 'imageDisplayer' }; const REF_CROP_IMAGE: RefSelector = { ref: 'cropImage' }; const REF_CANCEL_BUTTON: RefSelector = { ref: 'cancelButton' }; const REF_FILE_SELECT: RefSelector = { ref: 'fileSelect' }; const REF_CROP_BUTTON: RefSelector = { ref: 'cropButton' }; const getStubs: any = () => { return { [BUTTON_NAME]: '', [CROP_IMAGE_NAME]: '
', [FILE_SELECT_NAME]: '
', [ICON_BUTTON_NAME]: '', [IMAGE_DISPLAYER_NAME]: '
', [MODAL_NAME]: '
' }; }; describe('MCropImage', () => { let localVue: VueConstructor; let wrapper: Wrapper; beforeEach(() => { localVue = createLocalVue(); localVue.use(FilePlugin); addMessages(localVue, ['components/photo-editor/photo-editor.lang.en.json']); wrapper = mount(MPhotoEditor, { localVue, stubs: getStubs(), propsData: { storeName: 'storename' } }); wrapper.vm.$file.files = jest.fn().mockReturnValue([]); }); describe(`when closing the modal`, () => { it('should manage event "close"', async () => { wrapper.setMethods({ close: jest.fn() }); wrapper.find(REF_MODAL).vm.$emit('close'); expect(wrapper.vm.close).toHaveBeenCalledWith(); }); it('should emit close', () => { wrapper.vm.close(); expect(wrapper.emitted('close')).toBeDefined(); }); }); describe(`when deleting`, () => { it('should manage event "deleteImage"', async () => { wrapper.setProps({ urlPhoto: 'url' }); wrapper.setMethods({ deleteImage: jest.fn() }); wrapper.find(REF_IMAGE_DISPLAYER).vm.$emit('delete-image'); expect(wrapper.vm.deleteImage).toHaveBeenCalledWith(); }); it('should emit delete', () => { wrapper.vm.deleteImage(); expect(wrapper.emitted('delete')).toBeDefined(); }); }); describe(`when ${MPhotoEditorMode.CROP}`, () => { beforeEach(() => { wrapper.vm.photoEditorMode = MPhotoEditorMode.CROP; }); it('should manage the event "image-cropped"', async () => { wrapper.setMethods({ saveImage: jest.fn() }); wrapper.find(REF_CROP_IMAGE).vm.$emit('image-cropped'); expect(wrapper.vm.saveImage).toHaveBeenCalledWith(); }); it(`should emit "save" with the image cropped`, () => { const mockFile: File = createMockFile('test.jpg'); wrapper.vm.saveImage(mockFile); expect(wrapper.emitted('save')[0]).toEqual([mockFile]); }); it('should manage the click event', async () => { wrapper.vm.photoEditorMode = MPhotoEditorMode.CROP; wrapper.setMethods({ crop: jest.fn() }); wrapper.find(REF_CROP_BUTTON).vm.$emit('click'); expect(wrapper.vm.crop).toHaveBeenCalledWith(); }); }); describe(`when canceling`, () => { beforeEach(() => { wrapper.vm.photoEditorMode = MPhotoEditorMode.CROP; }); it('should manage the event "click" to cancel', async () => { wrapper.setMethods({ initialize: jest.fn() }); wrapper.find(REF_CANCEL_BUTTON).vm.$emit('click'); expect(wrapper.vm.initialize).toHaveBeenCalledWith(); }); describe(`while cropping`, () => { it(`should switch to ${MPhotoEditorMode.SELECT}`, () => { wrapper.vm.photoEditorMode = MPhotoEditorMode.CROP; wrapper.vm.initialize(); expect(wrapper.vm.photoEditorMode).toEqual(MPhotoEditorMode.SELECT); }); }); }); describe(`when ${MPhotoEditorMode.SELECT}`, () => { it('should manage the event "file-selected"', async () => { wrapper.setMethods({ replaceImage: jest.fn() }); wrapper.find(REF_FILE_SELECT).vm.$emit('file-selected'); expect(wrapper.vm.replaceImage).toHaveBeenCalledWith(); }); }); });