Skip to content

Commit c0b827f

Browse files
Merge pull request #87 from TransactionProcessing/task/#84_merchantbalanceprojection
Handle events from invalid merchant
2 parents d12220b + 1fc8305 commit c0b827f

File tree

3 files changed

+120
-8
lines changed

3 files changed

+120
-8
lines changed

EventStoreProjections/test/MerchantBalanceProjectionTests.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,94 @@ describe('Merchant Balance Projection Tests', function () {
233233
chai.expect(merchant.balance).equal(initialBalance);
234234
})
235235

236+
it('Merchant doesnt exist', function(){
237+
projection.initialize();
238+
239+
var estateId = '3bf2dab2-86d6-44e3-bcf8-51bec65cf8bc';
240+
var merchantId = 'c4c33d75-f011-40e4-9d97-1f428ab563d8';
241+
242+
var depositDateTime = '2020-05-30T06:21:31.356Z';
243+
var depositAmount = 1000.00;
244+
var manualDepositMadeEvent =
245+
testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount);
246+
247+
projection.processEvent("MerchantDepositListAggregate-c4c33d75-f011-40e4-9d97-1f428ab563d8",
248+
manualDepositMadeEvent.eventType,
249+
manualDepositMadeEvent.data
250+
);
251+
252+
var projectionState = projection.getState();
253+
254+
var merchant = projectionState.merchant;
255+
chai.expect(merchant).equal(null);
256+
257+
var depositDateTime = '2020-05-30T06:21:31.356Z';
258+
var depositAmount = 1000.00;
259+
var automaticDepositMadeEvent =
260+
testData.getAutomaticDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount);
261+
262+
projection.processEvent("MerchantDepositListAggregate-c4c33d75-f011-40e4-9d97-1f428ab563d8",
263+
automaticDepositMadeEvent.eventType,
264+
automaticDepositMadeEvent.data
265+
);
266+
267+
var projectionState = projection.getState();
268+
269+
var merchant = projectionState.merchant;
270+
chai.expect(merchant).equal(null);
271+
272+
var transactionId = 'c4c33d75-f011-40e4-9d97-1f428ab563d8';
273+
var transactionAmount = 10.00;
274+
var transactionCompletedDateTime = '2023-11-01'
275+
var transactionHasBeenCompletedEvent =
276+
testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, true, transactionAmount, transactionCompletedDateTime);
277+
278+
projection.processEvent("TransactionAggregate-c4c33d75-f011-40e4-9d97-1f428ab563d8",
279+
transactionHasBeenCompletedEvent.eventType,
280+
transactionHasBeenCompletedEvent.data
281+
);
282+
283+
var projectionState = projection.getState();
284+
285+
var merchant = projectionState.merchant;
286+
chai.expect(merchant).equal(null);
287+
288+
var transactionId = 'c4c33d75-f011-40e4-9d97-1f428ab563d8';
289+
var calculatedValue = 5.00;
290+
var eventCreatedDateTime = "2020-05-16T07:47:51.6617562+00:00";
291+
var settledMerchantFeeAddedToTransactionEvent = testData.getSettledMerchantFeeAddedToTransactionEvent(estateId,
292+
merchantId,
293+
transactionId,
294+
calculatedValue,
295+
eventCreatedDateTime);
296+
297+
projection.processEvent(
298+
'TransactionAggregate-c4c33d75-f011-40e4-9d97-1f428ab563d8',
299+
settledMerchantFeeAddedToTransactionEvent.eventType,
300+
settledMerchantFeeAddedToTransactionEvent.data);
301+
302+
var projectionState = projection.getState();
303+
304+
var merchant = projectionState.merchant;
305+
chai.expect(merchant).equal(null);
306+
307+
var withdrawalDateTime = "2020-05-16T07:47:51.6617562+00:00";
308+
var withdrawalAmount= 50.00;
309+
310+
var withdrawalMadeEvent =
311+
testData.getWithdrawalMadeEvent(estateId, merchantId, withdrawalDateTime, withdrawalAmount);
312+
313+
projection.processEvent(
314+
'MerchantAggregate-c4c33d75-f011-40e4-9d97-1f428ab563d8',
315+
withdrawalMadeEvent.eventType,
316+
withdrawalMadeEvent.data);
317+
318+
var projectionState = projection.getState();
319+
320+
var merchant = projectionState.merchant;
321+
chai.expect(merchant).equal(null);
322+
})
323+
236324
it('Settled Merchant Fee increments balance', function(){
237325
projection.initialize();
238326

EventStoreProjections/test/TestData.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -346,22 +346,30 @@ module.exports = {
346346

347347
getTransactionHasBeenCompletedEvent: function (estateId, merchantId, transactionId, isAuthorised, transactionAmount, completedDateTime)
348348
{
349-
return {
349+
var event =
350+
{
350351
eventType: 'TransactionHasBeenCompletedEvent',
351352
data: {
352353
"completedDateTime": completedDateTime,
353-
"estateId": estateId,
354-
"isAuthorised": isAuthorised,
354+
"estateId": estateId,
355355
"transactionAmount": transactionAmount,
356-
"merchantId": merchantId,
357-
"responseCode": "0000",
358-
"responseMessage": "SUCCESS",
356+
"merchantId": merchantId,
357+
"responseCode": '1001',
358+
"responseMessage": 'DECLINED',
359359
"transactionId": transactionId
360360
},
361361
metadata: {
362362
},
363363
eventId:"7F1FA1B5-449F-4F94-AF5C-5A536CBDAF57"
364364
}
365+
366+
if (isAuthorised){
367+
event.data.isAuthorised = true;
368+
event.data.responseCode = "0000";
369+
event.data.responseMessage = "SUCCESS";
370+
};
371+
372+
return event;
365373
},
366374

367375
getSettledMerchantFeeAddedToTransactionEvent: function (estateId, merchantId, transactionId, calculatedValue, feeEventCreatedDateTime)

NugetPackage/projections/continuous/MerchantBalanceProjection.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,23 @@ function createMerchantState(merchantId, merchantName){
3939
return merchant;
4040
}
4141

42-
function HandleMerchantCreatedEvent(s,e){
43-
//var merchant = findMerchantInState(s,e.data.merchantId);
42+
function isMerchantValid(s){
43+
if (s.merchant === null){
44+
return false;
45+
}
46+
return true;
47+
}
48+
49+
function HandleMerchantCreatedEvent(s,e){
4450
if (s.merchant === null){
4551
var newMerchantState = createMerchantState(e.data.merchantId, e.data.merchantName);
4652
s.merchant = newMerchantState;
4753
}
4854
}
4955

5056
function HandleDepositEvent(s,e){
57+
if (isMerchantValid(s) == false)
58+
return;
5159
s.merchant.balance += e.data.amount;
5260
s.merchant.numberOfEventsProcessed++;
5361
s.merchant.deposits.count++;
@@ -56,6 +64,8 @@ function HandleDepositEvent(s,e){
5664
}
5765

5866
function HandleWithdrawalMadeEvent(s,e){
67+
if (isMerchantValid(s) == false)
68+
return;
5969
s.merchant.balance -= e.data.amount;
6070
s.merchant.numberOfEventsProcessed++;
6171
s.merchant.withdrawals.count++;
@@ -64,6 +74,9 @@ function HandleWithdrawalMadeEvent(s,e){
6474
}
6575

6676
function HandleTransactionHasBeenCompletedEvent(s,e){
77+
if (isMerchantValid(s) == false)
78+
return;
79+
6780
s.merchant.numberOfEventsProcessed++;
6881

6982
// Filter out logons and reconciliations
@@ -83,6 +96,9 @@ function HandleTransactionHasBeenCompletedEvent(s,e){
8396
}
8497

8598
function HandleSettledMerchantFeeAddedToTransactionEvent(s,e){
99+
if (isMerchantValid(s) == false)
100+
return;
101+
86102
s.merchant.numberOfEventsProcessed++;
87103
s.merchant.balance += e.data.calculatedValue;
88104
s.merchant.fees.count++;

0 commit comments

Comments
 (0)