@defra-fish/gafl-webapp-service
Version:
The websales frontend for the GAFL service
177 lines (160 loc) • 5.7 kB
JavaScript
import * as f from '../concession-helper'
import { CONCESSION, CONCESSION_PROOF, HOW_CONTACTED } from '../mapping-constants'
import moment from 'moment'
import { isSenior } from '@defra-fish/business-rules-lib'
const permission = {}
const junior = {
type: CONCESSION.JUNIOR,
proof: {
type: CONCESSION_PROOF.none
}
}
const senior = {
type: CONCESSION.SENIOR,
proof: {
type: CONCESSION_PROOF.none
}
}
const disabledbb = {
type: CONCESSION.DISABLED,
proof: {
type: CONCESSION_PROOF.blueBadge,
referenceNumber: '123'
}
}
const disabledNi = {
type: CONCESSION.DISABLED,
proof: {
type: CONCESSION_PROOF.NI,
referenceNumber: '456'
}
}
const LICENCE_START_DATE = '2020-06-06'
const getLicensee = ({ age, referenceDate = LICENCE_START_DATE } = {}) => ({
firstName: 'Johnny',
lastName: 'Test',
preferredMethodOfConfirmation: HOW_CONTACTED.letter,
birthDate: moment(referenceDate).subtract(age, 'years').format('YYYY-MM-DD')
})
jest.mock('@defra-fish/business-rules-lib', () => {
const businessRules = jest.requireActual('@defra-fish/business-rules-lib')
return {
...businessRules,
isSenior: jest.fn(businessRules.isSenior)
}
})
describe('The concession helper', () => {
it('add junior', () => {
f.addJunior(permission)
expect(permission.concessions).toContainEqual(junior)
expect(permission.concessions.length).toBe(1)
})
it('add senior', () => {
f.addSenior(permission)
expect(permission.concessions).toContainEqual(senior)
expect(permission.concessions.length).toBe(1)
})
it('add blue badge', () => {
f.addDisabled(permission, CONCESSION_PROOF.blueBadge, '123')
expect(permission.concessions).toContainEqual(disabledbb)
expect(permission.concessions.length).toBe(2)
})
it('add NI', () => {
f.addDisabled(permission, CONCESSION_PROOF.NI, '456')
expect(permission.concessions).toContainEqual(disabledNi)
expect(permission.concessions.length).toBe(2)
})
it('add junior to disabled', () => {
f.addJunior(permission)
expect(permission.concessions).toContainEqual(junior)
expect(permission.concessions.length).toBe(2)
})
it('add NI to junior', () => {
f.addDisabled(permission, CONCESSION_PROOF.NI, '456')
expect(permission.concessions).toContainEqual(disabledNi)
expect(permission.concessions.length).toBe(2)
})
it('add senior to NI', () => {
f.addSenior(permission)
expect(permission.concessions).toContainEqual(senior)
expect(permission.concessions.length).toBe(2)
})
it('add junior to replace senior', () => {
f.removeDisabled(permission)
f.addJunior(permission)
expect(permission.concessions).toContainEqual(junior)
expect(permission.concessions.length).toBe(1)
})
it('add NI to replace senior', () => {
f.clear(permission)
f.addDisabled(permission, CONCESSION_PROOF.NI, '456')
expect(permission.concessions).toContainEqual(disabledNi)
expect(permission.concessions.length).toBe(1)
})
it('add senior to replace NI', () => {
f.clear(permission)
f.addSenior(permission)
expect(permission.concessions).toContainEqual(senior)
expect(permission.concessions.length).toBe(1)
})
describe('getAgeConcession', () => {
;[junior, senior].forEach(concession => {
it(`returns the ${concession.type} concession if present`, () => {
const permission = { concessions: [concession] }
expect(f.getAgeConcession(permission)).toBe(concession)
})
})
it('returns undefined if only disabled concession present', () => {
const permission = { concessions: [disabledNi] }
expect(f.getAgeConcession(permission)).toBe(undefined)
})
it("returns undefined if concessions don't exist", () => {
const permission = {}
expect(f.getAgeConcession(permission)).toBe(undefined)
})
})
describe('ageConcessionHelper', () => {
beforeEach(jest.clearAllMocks)
const getSamplePermission = ({
licenceStartDate = LICENCE_START_DATE,
licensee = getLicensee(67, licenceStartDate),
concessions = []
} = {}) => ({
licenceStartDate,
licensee,
concessions: []
})
it('if the licensee is a minor, sets noLicenceRequired flag to true', () => {
const licensee = getLicensee({ age: 8 })
const permission = getSamplePermission({ licensee })
f.ageConcessionHelper(permission)
expect(permission).toMatchSnapshot()
})
it('if the licensee is a junior, sets license data, junior concession and contact methods', () => {
const licensee = getLicensee({ age: 14 })
const permission = getSamplePermission({ licensee })
f.ageConcessionHelper(permission)
expect(permission).toMatchSnapshot()
})
it('if the licensee is a senior, adds senior concession', () => {
const licensee = getLicensee({ age: 67 })
const permission = getSamplePermission({ licensee })
f.ageConcessionHelper(permission)
expect(permission).toMatchSnapshot()
})
it.each([67, 99, 32])('passes age to isSenior function when age is %d', age => {
const licensee = getLicensee({ age })
const permission = getSamplePermission({ licensee })
f.ageConcessionHelper(permission)
expect(isSenior).toHaveBeenCalledWith(age)
})
;[junior, senior].forEach(concession => {
it(`if is normal licence, removes ${concession.type} concession`, () => {
const licensee = getLicensee({ age: 35 })
const permission = getSamplePermission({ licensee, concessions: [concession] })
f.ageConcessionHelper(permission)
expect(permission).toMatchSnapshot()
})
})
})
})