@defra-fish/gafl-webapp-service
Version:
The websales frontend for the GAFL service
142 lines (121 loc) • 3.93 kB
JavaScript
import { createServer, init, server } from '../server.js'
import { SESSION_COOKIE_NAME_DEFAULT, CSRF_TOKEN_COOKIE_NAME_DEFAULT } from '../constants.js'
import {
TEST_TRANSACTION,
TEST_STATUS,
TEST_ANALYTICS,
GET_PRICING_TYPES,
GET_PRICING_LENGTHS,
LICENCE_LENGTH,
LICENCE_TYPE
} from '../uri.js'
import CatboxMemory from '@hapi/catbox-memory'
import { salesApi } from '@defra-fish/connectors-lib'
import mockPermits from './data/permits'
import mockPermitsConcessions from './data/permit-concessions'
import mockConcessions from './data/concessions'
import mockDefraCountries from './data/defra-country'
import { pricingDetail } from '../processors/pricing-summary'
process.env.SESSION_COOKIE_PASSWORD = 'A'.repeat(32)
createServer({
cache: [
{
provider: {
constructor: CatboxMemory
}
}
]
})
const start = async done => {
server.events.on('start', () => {
done()
})
// Add a helper route to expose the transaction cache
server.route({
method: 'GET',
path: TEST_TRANSACTION.uri,
handler: async request => request.cache().helpers.transaction.get()
})
server.route({
method: 'GET',
path: TEST_STATUS.uri,
handler: async request => request.cache().helpers.status.get()
})
server.route({
method: 'GET',
path: TEST_ANALYTICS.uri,
handler: async request => request.cache().helpers.analytics.get()
})
server.route({
method: 'GET',
path: GET_PRICING_TYPES.uri,
handler: async request => pricingDetail(LICENCE_TYPE.page, await request.cache().helpers.transaction.getCurrentPermission())
})
server.route({
method: 'GET',
path: GET_PRICING_LENGTHS.uri,
handler: async request => pricingDetail(LICENCE_LENGTH.page, await request.cache().helpers.transaction.getCurrentPermission())
})
// clear cache
server.route({
method: 'GET',
path: '/buy/clear-cache',
handler: async request => {
await request.cache().clear()
return 'ok'
}
})
await init()
}
const stop = done => {
server.events.on('stop', () => {
done()
})
server.stop()
}
const getCookies = response => {
const cookies = {}
response.headers['set-cookie'] &&
response.headers['set-cookie'].forEach(cookie => {
const parts = cookie.split(';')[0].match(/(.*?)=(.*)$/)
cookies[parts[1].trim()] = parts[2].trim()
})
return cookies
}
const initialize = async done => {
const data = await server.inject({
method: 'GET',
url: '/buy'
})
global.cookies = getCookies(data)
done()
}
const injectWithCookies = async (method, url, payload = {}) => {
if (method === 'POST') {
Object.assign(payload, { [CSRF_TOKEN_COOKIE_NAME_DEFAULT]: global.cookies[CSRF_TOKEN_COOKIE_NAME_DEFAULT] })
}
return server.inject({
method,
url,
payload,
headers: {
cookie: `${SESSION_COOKIE_NAME_DEFAULT}=${global.cookies.sid}; ${CSRF_TOKEN_COOKIE_NAME_DEFAULT}=${global.cookies[CSRF_TOKEN_COOKIE_NAME_DEFAULT]}`
}
})
}
const injectWithoutSessionCookie = async (method, url, payload = {}) => {
Object.assign(payload, { [CSRF_TOKEN_COOKIE_NAME_DEFAULT]: global.cookies[CSRF_TOKEN_COOKIE_NAME_DEFAULT] })
return server.inject({
method,
url,
payload,
headers: { cookie: `${CSRF_TOKEN_COOKIE_NAME_DEFAULT}=${global.cookies[CSRF_TOKEN_COOKIE_NAME_DEFAULT]}` }
})
}
const mockSalesApi = () => {
salesApi.permits.getAll = jest.fn(async () => new Promise(resolve => resolve(mockPermits)))
salesApi.permitConcessions.getAll = jest.fn(async () => new Promise(resolve => resolve(mockPermitsConcessions)))
salesApi.concessions.getAll = jest.fn(async () => new Promise(resolve => resolve(mockConcessions)))
salesApi.countries.getAll = jest.fn(async () => new Promise(resolve => resolve(mockDefraCountries)))
}
export { start, stop, server, getCookies, initialize, injectWithCookies, injectWithoutSessionCookie, mockSalesApi }