diff --git a/EventStoreProjections/EventStoreProjections.Tests.njsproj b/EventStoreProjections/EventStoreProjections.Tests.njsproj index e20710b..3c8804e 100644 --- a/EventStoreProjections/EventStoreProjections.Tests.njsproj +++ b/EventStoreProjections/EventStoreProjections.Tests.njsproj @@ -44,9 +44,7 @@ - - diff --git a/EventStoreProjections/tests/MerchantBalanceCalculatorTests.js b/EventStoreProjections/tests/MerchantBalanceCalculatorTests.js deleted file mode 100644 index 9233fe8..0000000 --- a/EventStoreProjections/tests/MerchantBalanceCalculatorTests.js +++ /dev/null @@ -1,1071 +0,0 @@ -require('../../NugetPackage/projections/continuous/MerchantBalanceCalculator.js'); -var projection = require('@transactionprocessing/esprojection-testing-framework'); -var testData = require('./TestData.js'); -var describe = require('tape-describe'); -var test = describe('Merchant Balance Calculator Tests'); - - test('Projection handles merchant created events', t => - { - projection.initialize(); - - projection.setState({ - initialised: true, - availableBalance: 0, - balance: 0, - lastDepositDateTime: null, - lastSaleDateTime: null, - lastFeeProcessedDateTime: null, - debug: [], - totalDeposits: 0, - totalAuthorisedSales: 0, - totalDeclinedSales: 0, - totalFees: 0, - emittedEvents: 1 - }); - - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var streamName = "$ce-MerchantArchive"; - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState,null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.merchantName, merchantCreatedEvent.data.merchantName); - t.end(); - }); - - test('Projection handles merchant manual deposit event', t => { - - projection.initialize(); - - projection.setState({ - initialised: true, - availableBalance: 0, - balance: 0, - lastDepositDateTime: null, - lastSaleDateTime: null, - lastFeeProcessedDateTime: null, - debug: [], - totalDeposits: 0, - totalAuthorisedSales: 0, - totalDeclinedSales: 0, - totalFees: 0, - emittedEvents: 1 - }); - - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-05-30T06:21:31.356Z'; - var depositAmount = 1000.00; - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime,depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState,null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount); - t.equal(projectionState.balance,depositAmount); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,2); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - console.log(eventBody); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount); - t.equal(eventBody.changeAmount,depositAmount); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId, manualDepositMadeEvent.data.merchantId); - t.end(); - }); - - test('Projection handles merchant automatic deposit event', t => { - - projection.initialize(); - - projection.setState({ - initialised: true, - availableBalance: 0, - balance: 0, - lastDepositDateTime: null, - lastSaleDateTime: null, - lastFeeProcessedDateTime: null, - debug: [], - totalDeposits: 0, - totalAuthorisedSales: 0, - totalDeclinedSales: 0, - totalFees: 0, - emittedEvents: 1 - }); - - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-05-30T06:21:31.356Z'; - var depositAmount = 1000.00; - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent = testData.getAutomaticDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState, null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount); - t.equal(projectionState.balance,depositAmount); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,2); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - console.log(eventBody); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount); - t.equal(eventBody.changeAmount,depositAmount); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId, manualDepositMadeEvent.data.merchantId); - t.end(); - }); - -test('Projection handles multiple merchant manual deposit event', t => { - - projection.initialize(); - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime1 = '2020-05-30T06:21:31.356Z'; - var depositAmount1 = 1000.00; - var depositDateTime2 = '2020-06-01T06:21:31.356Z'; - var depositAmount2 = 500.00; - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent1 = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime1, depositAmount1); - - projection.processEvent( - streamName, - manualDepositMadeEvent1.eventType, - manualDepositMadeEvent1.data, - null, - manualDepositMadeEvent1.eventId); - - var manualDepositMadeEvent2 = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime2, depositAmount2); - projection.processEvent( - streamName, - manualDepositMadeEvent2.eventType, - manualDepositMadeEvent2.data, - null, - manualDepositMadeEvent2.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState, null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount1 + depositAmount2); - t.equal(projectionState.balance,depositAmount1 + depositAmount2); - t.equal(projectionState.lastDepositDateTime,depositDateTime2); - - var events = projection.emittedEvents; - t.equal(events.length,3); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount1); - t.equal(eventBody.changeAmount,depositAmount1); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent1.eventId); - t.equal(eventBody.aggregateId,manualDepositMadeEvent1.data.merchantId); - - var eventBody = JSON.parse(events[2].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount1 + depositAmount2); - t.equal(eventBody.changeAmount,depositAmount2); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent2.eventId); - t.equal(eventBody.aggregateId, manualDepositMadeEvent2.data.merchantId); - t.end(); - }); - -test('Projection handles multiple merchant manual deposit event not in date order', t => { - - projection.initialize(); - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime2 = '2020-05-30T06:21:31.356Z'; - var depositAmount2 = 1000.00; - var depositDateTime1 = '2020-06-01T06:21:31.356Z'; - var depositAmount1 = 500.00; - var expectedBalance = depositAmount1 + depositAmount2; - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent1 = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime1, depositAmount1); - - projection.processEvent( - streamName, - manualDepositMadeEvent1.eventType, - manualDepositMadeEvent1.data, - null, - manualDepositMadeEvent1.eventId); - - var manualDepositMadeEvent2 = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime2, depositAmount2); - - projection.processEvent( - streamName, - manualDepositMadeEvent2.eventType, - manualDepositMadeEvent2.data, - null, - manualDepositMadeEvent2.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState, null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount1 + depositAmount2); - t.equal(projectionState.balance,depositAmount1 + depositAmount2); - t.equal(projectionState.lastDepositDateTime,depositDateTime1); - - var events = projection.emittedEvents; - t.equal(events.length,3); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount1); - t.equal(eventBody.changeAmount,depositAmount1); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent1.eventId); - t.equal(eventBody.aggregateId,manualDepositMadeEvent1.data.merchantId); - - var eventBody = JSON.parse(events[2].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount1 + depositAmount2); - t.equal(eventBody.changeAmount,depositAmount2); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent2.eventId); - t.equal(eventBody.aggregateId, manualDepositMadeEvent2.data.merchantId); - t.end(); - }); - - test('Projection reduces available balance after transaction started message processed', t => - { - projection.initialize(); - - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-06-01T06:21:31.356Z'; - var depositAmount = 5000.00; - var transactionId = 'cf80660e-88c1-434c-a063-92e9076eda1b'; - var transactionAmount = 100.00; - var transactionType = 'Sale'; - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId,merchantId, transactionId, transactionAmount, transactionType); - - projection.processEvent( - streamName, - transactionHasStartedEvent.eventType, - transactionHasStartedEvent.data, - null, - transactionHasStartedEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState, null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount - transactionAmount); - t.equal(projectionState.balance,depositAmount); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - t.equal(projectionState.lastSaleDateTime,transactionHasStartedEvent.data.transactionDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,2); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount); - t.equal(eventBody.changeAmount,depositAmount); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId, manualDepositMadeEvent.data.merchantId); - t.end(); - }); - -test('Projection reduces balance after transaction completed message processed if transaction is successful', t => { - - projection.initialize(); - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-06-01T06:21:31.356Z'; - var depositAmount = 5000.00; - var transactionId = 'cf80660e-88c1-434c-a063-92e9076eda1b'; - var transactionAmount = 100.00; - var transactionType = 'Sale'; - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId, merchantId, transactionId, transactionAmount, transactionType); - - projection.processEvent( - streamName, - transactionHasStartedEvent.eventType, - transactionHasStartedEvent.data, - null, - transactionHasStartedEvent.eventId); - - var transactionHasBeenCompletedEvent = - testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, true, transactionAmount); - - projection.processEvent( - streamName, - transactionHasBeenCompletedEvent.eventType, - transactionHasBeenCompletedEvent.data, - null, - transactionHasBeenCompletedEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState, null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount - transactionAmount); - t.equal(projectionState.balance,depositAmount - transactionAmount); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - t.equal(projectionState.lastSaleDateTime,transactionHasStartedEvent.data.transactionDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,3); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount); - t.equal(eventBody.changeAmount,depositAmount); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId,manualDepositMadeEvent.data.merchantId); - - var eventBody = JSON.parse(events[2].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount - transactionAmount); - t.equal(eventBody.changeAmount,transactionAmount * -1); - t.equal(eventBody.reference,"Transaction Completed"); - t.equal(eventBody.eventId,transactionHasBeenCompletedEvent.eventId); - t.equal(eventBody.aggregateId, transactionHasBeenCompletedEvent.data.transactionId); - t.end(); - }); - -test('Projection resets available balance after transaction completed message processed if transaction is not successful', t => { - projection.initialize(); - - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-06-01T06:21:31.356Z'; - var depositAmount = 5000.00; - var transactionId = 'cf80660e-88c1-434c-a063-92e9076eda1b'; - var transactionAmount = 100.00; - var transactionType = 'Sale'; - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId, merchantId, transactionId, transactionAmount, transactionType); - - projection.processEvent( - streamName, - transactionHasStartedEvent.eventType, - transactionHasStartedEvent.data, - null, - transactionHasStartedEvent.eventId); - - var transactionHasBeenCompletedEvent = - testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, false,transactionAmount); - - projection.processEvent( - streamName, - transactionHasBeenCompletedEvent.eventType, - transactionHasBeenCompletedEvent.data, - null, - transactionHasBeenCompletedEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState, null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount); - t.equal(projectionState.balance,depositAmount); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - t.equal(projectionState.lastSaleDateTime,transactionHasStartedEvent.data.transactionDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,2); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount); - t.equal(eventBody.changeAmount,depositAmount); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId, manualDepositMadeEvent.data.merchantId); - t.end(); - }); - -test('Projection handles merchant fee event', t => { - projection.initialize(); - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-06-01T06:21:31.356Z'; - var depositAmount = 5000.00; - var transactionId = 'cf80660e-88c1-434c-a063-92e9076eda1b'; - var transactionAmount = 100.00; - var transactionType = 'Sale'; - var feeEventCreatedDateTime = '2020-05-30T06:21:31.356Z'; - var calculatedValue = 0.50; - - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId, merchantId, transactionId, transactionAmount, transactionType); - - projection.processEvent( - streamName, - transactionHasStartedEvent.eventType, - transactionHasStartedEvent.data, - null, - transactionHasStartedEvent.eventId); - - var transactionHasBeenCompletedEvent = - testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, true, transactionAmount); - - projection.processEvent( - streamName, - transactionHasBeenCompletedEvent.eventType, - transactionHasBeenCompletedEvent.data, - null, - transactionHasBeenCompletedEvent.eventId); - - var merchantFeeAddedToTransactionEvent = testData.getMerchantFeeAddedToTransactionEvent(estateId, merchantId, transactionId, calculatedValue, feeEventCreatedDateTime); - - projection.processEvent( - streamName, - merchantFeeAddedToTransactionEvent.eventType, - merchantFeeAddedToTransactionEvent.data, - null, - merchantFeeAddedToTransactionEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState, null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount - transactionAmount + calculatedValue); - t.equal(projectionState.balance,depositAmount - transactionAmount + calculatedValue); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - t.equal(projectionState.lastSaleDateTime,transactionHasStartedEvent.data.transactionDateTime); - t.equal(projectionState.lastFeeProcessedDateTime,feeEventCreatedDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,4); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount); - t.equal(eventBody.changeAmount,depositAmount); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId,manualDepositMadeEvent.data.merchantId); - - var eventBody = JSON.parse(events[2].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount - transactionAmount); - t.equal(eventBody.changeAmount,transactionAmount * -1); - t.equal(eventBody.reference,"Transaction Completed"); - t.equal(eventBody.eventId,transactionHasBeenCompletedEvent.eventId); - t.equal(eventBody.aggregateId,transactionHasBeenCompletedEvent.data.transactionId); - - var eventBody = JSON.parse(events[3].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount - transactionAmount + calculatedValue); - t.equal(eventBody.changeAmount,calculatedValue); - t.equal(eventBody.reference,"Transaction Fee Processed"); - t.equal(eventBody.eventId,merchantFeeAddedToTransactionEvent.eventId); - t.equal(eventBody.aggregateId, merchantFeeAddedToTransactionEvent.data.transactionId); - t.end(); - }); - -test('Projection handles multiple merchant fee event not in date order', t => -{ - projection.initialize(); - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-06-01T06:21:31.356Z'; - var depositAmount = 5000.00; - var transactionId = 'cf80660e-88c1-434c-a063-92e9076eda1b'; - var transactionAmount = 100.00; - var transactionType = 'Sale'; - var feeEventCreatedDateTime1 = '2020-05-30T06:21:31.356Z'; - var calculatedValue1 = 1.0; - var feeEventCreatedDateTime2 = '2020-05-30T04:21:31.356Z'; - var calculatedValue2 = 1.5; - - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId, merchantId, transactionId, transactionAmount, transactionType); - - projection.processEvent( - streamName, - transactionHasStartedEvent.eventType, - transactionHasStartedEvent.data, - null, - transactionHasStartedEvent.eventId); - - var transactionHasBeenCompletedEvent = - testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, true, transactionAmount); - - projection.processEvent( - streamName, - transactionHasBeenCompletedEvent.eventType, - transactionHasBeenCompletedEvent.data, - null, - transactionHasBeenCompletedEvent.eventId); - - var merchantFeeAddedToTransactionEvent1 = testData.getMerchantFeeAddedToTransactionEvent(estateId, merchantId, transactionId, calculatedValue1, feeEventCreatedDateTime1); - - projection.processEvent( - streamName, - merchantFeeAddedToTransactionEvent1.eventType, - merchantFeeAddedToTransactionEvent1.data, - null, - merchantFeeAddedToTransactionEvent1.eventId); - - var merchantFeeAddedToTransactionEvent2 = testData.getMerchantFeeAddedToTransactionEvent(estateId, merchantId, transactionId, calculatedValue2, feeEventCreatedDateTime2); - - projection.processEvent( - streamName, - merchantFeeAddedToTransactionEvent2.eventType, - merchantFeeAddedToTransactionEvent2.data, - null, - merchantFeeAddedToTransactionEvent2.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState, null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount - transactionAmount + calculatedValue1 + calculatedValue2); - t.equal(projectionState.balance,depositAmount - transactionAmount + calculatedValue1 + calculatedValue2); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - t.equal(projectionState.lastSaleDateTime,transactionHasStartedEvent.data.transactionDateTime); - t.equal(projectionState.lastFeeProcessedDateTime,merchantFeeAddedToTransactionEvent1.data.feeCalculatedDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,5); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount); - t.equal(eventBody.changeAmount,depositAmount); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId,manualDepositMadeEvent.data.merchantId); - - var eventBody = JSON.parse(events[2].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount - transactionAmount); - t.equal(eventBody.changeAmount,transactionAmount * -1); - t.equal(eventBody.reference,"Transaction Completed"); - t.equal(eventBody.eventId,transactionHasBeenCompletedEvent.eventId); - t.equal(eventBody.aggregateId,transactionHasBeenCompletedEvent.data.transactionId); - - var eventBody = JSON.parse(events[3].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount - transactionAmount + calculatedValue1); - t.equal(eventBody.changeAmount,calculatedValue1); - t.equal(eventBody.reference,"Transaction Fee Processed"); - t.equal(eventBody.eventId,merchantFeeAddedToTransactionEvent1.eventId); - t.equal(eventBody.aggregateId,merchantFeeAddedToTransactionEvent1.data.transactionId); - - var eventBody = JSON.parse(events[4].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount - transactionAmount + calculatedValue1 + calculatedValue2); - t.equal(eventBody.changeAmount,calculatedValue2); - t.equal(eventBody.reference,"Transaction Fee Processed"); - t.equal(eventBody.eventId,merchantFeeAddedToTransactionEvent2.eventId); - t.equal(eventBody.aggregateId, merchantFeeAddedToTransactionEvent2.data.transactionId); - t.end(); - }); - - test('Projection does not emit a balance event on a successful logon transaction ', t => - { - projection.initialize(); - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-06-01T06:21:31.356Z'; - var depositAmount = 5000.00; - var transactionId = 'cf80660e-88c1-434c-a063-92e9076eda1b'; - var transactionAmount = 0; - var transactionType = 'Logon'; - - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var manualDepositMadeEvent = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId, merchantId, transactionId, transactionAmount, transactionType); - - projection.processEvent( - streamName, - transactionHasStartedEvent.eventType, - transactionHasStartedEvent.data, - null, - transactionHasStartedEvent.eventId); - - var transactionHasBeenCompletedEvent = - testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, true, transactionAmount); - - projection.processEvent( - streamName, - transactionHasBeenCompletedEvent.eventType, - transactionHasBeenCompletedEvent.data, - null, - transactionHasBeenCompletedEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState,null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.availableBalance,depositAmount); - t.equal(projectionState.balance,depositAmount); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,2); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId, manualDepositMadeEvent.data.merchantId); - t.end(); - }); - -test('Projection handles events with no Merchant Created', t => { - projection.initialize(); - var estateId = '2af2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = '6be48c04-a00e-4985-a50c-e27461ca47e1'; - var merchantName = 'Test Merchant 1'; - var depositDateTime = '2020-06-01T06:21:31.356Z'; - var depositAmount = 5000.00; - var transactionId = 'cf80660e-88c1-434c-a063-92e9076eda1b'; - var transactionAmount = 100.00; - var transactionType = 'Sale'; - var streamName = "$ce-MerchantArchive"; - - var projectionState = projection.getState(); - t.true(projectionState.initialised); - - var manualDepositMadeEvent = testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount); - - projection.processEvent( - streamName, - manualDepositMadeEvent.eventType, - manualDepositMadeEvent.data, - null, - manualDepositMadeEvent.eventId); - - var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId, merchantId, transactionId, transactionAmount, transactionType); - - projection.processEvent( - streamName, - transactionHasStartedEvent.eventType, - transactionHasStartedEvent.data, - null, - transactionHasStartedEvent.eventId); - - var transactionHasBeenCompletedEvent = - testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, true, transactionAmount); - - projection.processEvent( - streamName, - transactionHasBeenCompletedEvent.eventType, - transactionHasBeenCompletedEvent.data, - null, - transactionHasBeenCompletedEvent.eventId); - - var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName); - - projection.processEvent( - streamName, - merchantCreatedEvent.eventType, - merchantCreatedEvent.data, - null, - merchantCreatedEvent.eventId); - - var projectionState = projection.getState(); - - t.notEqual(projectionState,null); - - t.equal(projectionState.estateId,merchantCreatedEvent.data.estateId); - t.equal(projectionState.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(projectionState.merchantName,merchantCreatedEvent.data.merchantName); - t.equal(projectionState.availableBalance,depositAmount - transactionAmount); - t.equal(projectionState.balance,depositAmount - transactionAmount); - t.equal(projectionState.lastDepositDateTime,depositDateTime); - t.equal(projectionState.lastSaleDateTime,transactionHasStartedEvent.data.transactionDateTime); - - var events = projection.emittedEvents; - t.equal(events.length,3); - - var eventBody = JSON.parse(events[0].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,0); - t.equal(eventBody.changeAmount,0); - t.equal(eventBody.reference,"Opening Balance"); - t.equal(eventBody.eventId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.aggregateId,merchantCreatedEvent.data.merchantId); - - var eventBody = JSON.parse(events[1].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount); - t.equal(eventBody.changeAmount,depositAmount); - t.equal(eventBody.reference,"Merchant Deposit"); - t.equal(eventBody.eventId,manualDepositMadeEvent.eventId); - t.equal(eventBody.aggregateId,manualDepositMadeEvent.data.merchantId); - - var eventBody = JSON.parse(events[2].body); - t.equal(eventBody.estateId,merchantCreatedEvent.data.estateId); - t.equal(eventBody.merchantId,merchantCreatedEvent.data.merchantId); - t.equal(eventBody.balance,depositAmount - transactionAmount); - t.equal(eventBody.changeAmount,transactionAmount * -1); - t.equal(eventBody.reference,"Transaction Completed"); - t.equal(eventBody.eventId,transactionHasBeenCompletedEvent.eventId); - t.equal(eventBody.aggregateId, transactionHasBeenCompletedEvent.data.transactionId); - t.end(); - }); diff --git a/EventStoreProjections/tests/TransactionEnricherTests.js b/EventStoreProjections/tests/TransactionEnricherTests.js deleted file mode 100644 index fce9b51..0000000 --- a/EventStoreProjections/tests/TransactionEnricherTests.js +++ /dev/null @@ -1,130 +0,0 @@ -require('../../NugetPackage/projections/continuous/TransactionEnricher.js'); -var projection = require('@transactionprocessing/esprojection-testing-framework'); -var testData = require('./TestData.js'); -var describe = require('tape-describe'); -var test = describe('Transaction Enricher Tests'); - -test('Projection Can Handle Transaction Events', - t => - { - projection.initialize(); - - var estateId = '3bf2dab2-86d6-44e3-bcf8-51bec65cf8bc'; - var merchantId = 'c4c33d75-f011-40e4-9d97-1f428ab563d8'; - var transactionId = 'c4c33d75-f011-40e4-9d97-1f428ab563d8'; - var transactionAmount = 100.00; - var transactionType = 'Sale'; - - var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId, - merchantId, - transactionId, - transactionAmount, - transactionType); - - var contractId = '327678c4-d349-4e1c-b466-f2ea4b0e869b'; - var productId = '001b29c9-91f5-42f9-95d0-6fd9d69a2e18'; - - var productDetailsAddedToTransactionEvent = - testData.getProductDetailsAddedToTransactionEvent(estateId, - merchantId, - transactionId, - contractId, - productId); - - var customerAccountNumber = "1234567890"; - var additionalRequestDataRecordedEvent = testData.getAdditionalRequestDataRecordedEvent(estateId, - merchantId, - transactionId, - transactionAmount, - customerAccountNumber); - - var transactionHasBeenLocallyAuthorisedEvent = - testData.getTransactionHasBeenLocallyAuthorisedEvent(estateId, merchantId, transactionId); - - var transactionHasBeenLocallyDeclinedEvent = - testData.getTransactionHasBeenLocallyDeclinedEvent(estateId, merchantId, transactionId); - - var transactionAuthorisedByOperatorEvent = - testData.getTransactionAuthorisedByOperatorEvent(estateId, merchantId, transactionId); - - var transactionDeclinedByOperatorEvent = - testData.getTransactionDeclinedByOperatorEvent(estateId, merchantId, transactionId); - - var transactionHasBeenCompletedEvent = - testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, true); - - var calculatedValue = 5.00; - var eventCreatedDateTime = "2020-05-16T07:47:51.6617562+00:00"; - var merchantFeeAddedToTransactionEvent = testData.getMerchantFeeAddedToTransactionEvent(estateId, - merchantId, - transactionId, - calculatedValue, - eventCreatedDateTime); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - transactionHasStartedEvent.eventType, - transactionHasStartedEvent.data, - null, - transactionHasStartedEvent.eventId); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - productDetailsAddedToTransactionEvent.eventType, - productDetailsAddedToTransactionEvent.data, - null, - productDetailsAddedToTransactionEvent.eventId); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - additionalRequestDataRecordedEvent.eventType, - additionalRequestDataRecordedEvent.data, - null, - additionalRequestDataRecordedEvent.eventId); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - transactionHasBeenLocallyAuthorisedEvent.eventType, - transactionHasBeenLocallyAuthorisedEvent.data, - null, - transactionHasBeenLocallyAuthorisedEvent.eventId); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - transactionHasBeenLocallyDeclinedEvent.eventType, - transactionHasBeenLocallyDeclinedEvent.data); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - transactionAuthorisedByOperatorEvent.eventType, - transactionAuthorisedByOperatorEvent.data, - null, - transactionAuthorisedByOperatorEvent.eventId); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - transactionDeclinedByOperatorEvent.eventType, - transactionDeclinedByOperatorEvent.data, - null, - transactionDeclinedByOperatorEvent.eventId); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - transactionHasBeenCompletedEvent.eventType, - transactionHasBeenCompletedEvent.data, - null, - transactionHasBeenCompletedEvent.eventId); - - projection.processEvent( - 'TransactionAggregate-' + transactionId.replace(/-/gi, ""), - merchantFeeAddedToTransactionEvent.eventType, - merchantFeeAddedToTransactionEvent.data, - null, - merchantFeeAddedToTransactionEvent.eventId); - - var events = projection.emittedEvents; - t.equal(events.length, 9); - var eventBody = JSON.parse(events[8].body); - t.equal(eventBody.eventId, merchantFeeAddedToTransactionEvent.eventId); - t.end(); - }); \ No newline at end of file diff --git a/NugetPackage/NugetPackage.csproj b/NugetPackage/NugetPackage.csproj index 5f0440b..59e89b1 100644 --- a/NugetPackage/NugetPackage.csproj +++ b/NugetPackage/NugetPackage.csproj @@ -21,12 +21,6 @@ Always - - Always - - - Always - Always diff --git a/NugetPackage/obj/Debug/net5.0/NugetPackage.assets.cache b/NugetPackage/obj/Debug/net5.0/NugetPackage.assets.cache index a3eb5dd..8ad92e2 100644 Binary files a/NugetPackage/obj/Debug/net5.0/NugetPackage.assets.cache and b/NugetPackage/obj/Debug/net5.0/NugetPackage.assets.cache differ diff --git a/NugetPackage/obj/NugetPackage.csproj.nuget.dgspec.json b/NugetPackage/obj/NugetPackage.csproj.nuget.dgspec.json index 8f2f197..df617bd 100644 --- a/NugetPackage/obj/NugetPackage.csproj.nuget.dgspec.json +++ b/NugetPackage/obj/NugetPackage.csproj.nuget.dgspec.json @@ -14,7 +14,8 @@ "outputPath": "C:\\Projects\\TransactionProcessing\\EventStoreProjections\\NugetPackage\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configFilePaths": [ "C:\\Users\\stuar\\AppData\\Roaming\\NuGet\\NuGet.Config", @@ -25,11 +26,11 @@ "net5.0" ], "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://www.myget.org/F/tahoe-eposity/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {}, + "https://nuget.devexpress.com/tP9yfuwysSqblTj4iZAmef8L1WgJPsXlZjZLvEacI8BaCoK3A1/api": {}, "https://www.myget.org/F/transactionprocessing/api/v3/index.json": {}, + "https://www.myget.org/F/vme-intellistore/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {}, "https://www.myget.org/F/vme-shared/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {} }, "frameworks": { @@ -53,7 +54,8 @@ "net47", "net471", "net472", - "net48" + "net48", + "net481" ], "assetTargetFallback": true, "warn": true, @@ -62,7 +64,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.300\\RuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.100-rc.1.22431.12\\RuntimeIdentifierGraph.json" } } } diff --git a/NugetPackage/obj/NugetPackage.csproj.nuget.g.props b/NugetPackage/obj/NugetPackage.csproj.nuget.g.props index 3d45364..35c5861 100644 --- a/NugetPackage/obj/NugetPackage.csproj.nuget.g.props +++ b/NugetPackage/obj/NugetPackage.csproj.nuget.g.props @@ -5,12 +5,13 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\stuar\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + C:\Users\stuar\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder PackageReference - 6.2.0 + 6.4.0 + \ No newline at end of file diff --git a/NugetPackage/obj/project.assets.json b/NugetPackage/obj/project.assets.json index fed7aab..7d13052 100644 --- a/NugetPackage/obj/project.assets.json +++ b/NugetPackage/obj/project.assets.json @@ -9,7 +9,8 @@ }, "packageFolders": { "C:\\Users\\stuar\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} }, "project": { "version": "1.0.0", @@ -21,7 +22,8 @@ "outputPath": "C:\\Projects\\TransactionProcessing\\EventStoreProjections\\NugetPackage\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configFilePaths": [ "C:\\Users\\stuar\\AppData\\Roaming\\NuGet\\NuGet.Config", @@ -32,11 +34,11 @@ "net5.0" ], "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {}, - "https://www.myget.org/F/tahoe-eposity/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {}, + "https://nuget.devexpress.com/tP9yfuwysSqblTj4iZAmef8L1WgJPsXlZjZLvEacI8BaCoK3A1/api": {}, "https://www.myget.org/F/transactionprocessing/api/v3/index.json": {}, + "https://www.myget.org/F/vme-intellistore/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {}, "https://www.myget.org/F/vme-shared/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {} }, "frameworks": { @@ -60,7 +62,8 @@ "net47", "net471", "net472", - "net48" + "net48", + "net481" ], "assetTargetFallback": true, "warn": true, @@ -69,7 +72,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.300\\RuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.100-rc.1.22431.12\\RuntimeIdentifierGraph.json" } } } diff --git a/NugetPackage/obj/project.nuget.cache b/NugetPackage/obj/project.nuget.cache index 7dfa85b..0c1f2d6 100644 --- a/NugetPackage/obj/project.nuget.cache +++ b/NugetPackage/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "mzaJVUxba/LdoG9pTrtfcujaIcV5lQS0DESETBP10FnQv99UjWRXVgF4KyXkj5OZl/oopus6hcUeW+KoR6JJLQ==", + "dgSpecHash": "2qZlbuCWTL0+jLW3p3S/Xvq3zNi10UuJnAbS0hAw5g+/KjUBWgNNTUbLiYH2r2l6Vo0j8rq4I+9AhYnPRbOcug==", "success": true, "projectFilePath": "C:\\Projects\\TransactionProcessing\\EventStoreProjections\\NugetPackage\\NugetPackage.csproj", "expectedPackageFiles": [], diff --git a/NugetPackage/projections/continuous/MerchantBalanceCalculator.js b/NugetPackage/projections/continuous/MerchantBalanceCalculator.js deleted file mode 100644 index e2d1654..0000000 --- a/NugetPackage/projections/continuous/MerchantBalanceCalculator.js +++ /dev/null @@ -1,255 +0,0 @@ -//starttestsetup -var fromCategory = fromCategory || require('../../../EventStoreProjections/node_modules/@transactionprocessing/esprojection-testing-framework').scope.fromCategory; -var partitionBy = partitionBy !== null ? partitionBy : require('../../../EventStoreProjections/node_modules/@transactionprocessing/esprojection-testing-framework').scope.partitionBy; -var emit = emit || require('../../../EventStoreProjections/node_modules/@transactionprocessing/esprojection-testing-framework').scope.emit; -//endtestsetup - -fromCategory('MerchantArchive') - .foreachStream() - .when({ - $init: function () { - return { - initialised: true, - availableBalance: 0, - balance: 0, - lastDepositDateTime: null, - lastSaleDateTime: null, - lastFeeProcessedDateTime: null, - debug: [], - totalDeposits: 0, - totalAuthorisedSales: 0, - totalDeclinedSales: 0, - totalFees: 0, - emittedEvents:1 - } - }, - $any: function (s, e) - { - if (e === null || e.data === null || e.data.IsJson === false) - return; - - eventbus.dispatch(s, e); - } - }); - -var eventbus = { - dispatch: function (s, e) { - - if (e.eventType === 'MerchantCreatedEvent') { - merchantCreatedEventHandler(s, e); - return; - } - - if (e.eventType === 'ManualDepositMadeEvent') { - depositMadeEventHandler(s, e); - return; - } - - if (e.eventType === 'AutomaticDepositMadeEvent') { - depositMadeEventHandler(s, e); - return; - } - - if (e.eventType === 'TransactionHasStartedEvent') { - transactionHasStartedEventHandler(s, e); - return; - } - - if (e.eventType === 'TransactionHasBeenCompletedEvent') { - transactionHasCompletedEventHandler(s, e); - return; - } - - if (e.eventType === 'MerchantFeeAddedToTransactionEvent') { - merchantFeeAddedToTransactionEventHandler(s, e); - return; - } - } -} - -function getStreamName(s) { - return "MerchantBalanceHistory-" + s.merchantId.replace(/-/gi, ""); -} - -function getEventTypeName() { - return 'EstateReporting.BusinessLogic.Events.' + getEventType() + ', EstateReporting.BusinessLogic.Events'; -} - -function getEventType() { return "MerchantBalanceChangedEvent"; } - -function addTwoNumbers(number1, number2) { - return parseFloat((number1 + number2).toFixed(4)); -} - -function subtractTwoNumbers(number1, number2) { - return parseFloat((number1 - number2).toFixed(4)); -} - -var incrementBalanceFromDeposit = function (s, amount, dateTime) { - s.balance = addTwoNumbers(s.balance, amount); - s.availableBalance = addTwoNumbers(s.availableBalance, amount); - s.totalDeposits = addTwoNumbers(s.totalDeposits, amount); - - // protect against events coming in out of order - if (s.lastDepositDateTime === null || dateTime > s.lastDepositDateTime) { - s.lastDepositDateTime = dateTime; - } -}; - -var incrementBalanceFromMerchantFee = function (s, amount, dateTime) { - s.balance = addTwoNumbers(s.balance, amount); - s.availableBalance = addTwoNumbers(s.availableBalance, amount); - s.totalFees = addTwoNumbers(s.totalFees, amount); - - // protect against events coming in out of order - if (s.lastFeeProcessedDateTime === null || dateTime > s.lastFeeProcessedDateTime) { - s.lastFeeProcessedDateTime = dateTime; - } -}; - -var decrementAvailableBalanceFromTransactionStarted = function (s, amount, dateTime) { - s.availableBalance = subtractTwoNumbers(s.availableBalance, amount); - - // protect against events coming in out of order - if (s.lastSaleDateTime === null || dateTime > s.lastSaleDateTime) { - s.lastSaleDateTime = dateTime; - } -}; - -var decrementBalanceFromAuthorisedTransaction = function (s, amount) { - s.balance = subtractTwoNumbers(s.balance, amount); - s.totalAuthorisedSales = addTwoNumbers(s.totalAuthorisedSales, amount); -}; - -var incrementAvailableBalanceFromDeclinedTransaction = function (s, amount) { - s.availableBalance = addTwoNumbers(s.availableBalance, amount); - s.totalDeclinedSales = addTwoNumbers(s.totalDeclinedSales, amount); -}; - -var merchantCreatedEventHandler = function (s, e) { - - // Setup the state here - s.estateId = e.data.estateId; - s.merchantId = e.data.merchantId; - s.merchantName = e.data.merchantName; -}; - -var emitBalanceChangedEvent = function (aggregateId, eventId, s, changeAmount, dateTime, reference) { - - if (s.initialised === true) { - - // Emit an opening balance event - var openingBalanceEvent = { - $type: getEventTypeName(), - "merchantId": s.merchantId, - "estateId": s.estateId, - "balance": 0, - "changeAmount": 0, - "eventId": s.merchantId, - "eventCreatedDateTime": dateTime, - "reference": "Opening Balance", - "aggregateId": s.merchantId - } - emit(getStreamName(s), getEventType(), openingBalanceEvent); - s.emittedEvents++; - s.initialised = false; - } - - var balanceChangedEvent = { - $type: getEventTypeName(), - "merchantId": s.merchantId, - "estateId": s.estateId, - "balance": s.balance, - "changeAmount": changeAmount, - "eventId": eventId, - "eventCreatedDateTime": dateTime, - "reference": reference, - "aggregateId": aggregateId - } - - // emit an balance changed event here - emit(getStreamName(s), getEventType(), balanceChangedEvent); - s.emittedEvents++; - return s; -}; - -var depositMadeEventHandler = function (s, e) { - - // Check if we have got a merchant id already set - if (s.merchantId === undefined) { - // We have obviously not got a created event yet but we must process this event, - // so fill in what we can here - s.estateId = e.data.estateId; - s.merchantId = e.data.merchantId; - } - - incrementBalanceFromDeposit(s, e.data.amount, e.data.depositDateTime); - - // emit an balance changed event here - emitBalanceChangedEvent(e.data.merchantId, e.eventId, s, e.data.amount, e.data.depositDateTime, "Merchant Deposit"); -}; - -var transactionHasStartedEventHandler = function (s, e) { - - // Check if we have got a merchant id already set - if (s.merchantId === undefined) { - // We have obviously not got a created event yet but we must process this event, - // so fill in what we can here - e.estateId = e.data.estateId; - s.merchantId = e.data.merchantId; - } - - var amount = e.data.transactionAmount; - if (amount === undefined) { - amount = 0; - } - decrementAvailableBalanceFromTransactionStarted(s, amount, e.data.transactionDateTime); -}; - -var transactionHasCompletedEventHandler = function (s, e) { - - // Check if we have got a merchant id already set - if (s.merchantId === undefined) { - // We have obviously not got a created event yet but we must process this event, - // so fill in what we can here - e.estateId = e.data.estateId; - s.merchantId = e.data.merchantId; - } - - var amount = e.data.transactionAmount; - if (amount === undefined) { - amount = 0; - } - - var transactionDateTime = new Date(Date.parse(e.data.completedDateTime)); - var completedTime = new Date(transactionDateTime.getFullYear(), transactionDateTime.getMonth(), transactionDateTime.getDate(), transactionDateTime.getHours(), transactionDateTime.getMinutes(), transactionDateTime.getSeconds() + 2); - - if (e.data.isAuthorised) { - decrementBalanceFromAuthorisedTransaction(s, amount, completedTime); - - // emit an balance changed event here - if (amount > 0) { - s = emitBalanceChangedEvent(e.data.transactionId, e.eventId, s, amount * -1, completedTime, "Transaction Completed"); - } - } - else { - incrementAvailableBalanceFromDeclinedTransaction(s, amount, completedTime); - } -}; - -var merchantFeeAddedToTransactionEventHandler = function (s, e) { - - // Check if we have got a merchant id already set - if (s.merchantId === undefined) { - // We have obviously not got a created event yet but we must process this event, - // so fill in what we can here - e.estateId = e.data.estateId; - s.merchantId = e.data.merchantId; - } - - // increment the balance now - incrementBalanceFromMerchantFee(s, e.data.calculatedValue, e.data.feeCalculatedDateTime); - - // emit an balance changed event here - s = emitBalanceChangedEvent(e.data.transactionId, e.eventId, s, e.data.calculatedValue, e.data.feeCalculatedDateTime, "Transaction Fee Processed"); -} \ No newline at end of file diff --git a/NugetPackage/projections/continuous/TransactionEnricher.js b/NugetPackage/projections/continuous/TransactionEnricher.js deleted file mode 100644 index 5faabd9..0000000 --- a/NugetPackage/projections/continuous/TransactionEnricher.js +++ /dev/null @@ -1,70 +0,0 @@ -//starttestsetup -var fromCategory = fromCategory || require('../../../EventStoreProjections/node_modules/@transactionprocessing/esprojection-testing-framework').scope.fromCategory; -var emit = emit || require('../../../EventStoreProjections/node_modules/@transactionprocessing/esprojection-testing-framework').scope.emit; -var linkTo = linkTo || require("../../../EventStoreProjections/node_modules//@transactionprocessing/esprojection-testing-framework").scope.linkTo; -//endtestsetup - -fromCategory('TransactionAggregate') - .foreachStream() - .when({ - $any: function (s, e) { - - if (e === null || e.data === null || e.data.IsJson === false) - return; - - eventbus.dispatch(s, e); - } - }); - -var eventbus = { - dispatch: function (s, e) { - - if (e.eventType === 'MerchantFeeAddedToTransactionEvent') { - merchantFeeAddedToTransactionEventHandler(s, e); - return; - } - if (e.eventType === 'ServiceProviderFeeAddedToTransactionEvent') { - serviceProviderFeeAddedToTransactionEventHandler(s, e); - return; - } - else { - //Just add the existing event to to our stream - linkTo(getStreamName(s), e); - } - - } -} - -function merchantFeeAddedToTransactionEventHandler(s, e) { - var newEvent = { - calculatedValue: e.data.calculatedValue, - feeCalculatedDateTime: e.data.feeCalculatedDateTime, - estateId: e.data.estateId, - feeId: e.data.feeId, - feeValue: e.data.feeValue, - merchantId: e.data.merchantId, - transactionId: e.data.transactionId, - feeCalculationType: e.data.feeCalculationType, - eventId: e.eventId - } - emit(getStreamName(s), "MerchantFeeAddedToTransactionEnrichedEvent", newEvent, null); -} - -function serviceProviderFeeAddedToTransactionEventHandler(s, e) { - var newEvent = { - calculatedValue: e.data.calculatedValue, - feeCalculatedDateTime: e.data.feeCalculatedDateTime, - estateId: e.data.estateId, - feeId: e.data.feeId, - feeValue: e.data.feeValue, - merchantId: e.data.merchantId, - transactionId: e.data.transactionId, - feeCalculationType: e.data.feeCalculationType, - eventId: e.eventId - } - emit(getStreamName(s), "ServiceProviderFeeAddedToTransactionEnrichedEvent", newEvent, null); -} - -function getStreamName(s) { - return "TransactionEnricherResult"; -} \ No newline at end of file