import 'reflect-metadata'; import { ProductColoursMaterialsTechContentComponent, } from './product-colours-materials-tech-content.component'; const initProductColoursMaterialsTechContentComponent = () => new ProductColoursMaterialsTechContentComponent(); describe('get showContent', () => { const initGetShowContentData = () => { const mockColoursByDisplaySku = { 'Foo 1 (shipped from UK)': [ {name: 'Black', hexCode: '#000000'}, {name: 'Red', hexCode: '#FF0000'}, {name: 'Green', hexCode: '#00FF00'}, {name: 'Blue', hexCode: '#0000FF'}, ], 'Foo 2 (shipped from US)': [ {name: 'Black', hexCode: '#000000'}, {name: 'Red', hexCode: '#FF0000'}, {name: 'Green', hexCode: '#00FF00'}, {name: 'Blue', hexCode: '#0000FF'}, ], }; const mockMaterialsByDisplaySku = { 'Foo 1 (shipped from UK)': 'Lorem ipsum', 'Foo 2 (shipped from US)': 'Dolor sit amet', }; const productColoursMaterialsTechContentComponent = initProductColoursMaterialsTechContentComponent(); return { mockColoursByDisplaySku, mockMaterialsByDisplaySku, productColoursMaterialsTechContentComponent, }; }; test('Returns false if there are no productDisplaySkus', () => { const { productColoursMaterialsTechContentComponent, } = initGetShowContentData(); const result = productColoursMaterialsTechContentComponent.showContent; expect(result).toBe(false); }); test('Returns false if there is an empty productDisplaySkus', () => { const { productColoursMaterialsTechContentComponent, } = initGetShowContentData(); productColoursMaterialsTechContentComponent.productDisplaySkus = []; const result = productColoursMaterialsTechContentComponent.showContent; expect(result).toBe(false); }); test('Returns false if there are no colours or materials', () => { const { productColoursMaterialsTechContentComponent, } = initGetShowContentData(); productColoursMaterialsTechContentComponent.productDisplaySkus = ['foo']; const result = productColoursMaterialsTechContentComponent.showContent; expect(result).toBe(false); }); test('Returns false if there are only empty colours are provided', () => { const { productColoursMaterialsTechContentComponent, } = initGetShowContentData(); productColoursMaterialsTechContentComponent.productDisplaySkus = ['foo']; productColoursMaterialsTechContentComponent.coloursByDisplaySku = {}; const result = productColoursMaterialsTechContentComponent.showContent; expect(result).toBe(false); }); // tslint:disable-next-line test('Returns false if there are only empty materials are provided', () => { const { productColoursMaterialsTechContentComponent, } = initGetShowContentData(); productColoursMaterialsTechContentComponent.productDisplaySkus = ['foo']; productColoursMaterialsTechContentComponent.materialsByDisplaySku = {}; const result = productColoursMaterialsTechContentComponent.showContent; expect(result).toBe(false); }); test('Returns true if there are only colours are provided', () => { const { mockColoursByDisplaySku, productColoursMaterialsTechContentComponent, } = initGetShowContentData(); productColoursMaterialsTechContentComponent.productDisplaySkus = ['foo']; productColoursMaterialsTechContentComponent.coloursByDisplaySku = mockColoursByDisplaySku; const result = productColoursMaterialsTechContentComponent.showContent; expect(result).toBe(true); }); test('Returns true if there are only materials are provided', () => { const { mockMaterialsByDisplaySku, productColoursMaterialsTechContentComponent, } = initGetShowContentData(); productColoursMaterialsTechContentComponent.productDisplaySkus = ['foo']; productColoursMaterialsTechContentComponent.materialsByDisplaySku = mockMaterialsByDisplaySku; const result = productColoursMaterialsTechContentComponent.showContent; expect(result).toBe(true); }); test('Returns true if both colours and materials are provided', () => { const { mockMaterialsByDisplaySku, productColoursMaterialsTechContentComponent, } = initGetShowContentData(); productColoursMaterialsTechContentComponent.productDisplaySkus = ['foo']; productColoursMaterialsTechContentComponent.materialsByDisplaySku = mockMaterialsByDisplaySku; const result = productColoursMaterialsTechContentComponent.showContent; expect(result).toBe(true); }); }); describe('getMaterialsForBrand', () => { const initGetMaterialsForBrandData = () => { const mockProductDisplaySkus = [ 'Foo 1 (shipped from UK)', 'Foo 2 (shipped from US)']; const mockMaterialsByDisplaySku = { 'Foo 1 (shipped from UK)': 'Lorem ipsum', 'Foo 2 (shipped from US)': 'Dolor sit amet', }; const productColoursMaterialsTechContentComponent = initProductColoursMaterialsTechContentComponent(); productColoursMaterialsTechContentComponent.productDisplaySkus = mockProductDisplaySkus; productColoursMaterialsTechContentComponent.materialsByDisplaySku = mockMaterialsByDisplaySku; return { mockMaterialsByDisplaySku, mockProductDisplaySkus, productColoursMaterialsTechContentComponent, }; }; // tslint:disable-next-line test('Returns the correct array of materials for the supplied brand', () => { const { mockProductDisplaySkus, mockMaterialsByDisplaySku, productColoursMaterialsTechContentComponent, } = initGetMaterialsForBrandData(); const result = productColoursMaterialsTechContentComponent.getMaterialsForBrand( mockProductDisplaySkus[0], ); expect(result).toBe( mockMaterialsByDisplaySku[mockProductDisplaySkus[0]], ); }); }); describe('getColoursForBrand', () => { const initGetColoursForBrandData = () => { const mockProductDisplaySkus = [ 'Foo 1 (shipped from UK)', 'Foo 2 (shipped from US)']; const mockColoursByDisplaySku = { 'Foo 1 (shipped from UK)': [ {name: 'Black', hexCode: '#000000'}, {name: 'Red', hexCode: '#FF0000'}, {name: 'Green', hexCode: '#00FF00'}, {name: 'Blue', hexCode: '#0000FF'}, ], 'Foo 2 (shipped from US)': [ {name: 'Black', hexCode: '#000000'}, {name: 'Red', hexCode: '#FF0000'}, {name: 'Green', hexCode: '#00FF00'}, {name: 'Blue', hexCode: '#0000FF'}, ], }; const productColoursMaterialsTechContentComponent = initProductColoursMaterialsTechContentComponent(); productColoursMaterialsTechContentComponent.productDisplaySkus = mockProductDisplaySkus; productColoursMaterialsTechContentComponent.coloursByDisplaySku = mockColoursByDisplaySku; return { mockColoursByDisplaySku, mockProductDisplaySkus, productColoursMaterialsTechContentComponent, }; }; // tslint:disable-next-line test('Returns the correct array of materials for the supplied brand', () => { const { mockProductDisplaySkus, mockColoursByDisplaySku, productColoursMaterialsTechContentComponent, } = initGetColoursForBrandData(); const result = productColoursMaterialsTechContentComponent.getColoursForBrand( mockProductDisplaySkus[0], ); expect(result).toBe( mockColoursByDisplaySku[mockProductDisplaySkus[0]], ); }); }); describe('isBrandTitleVisible', () => { test('Returns true if there are 2 display skus', () => { const productColoursMaterialsTechContentComponent = initProductColoursMaterialsTechContentComponent(); productColoursMaterialsTechContentComponent.productDisplaySkus = ['1', '2']; expect( productColoursMaterialsTechContentComponent.isBrandTitleVisible(), ).toBe(true); }); test('Returns false if there is only 1 display skus', () => { const productColoursMaterialsTechContentComponent = initProductColoursMaterialsTechContentComponent(); productColoursMaterialsTechContentComponent.productDisplaySkus = ['1']; expect( productColoursMaterialsTechContentComponent.isBrandTitleVisible(), ).toBe(false); }); });