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
@@ -0,0 +1,100 @@
namespace TransactionProcessor.BusinessLogic.Tests.DomainEventHanders
{
using System;
using System.Collections.Generic;
using System.Linq;
using MessagingService.BusinessLogic.EventHandling;
using Moq;
using Shouldly;
using Testing;
using Transaction.DomainEvents;
using Xunit;

public class DomainEventHandlerResolverTests
{
[Fact]
public void DomainEventHandlerResolver_CanBeCreated_IsCreated()
{
Dictionary<String, String[]> eventHandlerConfiguration = new Dictionary<String, String[]>();

eventHandlerConfiguration.Add("TestEventType1", new String[] { "TransactionProcessor.BusinessLogic.EventHandling.TransactionDomainEventHandler" });

Mock<IDomainEventHandler> domainEventHandler = new Mock<IDomainEventHandler>();
Func<Type, IDomainEventHandler> createDomainEventHandlerFunc = (type) => { return domainEventHandler.Object; };
DomainEventHandlerResolver resolver = new DomainEventHandlerResolver(eventHandlerConfiguration, createDomainEventHandlerFunc);

resolver.ShouldNotBeNull();
}

[Fact]
public void DomainEventHandlerResolver_CanBeCreated_InvalidEventHandlerType_ErrorThrown()
{
Dictionary<String, String[]> eventHandlerConfiguration = new Dictionary<String, String[]>();

eventHandlerConfiguration.Add("TestEventType1", new String[] { "TransactionProcessor.BusinessLogic.EventHandling.NonExistantDomainEventHandler" });

Mock<IDomainEventHandler> domainEventHandler = new Mock<IDomainEventHandler>();
Func<Type, IDomainEventHandler> createDomainEventHandlerFunc = (type) => { return domainEventHandler.Object; };

Should.Throw<NotSupportedException>(() => new DomainEventHandlerResolver(eventHandlerConfiguration, createDomainEventHandlerFunc));
}

[Fact]
public void DomainEventHandlerResolver_GetDomainEventHandlers_TransactionHasBeenCompletedEvent_EventHandlersReturned()
{
String handlerTypeName = "TransactionProcessor.BusinessLogic.EventHandling.TransactionDomainEventHandler";
Dictionary<String, String[]> eventHandlerConfiguration = new Dictionary<String, String[]>();

TransactionHasBeenCompletedEvent transactionHasBeenCompletedEvent = TestData.TransactionHasBeenCompletedEvent;

eventHandlerConfiguration.Add(transactionHasBeenCompletedEvent.GetType().FullName, new String[] { handlerTypeName });

Mock<IDomainEventHandler> domainEventHandler = new Mock<IDomainEventHandler>();
Func<Type, IDomainEventHandler> createDomainEventHandlerFunc = (type) => { return domainEventHandler.Object; };

DomainEventHandlerResolver resolver = new DomainEventHandlerResolver(eventHandlerConfiguration, createDomainEventHandlerFunc);

List<IDomainEventHandler> handlers = resolver.GetDomainEventHandlers(transactionHasBeenCompletedEvent);

handlers.ShouldNotBeNull();
handlers.Any().ShouldBeTrue();
handlers.Count.ShouldBe(1);
}

[Fact]
public void DomainEventHandlerResolver_GetDomainEventHandlers_TransactionHasBeenCompletedEvent_EventNotConfigured_EventHandlersReturned()
{
String handlerTypeName = "TransactionProcessor.BusinessLogic.EventHandling.TransactionDomainEventHandler";
Dictionary<String, String[]> eventHandlerConfiguration = new Dictionary<String, String[]>();

TransactionHasBeenCompletedEvent transactionHasBeenCompletedEvent = TestData.TransactionHasBeenCompletedEvent;

eventHandlerConfiguration.Add("RandomEvent", new String[] { handlerTypeName });
Mock<IDomainEventHandler> domainEventHandler = new Mock<IDomainEventHandler>();
Func<Type, IDomainEventHandler> createDomainEventHandlerFunc = (type) => { return domainEventHandler.Object; };

DomainEventHandlerResolver resolver = new DomainEventHandlerResolver(eventHandlerConfiguration, createDomainEventHandlerFunc);

List<IDomainEventHandler> handlers = resolver.GetDomainEventHandlers(transactionHasBeenCompletedEvent);

handlers.ShouldBeNull();
}

[Fact]
public void DomainEventHandlerResolver_GetDomainEventHandlers_TransactionHasBeenCompletedEvent_NoHandlersConfigured_EventHandlersReturned()
{
Dictionary<String, String[]> eventHandlerConfiguration = new Dictionary<String, String[]>();

TransactionHasBeenCompletedEvent transactionHasBeenCompletedEvent = TestData.TransactionHasBeenCompletedEvent;
Mock<IDomainEventHandler> domainEventHandler = new Mock<IDomainEventHandler>();

Func<Type, IDomainEventHandler> createDomainEventHandlerFunc = (type) => { return domainEventHandler.Object; };

DomainEventHandlerResolver resolver = new DomainEventHandlerResolver(eventHandlerConfiguration, createDomainEventHandlerFunc);

List<IDomainEventHandler> handlers = resolver.GetDomainEventHandlers(transactionHasBeenCompletedEvent);

handlers.ShouldBeNull();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
namespace TransactionProcessor.BusinessLogic.Tests.DomainEventHandlers
{
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using BusinessLogic.Manager;
using BusinessLogic.Services;
using EstateManagement.Client;
using EventHandling;
using Microsoft.Extensions.Configuration;
using Moq;
using SecurityService.Client;
using Shared.EventStore.EventStore;
using Shared.General;
using Shared.Logger;
using Testing;
using TransactionAggregate;
using Xunit;

public class TransactionDomainEventHandlerTests
{
[Fact]
public async Task TransactionDomainEventHandler_Handle_TransactionHasBeenCompletedEvent_SuccessfulSale_EventIsHandled()
{
Mock<ITransactionAggregateManager> transactionAggregateManager = new Mock<ITransactionAggregateManager>();
transactionAggregateManager.Setup(t => t.GetAggregate(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(TestData.GetCompletedAuthorisedSaleTransactionAggregate);
Mock<IFeeCalculationManager> feeCalculationManager = new Mock<IFeeCalculationManager>();
feeCalculationManager.Setup(f => f.CalculateFees(It.IsAny<List<TransactionFeeToCalculate>>(), It.IsAny<Decimal>())).Returns(TestData.CalculatedMerchantFees);
Mock<IEstateClient> estateClient = new Mock<IEstateClient>();
estateClient.Setup(e => e.GetTransactionFeesForProduct(It.IsAny<String>(),
It.IsAny<Guid>(),
It.IsAny<Guid>(),
It.IsAny<Guid>(),
It.IsAny<Guid>(),
It.IsAny<CancellationToken>())).ReturnsAsync(TestData.ContractProductTransactionFees);

Mock<ISecurityServiceClient> securityServiceClient = new Mock<ISecurityServiceClient>();
securityServiceClient.Setup(s => s.GetToken(It.IsAny<String>(), It.IsAny<String>(), It.IsAny<CancellationToken>())).ReturnsAsync(TestData.TokenResponse);


IConfigurationRoot configurationRoot = new ConfigurationBuilder().AddInMemoryCollection(TestData.DefaultAppSettings).Build();
ConfigurationReader.Initialise(configurationRoot);
Logger.Initialise(NullLogger.Instance);

TransactionDomainEventHandler transactionDomainEventHandler = new TransactionDomainEventHandler(transactionAggregateManager.Object,
feeCalculationManager.Object,
estateClient.Object,
securityServiceClient.Object);

await transactionDomainEventHandler.Handle(TestData.TransactionHasBeenCompletedEvent, CancellationToken.None);
}

[Fact]
public async Task TransactionDomainEventHandler_Handle_TransactionHasBeenCompletedEvent_UnsuccessfulSale_EventIsHandled()
{
Mock<ITransactionAggregateManager> transactionAggregateManager = new Mock<ITransactionAggregateManager>();
transactionAggregateManager.Setup(t => t.GetAggregate(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(TestData.GetCompletedDeclinedSaleTransactionAggregate);
Mock<IFeeCalculationManager> feeCalculationManager = new Mock<IFeeCalculationManager>();
Mock<IEstateClient> estateClient = new Mock<IEstateClient>();

Mock<ISecurityServiceClient> securityServiceClient = new Mock<ISecurityServiceClient>();

IConfigurationRoot configurationRoot = new ConfigurationBuilder().AddInMemoryCollection(TestData.DefaultAppSettings).Build();
ConfigurationReader.Initialise(configurationRoot);
Logger.Initialise(NullLogger.Instance);

TransactionDomainEventHandler transactionDomainEventHandler = new TransactionDomainEventHandler(transactionAggregateManager.Object,
feeCalculationManager.Object,
estateClient.Object,
securityServiceClient.Object);

await transactionDomainEventHandler.Handle(TestData.TransactionHasBeenCompletedEvent, CancellationToken.None);
}

[Fact]
public async Task TransactionDomainEventHandler_Handle_TransactionHasBeenCompletedEvent_IncompleteSale_EventIsHandled()
{
Mock<ITransactionAggregateManager> transactionAggregateManager = new Mock<ITransactionAggregateManager>();
transactionAggregateManager.Setup(t => t.GetAggregate(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(TestData.GetIncompleteAuthorisedSaleTransactionAggregate);
Mock<IFeeCalculationManager> feeCalculationManager = new Mock<IFeeCalculationManager>();
Mock<IEstateClient> estateClient = new Mock<IEstateClient>();

Mock<ISecurityServiceClient> securityServiceClient = new Mock<ISecurityServiceClient>();

IConfigurationRoot configurationRoot = new ConfigurationBuilder().AddInMemoryCollection(TestData.DefaultAppSettings).Build();
ConfigurationReader.Initialise(configurationRoot);
Logger.Initialise(NullLogger.Instance);

TransactionDomainEventHandler transactionDomainEventHandler = new TransactionDomainEventHandler(transactionAggregateManager.Object,
feeCalculationManager.Object,
estateClient.Object,
securityServiceClient.Object);

await transactionDomainEventHandler.Handle(TestData.TransactionHasBeenCompletedEvent, CancellationToken.None);
}

[Fact]
public async Task TransactionDomainEventHandler_Handle_TransactionHasBeenCompletedEvent_SaleWithNoProductDetails_EventIsHandled()
{
Mock<ITransactionAggregateManager> transactionAggregateManager = new Mock<ITransactionAggregateManager>();
transactionAggregateManager.Setup(t => t.GetAggregate(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(TestData.GetCompletedAuthorisedSaleWithNoProductDetailsTransactionAggregate);
Mock<IFeeCalculationManager> feeCalculationManager = new Mock<IFeeCalculationManager>();
Mock<IEstateClient> estateClient = new Mock<IEstateClient>();

Mock<ISecurityServiceClient> securityServiceClient = new Mock<ISecurityServiceClient>();

IConfigurationRoot configurationRoot = new ConfigurationBuilder().AddInMemoryCollection(TestData.DefaultAppSettings).Build();
ConfigurationReader.Initialise(configurationRoot);
Logger.Initialise(NullLogger.Instance);

TransactionDomainEventHandler transactionDomainEventHandler = new TransactionDomainEventHandler(transactionAggregateManager.Object,
feeCalculationManager.Object,
estateClient.Object,
securityServiceClient.Object);

await transactionDomainEventHandler.Handle(TestData.TransactionHasBeenCompletedEvent, CancellationToken.None);
}

[Fact]
public async Task TransactionDomainEventHandler_Handle_TransactionHasBeenCompletedEvent_AuthorisedLogon_EventIsHandled()
{
Mock<ITransactionAggregateManager> transactionAggregateManager = new Mock<ITransactionAggregateManager>();
transactionAggregateManager.Setup(t => t.GetAggregate(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(TestData.GetCompletedAuthorisedLogonTransactionAggregate);
Mock<IFeeCalculationManager> feeCalculationManager = new Mock<IFeeCalculationManager>();
Mock<IEstateClient> estateClient = new Mock<IEstateClient>();

Mock<ISecurityServiceClient> securityServiceClient = new Mock<ISecurityServiceClient>();

IConfigurationRoot configurationRoot = new ConfigurationBuilder().AddInMemoryCollection(TestData.DefaultAppSettings).Build();
ConfigurationReader.Initialise(configurationRoot);
Logger.Initialise(NullLogger.Instance);

TransactionDomainEventHandler transactionDomainEventHandler = new TransactionDomainEventHandler(transactionAggregateManager.Object,
feeCalculationManager.Object,
estateClient.Object,
securityServiceClient.Object);

await transactionDomainEventHandler.Handle(TestData.TransactionHasBeenCompletedEvent, CancellationToken.None);
}
}
}
Loading