@defra-fish/gafl-webapp-service
Version:
The websales frontend for the GAFL service
77 lines (69 loc) • 3 kB
JavaScript
import { CONTACT, LICENCE_CONFIRMATION_METHOD } from '../../../../../uri.js'
import { HOW_CONTACTED } from '../../../../../processors/mapping-constants.js'
import { getData } from '../route.js'
import GetDataRedirect from '../../../../../handlers/get-data-redirect.js'
import { addLanguageCodeToUri } from '../../../../../processors/uri-helper.js'
jest.mock('../../../../../processors/uri-helper.js')
jest.mock('../../../../../processors/mapping-constants.js', () => ({
HOW_CONTACTED: {
none: 'nada',
email: 'e-mail',
text: 'mobile-phone'
}
}))
jest.mock('../../../../../uri.js', () => ({
...jest.requireActual('../../../../../uri.js'),
CONTACT: { uri: 'contact.url' },
LICENCE_CONFIRMATION_METHOD: { uri: 'licence-confirmation-method.url' }
}))
describe('.getData', () => {
const createRequestMock = (options = {}) => ({
cache: jest.fn(() => ({
helpers: {
transaction: {
getCurrentPermission: jest.fn(() => ({
licensee: {
firstName: 'Lando',
lastName: 'Norris',
preferredMethodOfConfirmation: options.preferredMethodOfConfirmation || 'email'
}
}))
}
}
}))
})
beforeEach(jest.resetAllMocks)
it('if preferred method of confirmation is none, redirects to contact page', async () => {
const getDataRedirectError = new GetDataRedirect(CONTACT.uri)
const func = async () => await getData(createRequestMock({ preferredMethodOfConfirmation: HOW_CONTACTED.none }))
await expect(func).rejects.toThrow(getDataRedirectError)
})
describe.each([
{ urlName: 'change', url: `${LICENCE_CONFIRMATION_METHOD.uri}?change=email`, preferredMethodOfConfirmation: HOW_CONTACTED.email },
{ urlName: 'change', url: `${LICENCE_CONFIRMATION_METHOD.uri}?change=mobile`, preferredMethodOfConfirmation: HOW_CONTACTED.text },
{ urlName: 'contact', url: CONTACT.uri, preferredMethodOfConfirmation: HOW_CONTACTED.email }
])('$urlName $confirmation is decorated by addLanguageCodeToUri', ({ urlName, url, preferredMethodOfConfirmation }) => {
it(`passes request and ${urlName} url to addLanguageCodeToUri`, async () => {
const request = createRequestMock({ preferredMethodOfConfirmation })
await getData(request)
expect(addLanguageCodeToUri).toHaveBeenCalledWith(request, url)
})
it(`returns decorated value for ${urlName} from addLanguageCodeToUri`, async () => {
const expectedUrl = Symbol(urlName)
addLanguageCodeToUri.mockReturnValue(expectedUrl)
const request = createRequestMock()
const data = await getData(request)
expect(data).toEqual(
expect.objectContaining({
uri: expect.objectContaining({
[urlName]: expectedUrl
})
})
)
})
})
it('returns the expected data', async () => {
addLanguageCodeToUri.mockImplementation((_request, uri) => uri)
expect(await getData(createRequestMock())).toMatchSnapshot()
})
})