UNPKG

@defra-fish/gafl-webapp-service

Version:

The websales frontend for the GAFL service

219 lines (193 loc) • 9.96 kB
import { salesApi } from '@defra-fish/connectors-lib' import mockDefraCountries from '../../../../../__mocks__/data/defra-country.js' import { start, stop, initialize, injectWithCookies, mockSalesApi } from '../../../../../__mocks__/test-utils-system.js' import { ADDRESS_ENTRY, LICENCE_FULFILMENT, CONTACT, TEST_TRANSACTION, CONTACT_SUMMARY, CONTROLLER, DATE_OF_BIRTH, LICENCE_LENGTH, LICENCE_SUMMARY, LICENCE_TO_START, LICENCE_TYPE, NAME, NEW_TRANSACTION, NEWSLETTER } from '../../../../../uri.js' import { ADULT_TODAY, JUNIOR_TODAY, dobHelper } from '../../../../../__mocks__/test-utils-business-rules' import { licenceToStart } from '../../../../licence-details/licence-to-start/update-transaction' import { licenseTypes } from '../../../../licence-details/licence-type/route' import { getCountryDropDownOptions } from '../route' import { isPhysical } from '../../../../../processors/licence-type-display.js' jest.mock('../../../../../processors/licence-type-display.js') mockSalesApi() beforeAll(() => new Promise(resolve => start(resolve))) beforeAll(() => new Promise(resolve => initialize(resolve))) afterAll(d => stop(d)) const goodAddress = { premises: '14 HOWECROFT COURT', street: 'EASTMEAD LANE', locality: '', town: 'BRISTOL', postcode: 'BS9 1HJ', 'country-code': 'GB-ENG' } salesApi.countries.getAll = jest.fn(async () => new Promise(resolve => resolve(mockDefraCountries))) describe('The manual address entry page', () => { it('returns success on requesting', async () => { const response = await injectWithCookies('GET', ADDRESS_ENTRY.uri) expect(response.statusCode).toBe(200) }) it('.getCountryDropDownOptions returns country list excluding "United Kingdom"', async () => { const countries = await getCountryDropDownOptions() expect(countries).toEqual(expect.not.objectContaining({ description: 'GB', label: 'United Kingdom' })) }) it('redirects back to itself on posting no response', async () => { const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, {}) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects back to itself on posting address with no premises', async () => { const addr = Object.assign({}, goodAddress) delete addr.premises const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects back to itself on posting too long premises', async () => { const addr = Object.assign({}, goodAddress) addr.premises = 'A'.repeat(101) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects back to itself on posting too long street', async () => { const addr = Object.assign({}, goodAddress) addr.street = 'A'.repeat(101) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects back to itself on posting too long locality', async () => { const addr = Object.assign({}, goodAddress) addr.locality = 'A'.repeat(101) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects back to itself on posting address with no town', async () => { const addr = Object.assign({}, goodAddress) delete addr.town const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects back to itself on posting too long town', async () => { const addr = Object.assign({}, goodAddress) addr.town = 'A'.repeat(101) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects back to itself on posting with missing country code', async () => { const addr = Object.assign({}, goodAddress) delete addr['country-code'] const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects back to itself on posting invalid UK postcode', async () => { const addr = Object.assign({}, goodAddress) addr.postcode = 'foo' const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) describe('on successful valid UK address submission', () => { it('redirects to the contact page on posting a valid UK address', async () => { const addr = Object.assign({}, goodAddress) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(CONTACT.uri) const { payload } = await injectWithCookies('GET', TEST_TRANSACTION.uri) expect(JSON.parse(payload).permissions[0].licensee).toEqual({ organisation: null, premises: '14 Howecroft Court', street: 'Eastmead Lane', town: 'Bristol', postcode: 'BS9 1HJ', countryCode: 'GB-ENG' }) }) it('redirects to the contact page if it is a 1 day adult licence', async () => { const addr = Object.assign({}, goodAddress) await injectWithCookies('POST', DATE_OF_BIRTH.uri, dobHelper(ADULT_TODAY)) await injectWithCookies('POST', LICENCE_LENGTH.uri, { 'licence-length': '1D' }) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(CONTACT.uri) }) it('redirects to the contact page if it is 8 day adult licence', async () => { const addr = Object.assign({}, goodAddress) await injectWithCookies('POST', DATE_OF_BIRTH.uri, dobHelper(ADULT_TODAY)) await injectWithCookies('POST', LICENCE_LENGTH.uri, { 'licence-length': '1D' }) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(CONTACT.uri) }) it('redirects to the licence fulfilment page if it is a 12 month adult licence', async () => { const addr = Object.assign({}, goodAddress) await injectWithCookies('POST', DATE_OF_BIRTH.uri, dobHelper(ADULT_TODAY)) await injectWithCookies('POST', LICENCE_LENGTH.uri, { 'licence-length': '12M' }) isPhysical.mockReturnValueOnce(true) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(LICENCE_FULFILMENT.uri) }) it('redirects to the contact page if it is a 12 month junior licence on posting a valid UK address', async () => { const addr = Object.assign({}, goodAddress) await injectWithCookies('POST', DATE_OF_BIRTH.uri, dobHelper(JUNIOR_TODAY)) await injectWithCookies('POST', LICENCE_LENGTH.uri, { 'licence-length': '12M' }) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(CONTACT.uri) }) }) it('redirects to contact page on posting a valid non-UK address', async () => { const addr = Object.assign({}, goodAddress) addr['country-code'] = 'FR' addr.postcode = 'not checked' const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, addr) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(CONTACT.uri) const { payload } = await injectWithCookies('GET', TEST_TRANSACTION.uri) expect(JSON.parse(payload).permissions[0].licensee).toMatchObject({ organisation: null, premises: '14 Howecroft Court', street: 'Eastmead Lane', town: 'Bristol', postcode: 'NOT CHECKED', countryCode: 'FR' }) }) it('redirects to contact summary page on posting a valid non-UK address if the contact summary has been seen', async () => { await injectWithCookies('GET', NEW_TRANSACTION.uri) await injectWithCookies('GET', CONTROLLER.uri) await injectWithCookies('POST', DATE_OF_BIRTH.uri, dobHelper(ADULT_TODAY)) await injectWithCookies('POST', LICENCE_TO_START.uri, { 'licence-to-start': licenceToStart.AFTER_PAYMENT }) await injectWithCookies('POST', LICENCE_TYPE.uri, { 'licence-type': licenseTypes.troutAndCoarse2Rod }) await injectWithCookies('POST', LICENCE_LENGTH.uri, { 'licence-length': '1D' }) await injectWithCookies('POST', LICENCE_SUMMARY.uri) await injectWithCookies('POST', NAME.uri, { 'last-name': 'Graham', 'first-name': 'Willis' }) await injectWithCookies('POST', ADDRESS_ENTRY.uri, goodAddress) await injectWithCookies('POST', CONTACT.uri, { 'how-contacted': 'email', email: 'new3@example.com' }) await injectWithCookies('POST', NEWSLETTER.uri, { newsletter: 'yes', 'email-entry': 'no' }) await injectWithCookies('GET', CONTACT_SUMMARY.uri) const response = await injectWithCookies('POST', ADDRESS_ENTRY.uri, goodAddress) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(CONTACT_SUMMARY.uri) }) })