diff --git a/src/components/address-output/_macro.spec.js b/src/components/address-output/_macro.spec.js index d94484c316..692cf12432 100644 --- a/src/components/address-output/_macro.spec.js +++ b/src/components/address-output/_macro.spec.js @@ -5,94 +5,141 @@ import * as cheerio from 'cheerio'; import axe from '../../tests/helpers/axe'; import { renderComponent } from '../../tests/helpers/rendering'; -const EXAMPLE_ADDRESS_OUTPUT_FULL = { - unit: 'Unit 5', - organisation: 'Trescos', - line1: 'Abingdon Road', - line2: 'Goathill', - town: 'Barry', - postcode: 'AB12 6UH', -}; - -const EXAMPLE_ADDRESS_OUTPUT_NONE = {}; - -describe('macro: address-output', () => { - it('passes jest-axe checks', async () => { - const $ = cheerio.load(renderComponent('address-output', EXAMPLE_ADDRESS_OUTPUT_FULL)); - - const results = await axe($.html()); - expect(results).toHaveNoViolations(); - }); +import { EXAMPLE_ADDRESS_OUTPUT_FULL } from './_test_examples'; - it('has additionally provided container style classes', () => { - const $ = cheerio.load( - renderComponent('address-output', { - ...EXAMPLE_ADDRESS_OUTPUT_FULL, - classes: 'extra-class another-extra-class', - }), - ); +describe('FOR: Macro: Address-output', () => { + describe('GIVEN: Params: none', () => { + describe('WHEN: no parameters are provided', () => { + const $ = cheerio.load(renderComponent('address-output', {})); - expect($('.ons-address-output').hasClass('extra-class')).toBe(true); - expect($('.ons-address-output').hasClass('another-extra-class')).toBe(true); + test('THEN: renders no lines', () => { + expect($('.ons-address-output__lines *').length).toBe(0); + }); + }); }); - it('renders no lines when no parameters are provided', () => { - const $ = cheerio.load(renderComponent('address-output', EXAMPLE_ADDRESS_OUTPUT_NONE)); - - expect($('.ons-address-output__lines *').length).toBe(0); + describe('GIVEN: Params: classes', () => { + describe('WHEN: classes are provided', () => { + const $ = cheerio.load( + renderComponent('address-output', { + ...EXAMPLE_ADDRESS_OUTPUT_FULL, + classes: 'extra-class another-extra-class', + }), + ); + + test('THEN: renders with additional classes provided', async () => { + expect($('.ons-address-output').hasClass('extra-class')).toBe(true); + expect($('.ons-address-output').hasClass('another-extra-class')).toBe(true); + }); + }); }); - it.each([ - ['all address lines', EXAMPLE_ADDRESS_OUTPUT_FULL], - ['single line', { unit: 'Unit 5' }], - ])('renders `unit` with %s', (_, params) => { - const $ = cheerio.load(renderComponent('address-output', params)); + describe('GIVEN: Params: All params', () => { + describe('WHEN: all address line params are provided', () => { + const $ = cheerio.load(renderComponent('address-output', EXAMPLE_ADDRESS_OUTPUT_FULL)); - expect($('.ons-address-output__unit').text().trim()).toBe('Unit 5'); - }); + test('THEN: jest-axe tests pass', async () => { + const results = await axe($.html()); + expect(results).toHaveNoViolations(); + }); - it.each([ - ['all address lines', EXAMPLE_ADDRESS_OUTPUT_FULL], - ['single line', { organisation: 'Trescos' }], - ])('renders `organisation` with %s', (_, params) => { - const $ = cheerio.load(renderComponent('address-output', params)); + test('THEN: renders unit with provided text', () => { + expect($('.ons-address-output__unit').text().trim()).toBe('Unit 5'); + }); - expect($('.ons-address-output__organisation').text().trim()).toBe('Trescos'); - }); + test('THEN: renders organisation line with correct text', () => { + expect($('.ons-address-output__organisation').text().trim()).toBe('Trescos'); + }); - it.each([ - ['all address lines', EXAMPLE_ADDRESS_OUTPUT_FULL], - ['single line', { line1: 'Abingdon Road' }], - ])('renders `line1` with %s', (_, params) => { - const $ = cheerio.load(renderComponent('address-output', params)); + test('THEN: renders line1 line with correct text', () => { + expect($('.ons-address-output__line1').text().trim()).toBe('Abingdon Road'); + }); - expect($('.ons-address-output__line1').text().trim()).toBe('Abingdon Road'); - }); + test('THEN: renders line2 line with correct text', () => { + expect($('.ons-address-output__line2').text().trim()).toBe('Goathill'); + }); - it.each([ - ['all address lines', EXAMPLE_ADDRESS_OUTPUT_FULL], - ['single line', { line2: 'Goathill' }], - ])('renders `line2` with %s', (_, params) => { - const $ = cheerio.load(renderComponent('address-output', params)); + test('THEN: renders the town line with correct text', () => { + expect($('.ons-address-output__town').text().trim()).toBe('Barry'); + }); - expect($('.ons-address-output__line2').text().trim()).toBe('Goathill'); + test('THEN: renders the postcode line with correct text', () => { + expect($('.ons-address-output__postcode').text().trim()).toBe('AB12 6UH'); + }); + }); }); - it.each([ - ['all address lines', EXAMPLE_ADDRESS_OUTPUT_FULL], - ['single line', { town: 'Barry' }], - ])('renders `town` with %s', (_, params) => { - const $ = cheerio.load(renderComponent('address-output', params)); - - expect($('.ons-address-output__town').text().trim()).toBe('Barry'); - }); - - it.each([ - ['all address lines', EXAMPLE_ADDRESS_OUTPUT_FULL], - ['single line', { postcode: 'AB12 6UH' }], - ])('renders `postcode` with %s', (_, params) => { - const $ = cheerio.load(renderComponent('address-output', params)); - - expect($('.ons-address-output__postcode').text().trim()).toBe('AB12 6UH'); + describe('GIVEN: Params: single param', () => { + describe('WHEN: the unit address line is the only parameter provided', () => { + const $ = cheerio.load( + renderComponent('address-output', { + unit: 'Unit 5', + }), + ); + + test('THEN: renders unit line with correct text', () => { + expect($('.ons-address-output__unit').text().trim()).toBe('Unit 5'); + }); + }); + + describe('WHEN: the organisation address line is the only parameter provided', () => { + const $ = cheerio.load( + renderComponent('address-output', { + organisation: 'Trescos', + }), + ); + + test('THEN: renders organisation line with correct text', () => { + expect($('.ons-address-output__organisation').text().trim()).toBe('Trescos'); + }); + }); + + describe('WHEN: the line1 address line is the only parameter provided', () => { + const $ = cheerio.load( + renderComponent('address-output', { + line1: 'Abingdon Road', + }), + ); + + test('THEN: renders line1 line with correct text', () => { + expect($('.ons-address-output__line1').text().trim()).toBe('Abingdon Road'); + }); + }); + + describe('WHEN: the line2 address line is the only parameter provided', () => { + const $ = cheerio.load( + renderComponent('address-output', { + line2: 'Goathill', + }), + ); + + test('THEN: renders line2 line with correct text', () => { + expect($('.ons-address-output__line2').text().trim()).toBe('Goathill'); + }); + }); + + describe('WHEN: the town address line is the only parameter provided', () => { + const $ = cheerio.load( + renderComponent('address-output', { + town: 'Barry', + }), + ); + + test('THEN: renders town line with correct text', () => { + expect($('.ons-address-output__town').text().trim()).toBe('Barry'); + }); + }); + + describe('WHEN: the postcode address line is the only parameter provided', () => { + const $ = cheerio.load( + renderComponent('address-output', { + postcode: 'AB12 6UH', + }), + ); + + test('THEN: renders postcode line with correct text', () => { + expect($('.ons-address-output__postcode').text().trim()).toBe('AB12 6UH'); + }); + }); }); }); diff --git a/src/components/address-output/_test_examples.js b/src/components/address-output/_test_examples.js new file mode 100644 index 0000000000..08bb96889f --- /dev/null +++ b/src/components/address-output/_test_examples.js @@ -0,0 +1,8 @@ +export const EXAMPLE_ADDRESS_OUTPUT_FULL = { + unit: 'Unit 5', + organisation: 'Trescos', + line1: 'Abingdon Road', + line2: 'Goathill', + town: 'Barry', + postcode: 'AB12 6UH', +};