Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="EstateManagement.Client" Version="2024.3.4-build74" />
<PackageReference Include="EstateManagement.Database" Version="2024.3.4-build74" />
<PackageReference Include="EstateManagement.Client" Version="2024.3.5-build77" />
<PackageReference Include="EstateManagement.Database" Version="2024.3.5-build77" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.7" />
<PackageReference Include="MessagingService.Client" Version="2023.11.1" />
<PackageReference Include="SecurityService.Client" Version="2023.12.1" />
<PackageReference Include="Shared.DomainDrivenDesign" Version="2023.12.2" />
<PackageReference Include="Shared.EventStore" Version="2023.12.2" />
<PackageReference Include="MessagingService.Client" Version="2023.11.2-build53" />
<PackageReference Include="SecurityService.Client" Version="2023.12.2-build58" />
<PackageReference Include="Shared.DomainDrivenDesign" Version="2024.3.3" />
<PackageReference Include="Shared.EventStore" Version="2024.3.3" />
<PackageReference Include="MediatR" Version="12.0.1" />
<PackageReference Include="System.IO.Abstractions" Version="19.2.29" />
<PackageReference Include="System.ServiceModel.Duplex" Version="6.0.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="ClientProxyBase" Version="2023.12.2" />
<PackageReference Include="ClientProxyBase" Version="2024.3.3" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Shared.DomainDrivenDesign" Version="2023.12.2" />
<PackageReference Include="Shared.DomainDrivenDesign" Version="2024.3.3" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Shared.EventStore" Version="2023.12.2" />
<PackageReference Include="Shared.EventStore" Version="2024.3.3" />
</ItemGroup>

<ItemGroup>
Expand Down
688 changes: 173 additions & 515 deletions TransactionProcessor.IntegrationTesting.Helpers/SpecflowExtensions.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace TransactionProcessor.IntegrationTesting.Helpers;

public static class SubscriptionsHelper
{
public static List<(String streamName, String groupName, Int32 maxRetries)> GetSubscriptions()
{
List<(String streamName, String groupName, Int32 maxRetries)> subscriptions = new(){
("$ce-EstateAggregate", "Transaction Processor - Ordered", 2),
("$ce-MerchantAggregate", "Transaction Processor - Ordered", 2),
("$ce-MerchantDepositListAggregate", "Transaction Processor - Ordered", 2),
("$ce-SettlementAggregate", "Transaction Processor", 0),
("$ce-TransactionAggregate", "Transaction Processor", 0),
("$ce-TransactionAggregate", "Transaction Processor - Ordered", 2),
("$ce-VoucherAggregate", "Transaction Processor", 0),
("$ce-VoucherAggregate", "Transaction Processor - Ordered", 2)
};

return subscriptions;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="EstateManagement.Client" Version="2024.3.4-build74" />
<PackageReference Include="EstateManagement.IntegrationTesting.Helpers" Version="2024.3.4-build74" />
<PackageReference Include="EstateManagement.Client" Version="2024.3.5-build77" />
<PackageReference Include="EstateManagement.IntegrationTesting.Helpers" Version="2024.3.5-build77" />
<PackageReference Include="Reqnroll" Version="1.0.1" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ await this.TransactionProcessorClient.ResendEmailReceipt(accessToken,
}
}

public async Task ThenTheFollowingEntriesAppearInTheMerchantsBalanceHistoryForEstateAndMerchant(String accessToken, DateTime startDate, DateTime endDate, List<SpecflowExtensions.BalanceEntry> balanceEntries)
public async Task ThenTheFollowingEntriesAppearInTheMerchantsBalanceHistoryForEstateAndMerchant(String accessToken, DateTime startDate, DateTime endDate, List<ReqnrollExtensions.BalanceEntry> balanceEntries)
{

var merchants = balanceEntries.GroupBy(b => new { b.EstateId, b.MerchantId }).Select(b => new {
Expand All @@ -117,7 +117,7 @@ public async Task ThenTheFollowingEntriesAppearInTheMerchantsBalanceHistoryForEs
foreach (var m in merchants)
{
List<MerchantBalanceChangedEntryResponse> balanceHistory = null;
List<SpecflowExtensions.BalanceEntry> merchantEntries = balanceEntries.Where(b => b.EstateId == m.EstateId && b.MerchantId == m.MerchantId).ToList();
List<ReqnrollExtensions.BalanceEntry> merchantEntries = balanceEntries.Where(b => b.EstateId == m.EstateId && b.MerchantId == m.MerchantId).ToList();

await Retry.For(async () => {
balanceHistory =
Expand All @@ -131,7 +131,7 @@ await this.TransactionProcessorClient.GetMerchantBalanceHistory(accessToken,
balanceHistory.ShouldNotBeNull();
balanceHistory.ShouldNotBeEmpty();
balanceHistory.Count.ShouldBe(m.NumberEntries);
foreach (SpecflowExtensions.BalanceEntry merchantEntry in merchantEntries)
foreach (ReqnrollExtensions.BalanceEntry merchantEntry in merchantEntries)
{


Expand All @@ -145,7 +145,7 @@ await this.TransactionProcessorClient.GetMerchantBalanceHistory(accessToken,
}

},
TimeSpan.FromMinutes(4),
TimeSpan.FromMinutes(10),
TimeSpan.FromSeconds(30));
}
}
Expand All @@ -161,16 +161,16 @@ public async Task SendRequestToTestHost<T>(List<T> objects, String url){
}
}

public async Task GivenTheFollowingBillsAreAvailableAtThePataPawaPostPaidHost(List<SpecflowExtensions.PataPawaBill> bills){
await this.SendRequestToTestHost<SpecflowExtensions.PataPawaBill>(bills, "/api/developer/patapawapostpay/createbill");
public async Task GivenTheFollowingBillsAreAvailableAtThePataPawaPostPaidHost(List<ReqnrollExtensions.PataPawaBill> bills){
await this.SendRequestToTestHost<ReqnrollExtensions.PataPawaBill>(bills, "/api/developer/patapawapostpay/createbill");
}

public async Task GivenTheFollowingMetersAreAvailableAtThePataPawaPrePaidHost(List<SpecflowExtensions.PataPawaMeter> meters){
await this.SendRequestToTestHost<SpecflowExtensions.PataPawaMeter>(meters, "/api/developer/patapawaprepay/createmeter");
public async Task GivenTheFollowingMetersAreAvailableAtThePataPawaPrePaidHost(List<ReqnrollExtensions.PataPawaMeter> meters){
await this.SendRequestToTestHost<ReqnrollExtensions.PataPawaMeter>(meters, "/api/developer/patapawaprepay/createmeter");
}

public async Task GivenTheFollowingUsersAreAvailableAtThePataPawaPrePaidHost(List<SpecflowExtensions.PataPawaUser> users){
await this.SendRequestToTestHost<SpecflowExtensions.PataPawaUser>(users, "/api/developer/patapawaprepay/createuser");
public async Task GivenTheFollowingUsersAreAvailableAtThePataPawaPrePaidHost(List<ReqnrollExtensions.PataPawaUser> users){
await this.SendRequestToTestHost<ReqnrollExtensions.PataPawaUser>(users, "/api/developer/patapawaprepay/createuser");
}

public async Task<GetVoucherResponse> GetVoucherByTransactionNumber(String accessToken, EstateDetails estate, SaleTransactionResponse transactionResponse)
Expand Down Expand Up @@ -203,7 +203,7 @@ await Retry.For(async () =>
});
}

public async Task WhenIProcessTheSettlementForOnEstateThenFeesAreMarkedAsSettledAndTheSettlementIsCompleted(String accessToken, SpecflowExtensions.ProcessSettlementRequest request, Int32 expectedNumberFeesSettled)
public async Task WhenIProcessTheSettlementForOnEstateThenFeesAreMarkedAsSettledAndTheSettlementIsCompleted(String accessToken, ReqnrollExtensions.ProcessSettlementRequest request, Int32 expectedNumberFeesSettled)
{
await this.TransactionProcessorClient.ProcessSettlement(accessToken,
request.SettlementDate,
Expand Down
31 changes: 16 additions & 15 deletions TransactionProcessor.IntegrationTests/Common/DockerHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,20 @@ public override ContainerBuilder SetupTransactionProcessorContainer(){
return base.SetupTransactionProcessorContainer();
}

public override async Task CreateSubscriptions(){
List<(String streamName, String groupName, Int32 maxRetries)> subscriptions = new();
subscriptions.AddRange(MessagingService.IntegrationTesting.Helpers.SubscriptionsHelper.GetSubscriptions());
subscriptions.AddRange(EstateManagement.IntegrationTesting.Helpers.SubscriptionsHelper.GetSubscriptions());
subscriptions.AddRange(TransactionProcessor.IntegrationTesting.Helpers.SubscriptionsHelper.GetSubscriptions());

foreach ((String streamName, String groupName, Int32 maxRetries) subscription in subscriptions)
{
var x = subscription;
x.maxRetries = 2;
await this.CreatePersistentSubscription(x);
}
}

/// <summary>
/// Starts the containers for scenario run.
/// </summary>
Expand Down Expand Up @@ -108,11 +122,11 @@ public override async Task StartContainersForScenarioRun(String scenarioName, Do
/// <summary>
/// Stops the containers for scenario run.
/// </summary>
public override async Task StopContainersForScenarioRun()
public override async Task StopContainersForScenarioRun(DockerServices dockerServices)
{
await this.RemoveEstateReadModel().ConfigureAwait(false);

await base.StopContainersForScenarioRun();
await base.StopContainersForScenarioRun(dockerServices);
}

private async Task RemoveEstateReadModel()
Expand All @@ -133,19 +147,6 @@ await Retry.For(async () =>
}
}

public override async Task CreateGenericSubscriptions(){
List<(String streamName, String groupName, Int32 maxRetries)> subscriptions = new List<(String streamName, String groupName, Int32 maxRetries)>
{
($"$ce-VoucherAggregate", "Transaction Processor - Ordered", 2),
($"$ce-MerchantBalanceArchive", "Transaction Processor - Ordered", 2),
($"$et-EstateCreatedEvent", "Transaction Processor - Ordered", 2)
};
foreach ((String streamName, String groupName, Int32 maxRetries) subscription in subscriptions)
{
await this.CreatePersistentSubscription(subscription);
}
}

#endregion
}
}
55 changes: 44 additions & 11 deletions TransactionProcessor.IntegrationTests/Common/GenericSteps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ namespace TransactionProcessor.IntegrationTests.Common
using global::Shared.IntegrationTesting;
using global::Shared.Logger;
using NLog;
using TechTalk.SpecFlow;
using TechTalk.SpecFlow.Plugins;
using Reqnroll;

[Binding]
[Scope(Tag = "base")]
Expand All @@ -34,14 +33,52 @@ public GenericSteps(ScenarioContext scenarioContext,
[BeforeScenario]
public async Task StartSystem()
{
//// Initialise a logger
//String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", "");
//NlogLogger logger = new NlogLogger();
//logger.Initialise(LogManager.GetLogger(scenarioName), scenarioName);
//LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);

//this.TestingContext.DockerHelper = new DockerHelper();
//this.TestingContext.DockerHelper.Logger = logger;
//this.TestingContext.DockerHelper.SqlServerContainer = Setup.DatabaseServerContainer;
//this.TestingContext.DockerHelper.SqlServerNetwork = Setup.DatabaseServerNetwork;
//this.TestingContext.DockerHelper.DockerCredentials = Setup.DockerCredentials;
//this.TestingContext.DockerHelper.SqlCredentials = Setup.SqlCredentials;
//this.TestingContext.DockerHelper.SqlServerContainerName = "sharedsqlserver";

//this.TestingContext.DockerHelper.SetImageDetails(ContainerType.TransactionProcessor, ("transactionprocessor", false));

//this.TestingContext.Logger = logger;
//this.TestingContext.Logger.LogInformation("About to Start Containers for Scenario Run");

//DockerServices dockerServices = DockerServices.CallbackHandler | DockerServices.EstateManagement | DockerServices.EventStore |
// DockerServices.FileProcessor | DockerServices.MessagingService | DockerServices.SecurityService |
// DockerServices.SqlServer | DockerServices.TestHost | DockerServices.TransactionProcessor |
// DockerServices.TransactionProcessorAcl;

//await this.TestingContext.DockerHelper.StartContainersForScenarioRun(scenarioName, dockerServices).ConfigureAwait(false);
//this.TestingContext.Logger.LogInformation("Containers for Scenario Run Started");

// Initialise a logger
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", "");
NlogLogger logger = new NlogLogger();
logger.Initialise(LogManager.GetLogger(scenarioName), scenarioName);
LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);

DockerServices dockerServices = DockerServices.CallbackHandler | DockerServices.EstateManagement | DockerServices.EventStore |
DockerServices.FileProcessor | DockerServices.MessagingService | DockerServices.SecurityService |
DockerServices.SqlServer | DockerServices.TestHost | DockerServices.TransactionProcessor |
DockerServices.TransactionProcessorAcl;

this.TestingContext.DockerHelper = new DockerHelper();
this.TestingContext.DockerHelper.Logger = logger;
this.TestingContext.Logger = logger;
this.TestingContext.DockerHelper.RequiredDockerServices = dockerServices;
this.TestingContext.Logger.LogInformation("About to Start Global Setup");

await Setup.GlobalSetup(this.TestingContext.DockerHelper);

this.TestingContext.DockerHelper.SqlServerContainer = Setup.DatabaseServerContainer;
this.TestingContext.DockerHelper.SqlServerNetwork = Setup.DatabaseServerNetwork;
this.TestingContext.DockerHelper.DockerCredentials = Setup.DockerCredentials;
Expand All @@ -52,21 +89,17 @@ public async Task StartSystem()

this.TestingContext.Logger = logger;
this.TestingContext.Logger.LogInformation("About to Start Containers for Scenario Run");

DockerServices dockerServices = DockerServices.CallbackHandler | DockerServices.EstateManagement | DockerServices.EventStore |
DockerServices.FileProcessor | DockerServices.MessagingService | DockerServices.SecurityService |
DockerServices.SqlServer | DockerServices.TestHost | DockerServices.TransactionProcessor |
DockerServices.TransactionProcessorAcl;

await this.TestingContext.DockerHelper.StartContainersForScenarioRun(scenarioName, dockerServices).ConfigureAwait(false);
this.TestingContext.Logger.LogInformation("Containers for Scenario Run Started");
}

[AfterScenario]
public async Task StopSystem()
{
public async Task StopSystem(){

DockerServices sharedDockerServices = DockerServices.SqlServer;

this.TestingContext.Logger.LogInformation("About to Stop Containers for Scenario Run");
await this.TestingContext.DockerHelper.StopContainersForScenarioRun().ConfigureAwait(false);
await this.TestingContext.DockerHelper.StopContainersForScenarioRun(sharedDockerServices).ConfigureAwait(false);
this.TestingContext.Logger.LogInformation("Containers for Scenario Run Stopped");
}
}
Expand Down
20 changes: 8 additions & 12 deletions TransactionProcessor.IntegrationTests/Common/Setup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ namespace TransactionProcessor.IntegrationTests.Common
using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Ductus.FluentDocker.Builders;
using Ductus.FluentDocker.Services;
using Ductus.FluentDocker.Services.Extensions;
using global::Shared.Logger;
using Microsoft.Data.SqlClient;
using NLog;
using Reqnroll;
using Shouldly;
using TechTalk.SpecFlow;

[Binding]
public class Setup
Expand All @@ -25,23 +26,18 @@ public class Setup
public static INetworkService DatabaseServerNetwork;
public static (String usename, String password) SqlCredentials = ("sa", "thisisalongpassword123!");
public static (String url, String username, String password) DockerCredentials = ("https://www.docker.com", "stuartferguson", "Sc0tland");
[BeforeTestRun]
protected static void GlobalSetup()

public static async Task GlobalSetup(DockerHelper dockerHelper)
{
ShouldlyConfiguration.DefaultTaskTimeout = TimeSpan.FromMinutes(1);

DockerHelper dockerHelper = new DockerHelper();

NlogLogger logger = new NlogLogger();
logger.Initialise(LogManager.GetLogger("Specflow"), "Specflow");
LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);
dockerHelper.Logger = logger;
dockerHelper.SqlCredentials = Setup.SqlCredentials;
dockerHelper.DockerCredentials = Setup.DockerCredentials;
dockerHelper.SqlServerContainerName = "sharedsqlserver";

Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork", true);
Setup.DatabaseServerContainer = dockerHelper.SetupSqlServerContainer(Setup.DatabaseServerNetwork);
await Retry.For(async () => {
Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork", true);
Setup.DatabaseServerContainer = await dockerHelper.SetupSqlServerContainer(Setup.DatabaseServerNetwork);
}, TimeSpan.FromSeconds(60));
}

public static String GetConnectionString(String databaseName)
Expand Down
Loading