UNPKG

@defra-fish/sales-api-service

Version:
131 lines (114 loc) 5.02 kB
import recurringPayments from '../recurring-payments.js' import { getRecurringPayments, processRPResult, cancelRecurringPayment } from '../../../services/recurring-payments.service.js' import { dueRecurringPaymentsRequestParamsSchema, processRPResultRequestParamsSchema, cancelRecurringPaymentRequestParamsSchema, cancelRecurringPaymentRequestQuerySchema } from '../../../schema/recurring-payments.schema.js' const [ { options: { handler: drpHandler } }, { options: { handler: prpHandler } }, { options: { handler: crpHandler } } ] = recurringPayments jest.mock('../../../services/recurring-payments.service.js', () => ({ getRecurringPayments: jest.fn(), processRPResult: jest.fn(), cancelRecurringPayment: jest.fn() })) jest.mock('../../../schema/recurring-payments.schema.js', () => ({ dueRecurringPaymentsRequestParamsSchema: jest.fn(), processRPResultRequestParamsSchema: jest.fn(), cancelRecurringPaymentRequestParamsSchema: jest.fn() })) const getMockRequest = ({ date = '2023-10-19', transactionId = 'transaction-id', paymentId = 'payment-id', createdDate = 'created-date', existingRecurringPaymentId = 'existing-recurring-payment-id', agreementId = 'agreement-id', id = 'abc123', reason = 'Payment Failure' }) => ({ params: { date, transactionId, paymentId, createdDate, existingRecurringPaymentId, agreementId, id }, query: { reason } }) const getMockResponseToolkit = () => ({ response: jest.fn() }) describe('recurring payments', () => { beforeEach(jest.clearAllMocks) describe('dueRecurringPayments', () => { it('handler should return continue response', async () => { const request = getMockRequest({}) const responseToolkit = getMockResponseToolkit() expect(await drpHandler(request, responseToolkit)).toEqual(responseToolkit.continue) }) it('should call getRecurringPayments with date', async () => { const date = Symbol('date') const request = getMockRequest({ date }) await drpHandler(request, getMockResponseToolkit()) expect(getRecurringPayments).toHaveBeenCalledWith(date) }) it('should validate with dueRecurringPaymentsRequestParamsSchema', async () => { const date = Symbol('date') const request = getMockRequest({ date }) await drpHandler(request, getMockResponseToolkit()) expect(recurringPayments[0].options.validate.params).toBe(dueRecurringPaymentsRequestParamsSchema) }) }) describe('processRPResult', () => { it('handler should return continue response', async () => { const request = getMockRequest({}) const responseToolkit = getMockResponseToolkit() expect(await prpHandler(request, responseToolkit)).toEqual(responseToolkit.continue) }) it('should call processRPResult with transaction id, payment id and createdDate', async () => { const transactionId = Symbol('transaction-id') const paymentId = Symbol('payment-id') const createdDate = Symbol('created-date') const request = getMockRequest({ transactionId, paymentId, createdDate }) await prpHandler(request, getMockResponseToolkit()) expect(processRPResult).toHaveBeenCalledWith(transactionId, paymentId, createdDate) }) it('should validate with processRPResultRequestParamsSchema', async () => { const transactionId = Symbol('transaction-id') const paymentId = Symbol('payment-id') const createdDate = Symbol('created-date') const request = getMockRequest({ transactionId, paymentId, createdDate }) await prpHandler(request, getMockResponseToolkit()) expect(recurringPayments[1].options.validate.params).toBe(processRPResultRequestParamsSchema) }) }) describe('cancelRecurringPayment', () => { it('handler should return continue response', async () => { const request = getMockRequest({}) const responseToolkit = getMockResponseToolkit() expect(await crpHandler(request, responseToolkit)).toEqual(responseToolkit.continue) }) it('should call cancelRecurringPayment with id and reason', async () => { const id = Symbol('recurring-payment-id') const reason = Symbol('recurring-payment-reason') const request = getMockRequest({ id, reason }) await crpHandler(request, getMockResponseToolkit()) expect(cancelRecurringPayment).toHaveBeenCalledWith(id, reason) }) it('should validate id with cancelRecurringPaymentRequestParamsSchema', async () => { const request = getMockRequest({}) await crpHandler(request, getMockResponseToolkit()) expect(recurringPayments[2].options.validate.params).toBe(cancelRecurringPaymentRequestParamsSchema) }) it('should validate reason with cancelRecurringPaymentRequestQuerySchema', async () => { const request = getMockRequest({}) await crpHandler(request, getMockResponseToolkit()) expect(recurringPayments[2].options.validate.query).toBe(cancelRecurringPaymentRequestQuerySchema) }) }) })