UNPKG

@defra-fish/gafl-webapp-service

Version:

The websales frontend for the GAFL service

109 lines (85 loc) • 5.59 kB
import { ADDRESS_LOOKUP, ADDRESS_SELECT, ADDRESS_ENTRY } from '../../../../../uri.js' import { start, stop, initialize, injectWithCookies } from '../../../../../__mocks__/test-utils-system.js' import searchResultsMany from '../../../../../services/address-lookup/__mocks__/data/search-results-many' import searchResultsOne from '../../../../../services/address-lookup/__mocks__/data/search-results-one' import searchResultsNone from '../../../../../services/address-lookup/__mocks__/data/search-results-none' import { salesApi } from '@defra-fish/connectors-lib' import mockDefraCountries from '../../../../../__mocks__/data/defra-country' beforeAll(() => new Promise(resolve => start(resolve))) beforeAll(() => new Promise(resolve => initialize(resolve))) afterAll(d => stop(d)) jest.mock('node-fetch') const fetch = require('node-fetch') salesApi.countries.getAll = jest.fn(async () => new Promise(resolve => resolve(mockDefraCountries))) describe('The address lookup page', () => { it('returns success on requesting', async () => { const response = await injectWithCookies('GET', ADDRESS_LOOKUP.uri) expect(response.statusCode).toBe(200) }) it('redirects back to itself on posting an empty payload', async () => { const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, {}) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_LOOKUP.uri) }) it('redirects back to itself on posting an empty premises', async () => { const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: '', postcode: 'BS9 1HJ' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_LOOKUP.uri) }) it('redirects back to itself on posting an empty postcode', async () => { const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: '5', postcode: '' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_LOOKUP.uri) }) it('redirects back to itself on posting a bad postcode', async () => { const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: '5', postcode: 'foo' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_LOOKUP.uri) }) it('redirects back to itself on posting a too long premises', async () => { const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: 'a'.repeat(101), postcode: 'BS9 1HJ' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_LOOKUP.uri) }) it('on finding list of multiple found addresses redirects to the select page', async () => { process.env.ADDRESS_LOOKUP_URL = 'http://localhost:9002' process.env.ADDRESS_LOOKUP_KEY = 'bar' fetch.mockImplementationOnce(async () => new Promise(resolve => resolve({ json: () => searchResultsMany, ok: true }))) const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: 'Howecroft Court', postcode: 'BS9 1HJ' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_SELECT.uri) }) it('on finding list of a single found address redirects to the select page', async () => { process.env.ADDRESS_LOOKUP_URL = 'http://localhost:9002' process.env.ADDRESS_LOOKUP_KEY = 'bar' fetch.mockImplementationOnce(async () => new Promise(resolve => resolve({ json: () => searchResultsOne, ok: true }))) const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: 'Howecroft Court', postcode: 'BS9 1HJ' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_SELECT.uri) }) it("redirects to the entry page where there is no result - and displays the 'not-found' insert text ", async () => { process.env.ADDRESS_LOOKUP_URL = 'http://localhost:9002' process.env.ADDRESS_LOOKUP_KEY = 'bar' fetch.mockImplementationOnce(async () => new Promise(resolve => resolve({ json: () => searchResultsNone, ok: true }))) const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: 'Howecroft Court', postcode: 'BS9 1HJ' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) const response2 = await injectWithCookies('GET', ADDRESS_ENTRY.uri) expect(response2.payload).toContain('We could not find an address') }) it('redirects to the entry page where there an exception thrown in the address lookup request', async () => { process.env.ADDRESS_LOOKUP_URL = 'http://localhost:9002' process.env.ADDRESS_LOOKUP_KEY = 'bar' fetch.mockImplementationOnce(async () => new Promise((resolve, reject) => reject(new Error('Fetch error')))) const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: 'Howecroft Court', postcode: 'BS9 1HJ' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) it('redirects to the entry page where there is no lookup set up', async () => { delete process.env.ADDRESS_LOOKUP_URL delete process.env.ADDRESS_LOOKUP_KEY const response = await injectWithCookies('POST', ADDRESS_LOOKUP.uri, { premises: 'Howecroft Court', postcode: 'BS9 1HJ' }) expect(response.statusCode).toBe(302) expect(response.headers.location).toHaveValidPathFor(ADDRESS_ENTRY.uri) }) })