From ffb54d230f6fa42258fdb7b2363a63007bda34d2 Mon Sep 17 00:00:00 2001 From: Rui Rocha Date: Mon, 16 Jan 2023 11:27:34 +0000 Subject: [PATCH] feat: updated mockRefs and added specific use case for bulk requests to enable creating multiple bulk requests for the same bulkQuoteId --- .../api_definitions/fspiop_1.0/mockRef.json | 60 +++++++++++++++++++ .../api_definitions/fspiop_1.1/mockRef.json | 60 +++++++++++++++++++ src/lib/mocking/openApiMockHandler.js | 37 +++++++++++- src/lib/mocking/openApiRulesEngine.js | 2 +- 4 files changed, 157 insertions(+), 2 deletions(-) diff --git a/spec_files/api_definitions/fspiop_1.0/mockRef.json b/spec_files/api_definitions/fspiop_1.0/mockRef.json index 77f657cc..7957d47e 100644 --- a/spec_files/api_definitions/fspiop_1.0/mockRef.json +++ b/spec_files/api_definitions/fspiop_1.0/mockRef.json @@ -75,5 +75,65 @@ { "id": "errorInformation.errorDescription", "pattern": "This is a mock error description" + }, + { + "id": "individualQuoteResults.items.condition", + "pattern": "[A-Fa-f0-9]{64}" + }, + { + "id": "individualQuoteResults.items.ilpPacket", + "pattern": "[A-Fa-f0-9]{256}" + }, + { + "id": "individualQuoteResults.items.payee.name", + "pattern": "KeepsafeFamilyBank|TreasuryBankFinancial|SilverCoinBanking|RainyDaysBanks|PiggyBankFiduciary|FinancialPartnerBank" + }, + { + "id": "individualQuoteResults.items.payee.personalInfo.complexName.firstName", + "pattern": "John|David|Michael|Chris|Mike|Mark|Paul|Daniel|James|Maria" + }, + { + "id": "individualQuoteResults.items.payee.personalInfo.complexName.middleName", + "pattern": "G|P|N|S" + }, + { + "id": "individualQuoteResults.items.payee.personalInfo.complexName.lastName", + "pattern": "Smith|Jones|Johnson|Lee|Brown|Williams|Rodriguez|Garcia|Gonzalez|Lopez" + }, + { + "id": "individualQuoteResults.items.payee.personalInfo.dateOfBirth", + "pattern": "^(19)\\d\\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|2[0-8])$" + }, + { + "id": "individualQuoteResults.items.transferAmount.currency", + "pattern": "USD" + }, + { + "id": "individualQuoteResults.items.transferAmount.amount", + "pattern": "123" + }, + { + "id": "individualQuoteResults.items.payeeFspCommission.currency", + "pattern": "USD" + }, + { + "id": "individualQuoteResults.items.payeeFspCommission.amount", + "pattern": "3" + }, + { + "id": "individualQuoteResults.items.payeeFspFee.currency", + "pattern": "USD" + }, + { + "id": "individualQuoteResults.items.payeeFspFee.amount", + "pattern": "2" + }, + { + "id": "individualQuoteResults.items.payeeReceiveAmount.currency", + "pattern": "USD" + }, + { + "id": "individualQuoteResults.items.payeeReceiveAmount.amount", + "pattern": "123" } ] \ No newline at end of file diff --git a/spec_files/api_definitions/fspiop_1.1/mockRef.json b/spec_files/api_definitions/fspiop_1.1/mockRef.json index 77f657cc..7957d47e 100644 --- a/spec_files/api_definitions/fspiop_1.1/mockRef.json +++ b/spec_files/api_definitions/fspiop_1.1/mockRef.json @@ -75,5 +75,65 @@ { "id": "errorInformation.errorDescription", "pattern": "This is a mock error description" + }, + { + "id": "individualQuoteResults.items.condition", + "pattern": "[A-Fa-f0-9]{64}" + }, + { + "id": "individualQuoteResults.items.ilpPacket", + "pattern": "[A-Fa-f0-9]{256}" + }, + { + "id": "individualQuoteResults.items.payee.name", + "pattern": "KeepsafeFamilyBank|TreasuryBankFinancial|SilverCoinBanking|RainyDaysBanks|PiggyBankFiduciary|FinancialPartnerBank" + }, + { + "id": "individualQuoteResults.items.payee.personalInfo.complexName.firstName", + "pattern": "John|David|Michael|Chris|Mike|Mark|Paul|Daniel|James|Maria" + }, + { + "id": "individualQuoteResults.items.payee.personalInfo.complexName.middleName", + "pattern": "G|P|N|S" + }, + { + "id": "individualQuoteResults.items.payee.personalInfo.complexName.lastName", + "pattern": "Smith|Jones|Johnson|Lee|Brown|Williams|Rodriguez|Garcia|Gonzalez|Lopez" + }, + { + "id": "individualQuoteResults.items.payee.personalInfo.dateOfBirth", + "pattern": "^(19)\\d\\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|2[0-8])$" + }, + { + "id": "individualQuoteResults.items.transferAmount.currency", + "pattern": "USD" + }, + { + "id": "individualQuoteResults.items.transferAmount.amount", + "pattern": "123" + }, + { + "id": "individualQuoteResults.items.payeeFspCommission.currency", + "pattern": "USD" + }, + { + "id": "individualQuoteResults.items.payeeFspCommission.amount", + "pattern": "3" + }, + { + "id": "individualQuoteResults.items.payeeFspFee.currency", + "pattern": "USD" + }, + { + "id": "individualQuoteResults.items.payeeFspFee.amount", + "pattern": "2" + }, + { + "id": "individualQuoteResults.items.payeeReceiveAmount.currency", + "pattern": "USD" + }, + { + "id": "individualQuoteResults.items.payeeReceiveAmount.amount", + "pattern": "123" } ] \ No newline at end of file diff --git a/src/lib/mocking/openApiMockHandler.js b/src/lib/mocking/openApiMockHandler.js index 6d4f9ca2..e84b8037 100644 --- a/src/lib/mocking/openApiMockHandler.js +++ b/src/lib/mocking/openApiMockHandler.js @@ -381,7 +381,42 @@ const generateAsyncCallback = async (item, context, req) => { require('./middleware-functions/quotesAssociation').handleQuotes(context, req, fulfilment) } // TODO: Handle method and path verifications against the generated ones - CallbackHandler.handleCallback(generatedCallback, context, req) + + // Switch to deal with bulkRequest cases (bulkQuotes for now, bulkTransfers next, where we can optimize this) + switch (context.request.path) { + case '/bulkQuotes': { + const individualQuotes = Object.assign(generatedCallback.body.individualQuoteResults) + + for (let i = 0; i < individualQuotes.length; i += 1) { + individualQuotes[i].quoteId = context.request.requestBody.individualQuotes[i].quoteId + } + + const results = [] + + const randomlySplitList = (list) => { + if (list.length === 0) { + return + } + const pieceSize = Math.floor(Math.random() * list.length) + 1 + const result = list.splice(0, pieceSize) + + results.push(result) + randomlySplitList(list) + } + + randomlySplitList(individualQuotes) + + for (let i = 0; i < results.length; i += 1) { + const bulkQuoteCallback = Object.assign({}, generatedCallback) + bulkQuoteCallback.body.individualQuoteResults = results[i] + await CallbackHandler.handleCallback(bulkQuoteCallback, context, req) + } + break + } + default: + CallbackHandler.handleCallback(generatedCallback, context, req) + } + // Handle triggers for a transaction request require('./middleware-functions/transactionRequestsService').handleRequest(context, req, generatedCallback, item.triggerTemplatesFolder) } diff --git a/src/lib/mocking/openApiRulesEngine.js b/src/lib/mocking/openApiRulesEngine.js index 17397a71..ed9e011a 100644 --- a/src/lib/mocking/openApiRulesEngine.js +++ b/src/lib/mocking/openApiRulesEngine.js @@ -275,7 +275,7 @@ const callbackRules = async (context, req) => { } generatedCallback.callbackInfo = await replaceVariablesFromRequest(req.customInfo.callbackInfo, context, req) generatedCallback.method = req.customInfo.callbackInfo.successCallback.method - generatedCallback.body = await callbackGenerator.generateRequestBody(operationCallback, generatedCallback.method, jsfRefs1) + generatedCallback.body = await callbackGenerator.generateRequestBody(operationCallback, generatedCallback.method, jsfRefs1, context.request.body) generatedCallback.headers = await callbackGenerator.generateRequestHeaders(operationCallback, generatedCallback.method, jsfRefs1) // Override the values in generated callback with the values from callback map file