This repository has been archived by the owner on Feb 7, 2025. It is now read-only.
generated from DEFRA/ffc-template-node
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
517 additions
and
3 deletions.
There are no files selected for viewing
19 changes: 19 additions & 0 deletions
19
app/processing/settlement/get-settled-settlement-by-settlement-id.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
const db = require('../../data') | ||
|
||
const getSettledSettlementBySettlementId = async (settlementId, transaction) => { | ||
return db.settlement.findOne({ | ||
transaction, | ||
attributes: [ | ||
'paymentRequestId', | ||
'reference', | ||
'settled' | ||
], | ||
where: { | ||
settlementId, | ||
settled: true | ||
}, | ||
raw: true | ||
}) | ||
} | ||
|
||
module.exports = getSettledSettlementBySettlementId |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
const getSettledSettlementBySettlementId = require('./get-settled-settlement-by-settlement-id') | ||
const validateSettlement = require('./validate-settlement') | ||
|
||
const getSettlement = async (settlementId) => { | ||
const settledSettlement = await getSettledSettlementBySettlementId(settlementId) | ||
return validateSettlement(settledSettlement) | ||
} | ||
|
||
module.exports = getSettlement |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
const getSettlement = require('./get-settlement') | ||
|
||
module.exports = getSettlement |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
const Joi = require('joi') | ||
|
||
module.exports = Joi.object({ | ||
paymentRequestId: Joi.number().integer().required(), | ||
reference: Joi.string().required(), | ||
settled: Joi.boolean().required() | ||
}).required() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
const util = require('util') | ||
const schema = require('./schema') | ||
|
||
const validateSettlement = (settlement) => { | ||
const result = schema.validate(settlement, { | ||
abortEarly: false | ||
}) | ||
|
||
if (result.error) { | ||
throw new Error(`Settlement: ${util.inspect(settlement, false, null, true)} does not have the required data: ${result.error.message}`) | ||
} | ||
|
||
return result.value | ||
} | ||
|
||
module.exports = validateSettlement |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
113 changes: 113 additions & 0 deletions
113
test/integration/processing/settlement/get-settlement.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
const db = require('../../../../app/data') | ||
|
||
const getSettlement = require('../../../../app/processing/settlement') | ||
|
||
const schemes = require('../../../../app/constants/schemes') | ||
const paymentRequest = JSON.parse(JSON.stringify(require('../../../mock-payment-request').submitPaymentRequest)) | ||
|
||
const SETTLEMENT_ID_NOT_SETTLED = 1 | ||
const SETTLEMENT_ID_SETTLED = 2 | ||
|
||
let settlement | ||
let mappedSettlement | ||
|
||
describe('process settlement', () => { | ||
beforeAll(async () => { | ||
await db.sequelize.truncate({ | ||
cascade: true, | ||
restartIdentity: true | ||
}) | ||
}) | ||
|
||
beforeEach(async () => { | ||
await db.scheme.bulkCreate(schemes) | ||
await db.invoiceNumber.create({ | ||
invoiceNumber: paymentRequest.invoiceNumber, | ||
originalInvoiceNumber: paymentRequest.invoiceNumber.slice(0, 5) | ||
}) | ||
|
||
await db.paymentRequest.create(paymentRequest) | ||
|
||
settlement = JSON.parse(JSON.stringify(require('../../../mock-settlement'))) | ||
await db.settlement.create({ ...settlement, paymentRequestId: 1, settled: false }) | ||
|
||
mappedSettlement = { | ||
paymentRequestId: 1, | ||
reference: settlement.reference, | ||
settled: settlement.settled | ||
} | ||
}) | ||
|
||
afterEach(async () => { | ||
await db.sequelize.truncate({ | ||
cascade: true, | ||
restartIdentity: true | ||
}) | ||
}) | ||
|
||
afterAll(async () => { | ||
await db.sequelize.close() | ||
}) | ||
|
||
test('should return mapped settled object when existing settled settlement with required information exists', async () => { | ||
try { await db.settlement.create({ ...settlement, paymentRequestId: 1 }) } catch { } | ||
const result = await getSettlement(SETTLEMENT_ID_SETTLED) | ||
expect(result).toStrictEqual(mappedSettlement) | ||
}) | ||
|
||
test('should throw when no existing settlement exists', async () => { | ||
await db.sequelize.truncate({ | ||
cascade: true, | ||
restartIdentity: true | ||
}) | ||
|
||
const wrapper = async () => { await getSettlement(1) } | ||
|
||
expect(wrapper).rejects.toThrow() | ||
}) | ||
|
||
test('should throw when no existing settlement exists', async () => { | ||
await db.sequelize.truncate({ | ||
cascade: true, | ||
restartIdentity: true | ||
}) | ||
|
||
const wrapper = async () => { await getSettlement(undefined) } | ||
|
||
expect(wrapper).rejects.toThrow() | ||
}) | ||
|
||
test('should throw when no existing settlement exists', async () => { | ||
await db.sequelize.truncate({ | ||
cascade: true, | ||
restartIdentity: true | ||
}) | ||
|
||
const wrapper = async () => { await getSettlement(null) } | ||
|
||
expect(wrapper).rejects.toThrow() | ||
}) | ||
|
||
test('should throw when existing unsettled settlement with required information exists', async () => { | ||
const wrapper = async () => { await getSettlement(SETTLEMENT_ID_NOT_SETTLED) } | ||
expect(wrapper).rejects.toThrow() | ||
}) | ||
|
||
test('should throw when existing settled settlement with missing required reference does not exist', async () => { | ||
delete settlement.reference | ||
await db.settlement.create({ ...settlement, paymentRequestId: 1 }) | ||
|
||
const wrapper = async () => { await getSettlement(SETTLEMENT_ID_SETTLED) } | ||
|
||
expect(wrapper).rejects.toThrow() | ||
}) | ||
|
||
test('should throw when existing settled settlement with missing required settled does not exist', async () => { | ||
delete settlement.settled | ||
await db.settlement.create({ ...settlement, paymentRequestId: 1 }) | ||
|
||
const wrapper = async () => { await getSettlement(SETTLEMENT_ID_SETTLED) } | ||
|
||
expect(wrapper).rejects.toThrow() | ||
}) | ||
}) |
113 changes: 113 additions & 0 deletions
113
test/integration/processing/settlement/validate-settlement.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
const validateSettlement = require('../../../../app/processing/settlement/validate-settlement') | ||
|
||
let retreivedSettlement | ||
|
||
describe('validate settlement', () => { | ||
beforeEach(() => { | ||
const settlement = JSON.parse(JSON.stringify(require('../../../mock-settlement'))) | ||
retreivedSettlement = { | ||
paymentRequestId: 1, | ||
reference: settlement.reference, | ||
settled: settlement.settled | ||
} | ||
}) | ||
|
||
afterEach(() => { | ||
jest.clearAllMocks() | ||
}) | ||
|
||
test('should return retreivedSettlement', async () => { | ||
const result = validateSettlement(retreivedSettlement) | ||
expect(result).toStrictEqual(retreivedSettlement) | ||
}) | ||
|
||
test('should throw when retreivedSettlement is missing required paymentRequestId', async () => { | ||
delete retreivedSettlement.paymentRequestId | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow() | ||
}) | ||
|
||
test('should throw Error when retreivedSettlement is missing required paymentRequestId', async () => { | ||
delete retreivedSettlement.paymentRequestId | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow(Error) | ||
}) | ||
|
||
test('should throw error which ends "does not have the required data: "paymentRequestId" is required" when retreivedSettlement is missing required paymentRequestId', async () => { | ||
delete retreivedSettlement.paymentRequestId | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow(/does not have the required data: "paymentRequestId" is required/) | ||
}) | ||
|
||
test('should throw when retreivedSettlement is missing required reference', async () => { | ||
delete retreivedSettlement.reference | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow() | ||
}) | ||
|
||
test('should throw Error when retreivedSettlement is missing required reference', async () => { | ||
delete retreivedSettlement.reference | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow(Error) | ||
}) | ||
|
||
test('should throw error which ends "does not have the required data: "reference" is required" when retreivedSettlement is missing required reference', async () => { | ||
delete retreivedSettlement.reference | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow(/does not have the required data: "reference" is required/) | ||
}) | ||
|
||
test('should throw when retreivedSettlement is missing required settled', async () => { | ||
delete retreivedSettlement.settled | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow() | ||
}) | ||
|
||
test('should throw Error when retreivedSettlement is missing required settled', async () => { | ||
delete retreivedSettlement.settled | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow(Error) | ||
}) | ||
|
||
test('should throw error which ends "does not have the required data: "settled" is required" when retreivedSettlement is missing required settled', async () => { | ||
delete retreivedSettlement.settled | ||
|
||
const wrapper = async () => { | ||
validateSettlement(retreivedSettlement) | ||
} | ||
|
||
expect(wrapper).rejects.toThrow(/does not have the required data: "settled" is required/) | ||
}) | ||
}) |
Oops, something went wrong.