import { EventEmitter } from '@angular/core'; import { FulfilmentFieldControlComponent, } from './fulfilment-field-control.component'; const initFulfilmentFieldControlComponent = () => { return new FulfilmentFieldControlComponent(); }; describe('defaults', () => { test('Sets defaults for fulfilmentFieldName', () => { expect(initFulfilmentFieldControlComponent().fulfilmentFieldName) .toBeUndefined(); }); test('Sets defaults for fulfilmentFieldImageUrl', () => { expect(initFulfilmentFieldControlComponent().fulfilmentFieldImageUrl) .toBeUndefined(); }); test('Sets defaults for fulfilmentFieldAdditionalCost', () => { expect( initFulfilmentFieldControlComponent().fulfilmentFieldAdditionalCost, ).toBeUndefined(); }); test('Sets defaults for isCurrentField', () => { expect(initFulfilmentFieldControlComponent().isCurrentField) .toBeUndefined(); }); test('Sets defaults for currency', () => { expect(initFulfilmentFieldControlComponent().currency) .toBe('GBP'); }); test('Sets defaults for showPricing', () => { expect(initFulfilmentFieldControlComponent().showPricing) .toBe(true); }); test('Sets defaults for showDeleteButton', () => { expect(initFulfilmentFieldControlComponent().showDeleteButton) .toBe(true); }); test('Sets default for isUploading', () => { expect(initFulfilmentFieldControlComponent().isUploading) .toBe(false); }); test('Sets default for uploadProgress', () => { expect(initFulfilmentFieldControlComponent().uploadProgress) .toBe(0); }); test('Sets default for editToolsMenuOpen', () => { expect(initFulfilmentFieldControlComponent().editToolsMenuOpen) .toBe(false); }); test('Sets defaults for deleteButtonTooltipText', () => { expect(initFulfilmentFieldControlComponent().deleteButtonTooltipText) .toBe('Delete'); }); test('Sets defaults for replaceButtonTooltipText', () => { expect(initFulfilmentFieldControlComponent().replaceButtonTooltipText) .toBe('Replace'); }); test('Sets defaults for invertButtonTooltipText', () => { expect(initFulfilmentFieldControlComponent().invertButtonTooltipText) .toBe('Invert'); }); test('Sets defaults for alignHorizontalButtonTooltipText', () => { expect(initFulfilmentFieldControlComponent() .alignHorizontalButtonTooltipText, ) .toBe('Align horizontally'); }); test('Sets defaults for alignVerticalButtonTooltipText', () => { expect( initFulfilmentFieldControlComponent() .alignVerticalButtonTooltipText, ) .toBe('Align vertically'); }); test('Sets defaults for resetButtonTooltipText', () => { expect(initFulfilmentFieldControlComponent().resetButtonTooltipText) .toBe('Reset'); }); test('Sets defaults for uploadingText', () => { expect(initFulfilmentFieldControlComponent().uploadingText) .toBe('Uploading'); }); test('Sets defaults for onDeleteClicked', () => { expect(initFulfilmentFieldControlComponent().onDeleteClicked) .toEqual(new EventEmitter()); }); test('Sets defaults for onReplaceImage', () => { expect(initFulfilmentFieldControlComponent().onReplaceImage) .toEqual(new EventEmitter()); }); test('Sets defaults for onReplaceUploadFilesError', () => { expect(initFulfilmentFieldControlComponent().onReplaceUploadFilesError) .toEqual(new EventEmitter()); }); test('Sets defaults for onInvertClicked', () => { expect(initFulfilmentFieldControlComponent().onInvertClicked) .toEqual(new EventEmitter()); }); test('Sets defaults for onSectionClicked', () => { expect(initFulfilmentFieldControlComponent().onSectionClicked) .toEqual(new EventEmitter()); }); test('Sets defaults for onToggleEditToolsMenu', () => { expect(initFulfilmentFieldControlComponent().onToggleEditToolsMenu) .toEqual(new EventEmitter()); }); }); describe('isClosed', () => { const isClosedTest = ({ expectedResult, fulfilmentFieldImageUrl, }: { expectedResult: boolean, fulfilmentFieldImageUrl?: string, }) => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.fulfilmentFieldImageUrl = fulfilmentFieldImageUrl; const result = fulfilmentFieldControlComponent.isClosed; expect(result).toBe(expectedResult); }; test('Returns true if the fulfilmentFieldImageUrl is undefined', () => { isClosedTest({ expectedResult: true, fulfilmentFieldImageUrl: undefined, }); }); test('Returns true if the fulfilmentFieldImageUrl is null', () => { isClosedTest({ expectedResult: true, fulfilmentFieldImageUrl: null, }); }); test('Returns false if the fulfilmentFieldImageUrl has a value', () => { isClosedTest({ expectedResult: false, fulfilmentFieldImageUrl: 'some-image-url', }); }); }); describe('get backgroundImage', () => { test('Returns null if isUploading is true', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.isUploading = true; expect(fulfilmentFieldControlComponent.backgroundImage) .toBeNull(); }); test('Returns a background url if isUploading is false', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.isUploading = false; fulfilmentFieldControlComponent.fulfilmentFieldImageUrl = 'http://image.com'; expect(fulfilmentFieldControlComponent.backgroundImage) .toBe('url(http://image.com)'); }); }); describe('showAdditionalCost', () => { const showAdditonalCostTests = ({ expectedResult, fulfilmentFieldImageUrl, showPricing, }: { expectedResult: boolean, fulfilmentFieldImageUrl?: string, showPricing: boolean, }) => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.fulfilmentFieldImageUrl = fulfilmentFieldImageUrl; fulfilmentFieldControlComponent.showPricing = showPricing; const result = fulfilmentFieldControlComponent.showAdditionalCost(); expect(result).toBe(expectedResult); }; // tslint:disable-next-line test('Returns true if the fulfilmentFieldImageUrl is null and showPricing is true', () => { showAdditonalCostTests({ expectedResult: true, fulfilmentFieldImageUrl: null, showPricing: true, }); }); // tslint:disable-next-line test('Returns false if the fulfilmentFieldImageUrl has a value and showPricing is true', () => { showAdditonalCostTests({ expectedResult: false, fulfilmentFieldImageUrl: 'some-image-url', showPricing: true, }); }); // tslint:disable-next-line test('Returns false if the fulfilmentFieldImageUrl is null but showPricing is false', () => { showAdditonalCostTests({ expectedResult: false, fulfilmentFieldImageUrl: null, showPricing: false, }); }); }); describe('deleteClicked', () => { test('Emits an event to onDeleteClicked', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.onDeleteClicked.emit = jest.fn(); fulfilmentFieldControlComponent.deleteClicked(); expect( fulfilmentFieldControlComponent.onDeleteClicked.emit, ).toHaveBeenCalled(); }); }); describe('replaceImage', () => { test('Emits an event to onReplaceImage', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.onReplaceImage.emit = jest.fn(); const images = [] as File[]; fulfilmentFieldControlComponent.replaceImage(images); expect( fulfilmentFieldControlComponent.onReplaceImage.emit, ).toHaveBeenCalledWith(images); }); }); describe('replaceUploadFilesError', () => { // tslint:disable-next-line test('Emits an event to onReplaceUploadFilesError if there is no fulfilmentFieldImageUrl', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.onReplaceUploadFilesError.emit = jest.fn(); fulfilmentFieldControlComponent.replaceUploadFilesError(); expect( fulfilmentFieldControlComponent.onReplaceUploadFilesError.emit, ).toHaveBeenCalled(); }); }); describe('invertClicked', () => { // tslint:disable-next-line test('Emits an event to onInvertClicked', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.onInvertClicked.emit = jest.fn(); fulfilmentFieldControlComponent.invertClicked(); expect( fulfilmentFieldControlComponent.onInvertClicked.emit, ).toHaveBeenCalled(); }); }); describe('alignHorizontralClicked', () => { // tslint:disable-next-line test('Emits an event to onAlignHorizontalClicked', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.onAlignHorizontalClicked.emit = jest.fn(); fulfilmentFieldControlComponent.alignHorizontalClicked(); expect( fulfilmentFieldControlComponent.onAlignHorizontalClicked.emit, ).toHaveBeenCalled(); }); }); describe('alignVerticalClicked', () => { // tslint:disable-next-line test('Emits an event to onAlignVerticalClicked', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.onAlignVerticalClicked.emit = jest.fn(); fulfilmentFieldControlComponent.alignVerticalClicked(); expect( fulfilmentFieldControlComponent.onAlignVerticalClicked.emit, ).toHaveBeenCalled(); }); }); describe('sectionClicked', () => { // tslint:disable-next-line test('Emits an event to onSectionClicked if there is no fulfilmentFieldImageUrl', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.onSectionClicked.emit = jest.fn(); fulfilmentFieldControlComponent.sectionClicked(); expect( fulfilmentFieldControlComponent.onSectionClicked.emit, ).toHaveBeenCalled(); }); }); describe('stopEventPropagation', () => { test('Stops the event propagating', () => { const event = {} as Event; event.stopPropagation = jest.fn(); const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.stopEventPropagation(event); expect(event.stopPropagation).toHaveBeenCalledTimes(1); }); }); describe('closeEditToolsMenu', () => { // tslint:disable-next-line test('Emits an event to onToggleEditToolsMenu with false', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.editToolsMenuOpen = false; fulfilmentFieldControlComponent.onToggleEditToolsMenu.emit = jest.fn(); fulfilmentFieldControlComponent.closeEditToolsMenu(); expect(fulfilmentFieldControlComponent.onToggleEditToolsMenu.emit) .toHaveBeenCalledWith(false); }); }); describe('toggleEditToolsMenu', () => { // tslint:disable-next-line test('Emits an event to onToggleEditToolsMenu with true if editToolsMenuOpen is false', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.editToolsMenuOpen = false; fulfilmentFieldControlComponent.onToggleEditToolsMenu.emit = jest.fn(); fulfilmentFieldControlComponent.toggleEditToolsMenu(); expect(fulfilmentFieldControlComponent.onToggleEditToolsMenu.emit) .toHaveBeenCalledWith(true); }); // tslint:disable-next-line test('Emits an event to onToggleEditToolsMenu with false if editToolsMenuOpen is true', () => { const fulfilmentFieldControlComponent = initFulfilmentFieldControlComponent(); fulfilmentFieldControlComponent.editToolsMenuOpen = true; fulfilmentFieldControlComponent.onToggleEditToolsMenu.emit = jest.fn(); fulfilmentFieldControlComponent.toggleEditToolsMenu(); expect(fulfilmentFieldControlComponent.onToggleEditToolsMenu.emit) .toHaveBeenCalledWith(false); }); });