Skip to content

Commit 300b492

Browse files
Merge branch 'master' into task/#178_newconfigipaddress
2 parents 28af1ee + f5f24b4 commit 300b492

24 files changed

Lines changed: 718 additions & 302 deletions

File tree

TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/TransactionDomainEventHandlerTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ public async Task TransactionDomainEventHandler_Handle_TransactionHasBeenComplet
162162
var merchant = new MerchantResponse
163163
{
164164
SettlementSchedule = SettlementSchedule.Weekly,
165-
NextSettlementDueDate = DateTime.Now.AddDays(7)
166165
};
167166
this.EstateClient.Setup(e => e.GetMerchant(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
168167
.ReturnsAsync(merchant);
@@ -213,7 +212,6 @@ public async Task TransactionDomainEventHandler_Handle_TransactionHasBeenComplet
213212
var merchant = new MerchantResponse
214213
{
215214
SettlementSchedule = SettlementSchedule.Monthly,
216-
NextSettlementDueDate = DateTime.Now.AddMonths(1)
217215
};
218216
this.EstateClient.Setup(e => e.GetMerchant(It.IsAny<String>(), It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
219217
.ReturnsAsync(merchant);

TransactionProcessor.BusinessLogic/TransactionProcessor.BusinessLogic.csproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
</PropertyGroup>
66

77
<ItemGroup>
8-
<PackageReference Include="EstateManagement.Client" Version="1.0.15-build74" />
9-
<PackageReference Include="MessagingService.Client" Version="1.0.10.2" />
10-
<PackageReference Include="SecurityService.Client" Version="1.0.6.2" />
11-
<PackageReference Include="Shared.DomainDrivenDesign" Version="1.0.14" />
12-
<PackageReference Include="Shared.EventStore" Version="1.0.14" />
8+
<PackageReference Include="EstateManagement.Client" Version="1.0.17-build86" />
9+
<PackageReference Include="MessagingService.Client" Version="1.0.14-build56" />
10+
<PackageReference Include="SecurityService.Client" Version="1.0.8" />
11+
<PackageReference Include="Shared.DomainDrivenDesign" Version="1.1.0" />
12+
<PackageReference Include="Shared.EventStore" Version="1.1.0" />
1313
<PackageReference Include="MediatR" Version="9.0.0" />
1414
<PackageReference Include="System.IO.Abstractions" Version="13.2.9" />
15-
<PackageReference Include="VoucherManagement.Client" Version="1.0.4.1" />
15+
<PackageReference Include="VoucherManagement.Client" Version="1.0.8-build38" />
1616
</ItemGroup>
1717

1818
<ItemGroup>

TransactionProcessor.Client/TransactionProcessor.Client.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="ClientProxyBase" Version="1.0.14" />
9+
<PackageReference Include="ClientProxyBase" Version="1.1.0" />
1010
</ItemGroup>
1111

1212
<ItemGroup>

TransactionProcessor.IntegrationTests/Common/DockerHelper.cs

Lines changed: 164 additions & 217 deletions
Large diffs are not rendered by default.

TransactionProcessor.IntegrationTests/Settlement/Settlement.feature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Scenario: Get Pending Settlement
7373
| Reference | Amount | DateTime | MerchantName | EstateName |
7474
| Deposit1 | 210.00 | Today | Test Merchant 1 | Test Estate 1 |
7575
| Deposit1 | 110.00 | Today | Test Merchant 2 | Test Estate 1 |
76-
| Deposit1 | 110.00 | Today | Test Merchant 3 | Test Estate 1 |
76+
| Deposit1 | 120.00 | Today | Test Merchant 3 | Test Estate 1 |
7777

7878
When I perform the following transactions
7979
| DateTime | TransactionNumber | TransactionType | MerchantName | DeviceIdentifier | EstateName | OperatorName | TransactionAmount | CustomerAccountNumber | CustomerEmailAddress | ContractDescription | ProductName | RecipientEmail | RecipientMobile |

TransactionProcessor.IntegrationTests/Settlement/Settlement.feature.cs

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TransactionProcessor.IntegrationTests/Shared/SharedSteps.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,24 @@ public SharedSteps(ScenarioContext scenarioContext,
4646
[When(@"I create the following estates")]
4747
public async Task WhenICreateTheFollowingEstates(Table table)
4848
{
49+
foreach (TableRow tableRow in table.Rows)
50+
{
51+
String estateName = SpecflowTableHelper.GetStringRowValue(tableRow, "EstateName");
52+
// Setup the subscriptions for the estate
53+
await Retry.For(async () => { await this.TestingContext.DockerHelper.PopulateSubscriptionServiceConfiguration(estateName).ConfigureAwait(false); },
54+
retryFor: TimeSpan.FromMinutes(2),
55+
retryInterval: TimeSpan.FromSeconds(30));
56+
}
57+
4958
foreach (TableRow tableRow in table.Rows)
5059
{
5160
String estateName = SpecflowTableHelper.GetStringRowValue(tableRow, "EstateName");
5261

5362
CreateEstateRequest createEstateRequest = new CreateEstateRequest
54-
{
55-
EstateId = Guid.NewGuid(),
56-
EstateName = estateName
57-
};
63+
{
64+
EstateId = Guid.NewGuid(),
65+
EstateName = estateName
66+
};
5867

5968
CreateEstateResponse response = await this.TestingContext.DockerHelper.EstateClient.CreateEstate(this.TestingContext.AccessToken, createEstateRequest, CancellationToken.None).ConfigureAwait(false);
6069

@@ -73,11 +82,11 @@ public async Task WhenICreateTheFollowingEstates(Table table)
7382

7483
EstateResponse estate = null;
7584
await Retry.For(async () =>
76-
{
77-
estate = await this.TestingContext.DockerHelper.EstateClient
78-
.GetEstate(this.TestingContext.AccessToken, estateDetails.EstateId, CancellationToken.None).ConfigureAwait(false);
79-
estate.ShouldNotBeNull();
80-
}).ConfigureAwait(false);
85+
{
86+
estate = await this.TestingContext.DockerHelper.EstateClient
87+
.GetEstate(this.TestingContext.AccessToken, estateDetails.EstateId, CancellationToken.None).ConfigureAwait(false);
88+
estate.ShouldNotBeNull();
89+
}, retryFor: TimeSpan.FromSeconds(180)).ConfigureAwait(false);
8190

8291
estate.EstateName.ShouldBe(estateDetails.EstateName);
8392
}
@@ -793,7 +802,6 @@ public async Task GivenIMakeTheFollowingManualMerchantDeposits(Table table)
793802
MakeMerchantDepositRequest makeMerchantDepositRequest = new MakeMerchantDepositRequest
794803
{
795804
DepositDateTime = SpecflowTableHelper.GetDateForDateString(SpecflowTableHelper.GetStringRowValue(tableRow, "DateTime"), DateTime.Now),
796-
Source = MerchantDepositSource.Manual,
797805
Reference = SpecflowTableHelper.GetStringRowValue(tableRow, "Reference"),
798806
Amount = SpecflowTableHelper.GetDecimalValue(tableRow, "Amount")
799807
};

TransactionProcessor.IntegrationTests/TransactionProcessor.IntegrationTests.csproj

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="ClientProxyBase" Version="1.0.14" />
10+
<PackageReference Include="ClientProxyBase" Version="1.1.0" />
1111
<PackageReference Include="Ductus.FluentDocker" Version="2.10.7" />
12-
<PackageReference Include="EstateManagement.Client" Version="1.0.15-build74" />
13-
<PackageReference Include="EstateReporting.Database" Version="1.0.13.1" />
14-
<PackageReference Include="EventStore.Client.Grpc.PersistentSubscriptions" Version="20.10.0" />
15-
<PackageReference Include="EventStore.Client.Grpc.ProjectionManagement" Version="20.10.0" />
16-
<PackageReference Include="Grpc.Net.Client" Version="2.35.0" />
17-
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.2" />
12+
<PackageReference Include="EstateManagement.Client" Version="1.0.17-build86" />
13+
<PackageReference Include="EstateReporting.Database" Version="1.0.19-build87" />
14+
<PackageReference Include="EventStore.Client.Grpc.PersistentSubscriptions" Version="21.2.0" />
15+
<PackageReference Include="EventStore.Client.Grpc.ProjectionManagement" Version="21.2.0" />
16+
<PackageReference Include="Grpc.Net.Client" Version="2.40.0" />
17+
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.12" />
1818
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
19-
<PackageReference Include="SecurityService.Client" Version="1.0.6.2" />
20-
<PackageReference Include="Shared.IntegrationTesting" Version="1.0.14" />
19+
<PackageReference Include="SecurityService.Client" Version="1.0.8" />
20+
<PackageReference Include="Shared.IntegrationTesting" Version="1.1.0" />
2121
<PackageReference Include="Shouldly" Version="4.0.3" />
2222
<PackageReference Include="SpecFlow" Version="3.5.14" />
2323
<PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.5.14" />
@@ -57,6 +57,27 @@
5757
<None Update="nlog.config">
5858
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
5959
</None>
60+
<None Update="projections\continuous\CallbackHandlerEnricher.js">
61+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
62+
</None>
63+
<None Update="projections\continuous\EstateAggregator.js">
64+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
65+
</None>
66+
<None Update="projections\continuous\FileProcessorSubscriptionStreamBuilder.js">
67+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
68+
</None>
69+
<None Update="projections\continuous\MerchantAggregator.js">
70+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
71+
</None>
72+
<None Update="projections\continuous\MerchantBalanceCalculator.js">
73+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
74+
</None>
75+
<None Update="projections\continuous\TransactionEnricher.js">
76+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
77+
</None>
78+
<None Update="projections\continuous\TransactionProcessorSubscriptionStreamBuilder.js">
79+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
80+
</None>
6081
</ItemGroup>
6182

6283
<ItemGroup>
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
//var fromStreams = fromStreams || require('../../node_modules/esprojection-testing-framework').scope.fromStreams;
2+
//var emit = emit || require('../../node_modules/esprojection-testing-framework').scope.emit;
3+
4+
fromStreams("$ce-EstateAggregate", "$et-CallbackReceivedEvent")
5+
.when({
6+
$init: function (s, e) {
7+
return {
8+
estates: [],
9+
debug: []
10+
}
11+
},
12+
"EstateCreatedEvent": function (s, e) {
13+
s.estates.push({
14+
estateId: e.data.estateId,
15+
estateName: e.data.estateName
16+
});
17+
},
18+
"EstateReferenceAllocatedEvent": function (s, e) {
19+
var estateIndex = s.estates.findIndex(element => element.estateId === e.data.estateId);
20+
s.estates[estateIndex].reference = e.data.estateReference;
21+
},
22+
"CallbackReceivedEvent": function (s, e) {
23+
// find the estate from the reference
24+
if (s.debug === undefined) {
25+
s.debug = [];
26+
}
27+
var ref = e.data.reference.split("-"); // Element 0 is estate reference, Element 1 is merchant reference
28+
var estate = s.estates.find(element => element.reference === ref[0]);
29+
if (estate !== undefined && estate !== null) {
30+
var enrichedEvent = createEnrichedEvent(e, estate);
31+
32+
// Emit the enriched event
33+
emit(getStreamName(estate, e), "CallbackReceivedEnrichedEvent", enrichedEvent);
34+
}
35+
else {
36+
var enrichedEvent = createEnrichedEvent(e);
37+
// Emit the enriched event
38+
emit(getStreamName(estate, e), "CallbackReceivedEnrichedWithNoEstateEvent", enrichedEvent);
39+
}
40+
}
41+
});
42+
43+
function createEnrichedEvent(originalEvent, estate) {
44+
var enrichedEvent = {};
45+
if (estate !== undefined && estate !== null) {
46+
enrichedEvent = {
47+
typeString: originalEvent.data.typeString,
48+
messageFormat: originalEvent.data.messageFormat,
49+
callbackMessage: originalEvent.data.callbackMessage,
50+
estateId: estate.estateId,
51+
reference: originalEvent.data.reference
52+
};
53+
}
54+
else {
55+
enrichedEvent = {
56+
typeString: originalEvent.data.typeString,
57+
messageFormat: originalEvent.data.messageFormat,
58+
callbackMessage: originalEvent.data.callbackMessage,
59+
reference: originalEvent.data.reference
60+
};
61+
}
62+
63+
return enrichedEvent;
64+
}
65+
66+
function getStreamName(estate, e) {
67+
var streamName = "";
68+
if (e.data.destination === "EstateManagement") {
69+
streamName += "EstateManagementSubscriptionStream_";
70+
}
71+
72+
// Add the estate name
73+
if (estate !== undefined && estate !== null) {
74+
streamName += estate.estateName.replace(/ /g, "");
75+
}
76+
else {
77+
streamName += "UnknownEstate";
78+
}
79+
80+
return streamName;
81+
82+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//var fromAll = fromAll || require("../../node_modules/esprojection-testing-framework").scope.fromAll;
2+
//var linkTo = linkTo || require("../../node_modules/esprojection-testing-framework").scope.linkTo;
3+
4+
isEstateEvent = (e) => { return (e.data && e.data.estateId); }
5+
isAnEstateCreatedEvent = (e) => { return compareEventTypeSafely(e.eventType, 'EstateCreatedEvent') };
6+
7+
isAMerchantFeeAddedToTransactionEvent = (e) => { return compareEventTypeSafely(e.eventType, 'MerchantFeeAddedToTransactionEvent') };
8+
isAServiceProviderFeeAddedToTransactionEvent = (e) => { return compareEventTypeSafely(e.eventType, 'ServiceProviderFeeAddedToTransactionEvent') };
9+
10+
compareEventTypeSafely = (sourceEventType, targetEventType) => { return (sourceEventType.toUpperCase() === targetEventType.toUpperCase()); }
11+
12+
ignoreEvent = (e) => isAServiceProviderFeeAddedToTransactionEvent(e) | isAMerchantFeeAddedToTransactionEvent(e);
13+
14+
isInvalidEvent = (e) => (e === null || e === undefined || e.data === undefined);
15+
16+
isTruncated = function (metadata) {
17+
if (metadata && metadata['$v']) {
18+
var parts = metadata['$v'].split(":");
19+
var projectionEpoch = parts[1];
20+
21+
return (projectionEpoch < 0);
22+
}
23+
return false;
24+
};
25+
26+
fromAll()
27+
.when({
28+
$init: function (s, e) {
29+
return { estates: {} }
30+
},
31+
$any: function (s, e) {
32+
if (isTruncated(e)) return;
33+
34+
if (isEstateEvent(e)) {
35+
if (ignoreEvent(e)) return;
36+
37+
if (isAnEstateCreatedEvent(e)) {
38+
s.estates[e.data.estateId] = {
39+
name: e.data.estateName.replace(/-/gi, "").replace(/ /g, "")
40+
};
41+
}
42+
43+
linkTo(s.estates[e.data.estateId].name, e);
44+
}
45+
}
46+
}
47+
);

0 commit comments

Comments
 (0)