static void Main(string[] args) { SpendService spendService = new SpendService( new SupplierService(), new InvoiceRepository(), new ExternalInvoiceProcessor(new ExternalInvoiceServiceFacade(), new FailoverInvoiceService())); var spendSummary = spendService.GetTotalSpend(1); var spendSummary2 = spendService.GetTotalSpend(2); Console.ReadLine(); }
public void SpendService_ExternalCustomer_Spend_ReturnToNormalAfter1Minute_Test() { // Arrange Mock <ICircuitBreaker> mockedInstance = new Mock <ICircuitBreaker>(); mockedInstance.Setup(mc => mc.ClosedTimeSeconds).Returns(5); // Adjust Timeout to 5 Seconds mockedInstance.Setup(mc => mc.GetSpendDetail(2)).Returns( // Set Data new List <SpendDetail>( new SpendDetail[] { new SpendDetail() { TotalSpend = 1001, Year = 2018 }, new SpendDetail() { TotalSpend = 1001, Year = 2017 } } )); UnityContainer container = new UnityContainer(); container.RegisterType <ISupplierDataService, SupplierDataServiceStub>(); container.RegisterType <ISupplierService, SupplierService>(); container.RegisterType <IInvoiceRepository, InvoiceRepositoryStub>(); container.RegisterType <IExternalSpendService, ExternalInvoiceServiceStub>(); container.RegisterType <ICircuitBreaker, ExternalSpendServiceInvoker>(); container.RegisterType <IFailoverInvoiceService, FailoverInvoiceServiceStub>(); SpendService spendService = container.Resolve <ExternalSpendService>(); SpendSummary resultFailover = spendService.GetTotalSpend(3); Thread.Sleep(1000 * 5 + 1); // Wait 6 Seconds // Act container.RegisterInstance <ICircuitBreaker>(mockedInstance.Object); spendService = container.Resolve <ExternalSpendService>(); SpendSummary resultNormal = spendService.GetTotalSpend(2); // Assert Assert.IsNotNull(resultFailover); Assert.AreEqual("Supplier External (Failover)", resultFailover.Name); Assert.AreEqual(1, resultFailover.Years.Count); Assert.AreEqual(900, resultFailover.Years[0].TotalSpend); Assert.IsNotNull(resultNormal); Assert.AreEqual("Supplier External", resultNormal.Name); Assert.AreEqual(2, resultNormal.Years.Count); Assert.AreEqual(1001, resultNormal.Years[0].TotalSpend); Assert.AreEqual(1001, resultNormal.Years[1].TotalSpend); }
public void Calculate_TotalSpend_GroupedByYears_ForInternalSupplier() { Mock <ISupplierService> supplierServiceMock = new Mock <ISupplierService>(); Mock <IInvoiceRepository> invoiceRepositoryMock = new Mock <IInvoiceRepository>(); Mock <IExternalInvoiceProcessor> externalInvoiceServiceProcessorMock = new Mock <IExternalInvoiceProcessor>(); Mock <IExternalInvoiceServiceFacade> externalInvoiceSericeFacadeMock = new Mock <IExternalInvoiceServiceFacade>(); var sut = new SpendService(supplierServiceMock.Object, invoiceRepositoryMock.Object, externalInvoiceServiceProcessorMock.Object); supplierServiceMock.SetupAllProperties(); supplierServiceMock.Setup(x => x.GetById(It.IsAny <int>())) .Returns(new SupplierBuilder().WithInternalSupplier().WithName("InternalSupplier").Build()); invoiceRepositoryMock.Setup(x => x.Get()).Returns(new InvoiceBuilder().SampleInvoices().AsQueryable); var spendSummary = sut.GetTotalSpend(1); Assert.NotNull(spendSummary); Assert.Equal("InternalSupplier", spendSummary.Name); Assert.Equal(2, spendSummary.Years.Count); Assert.Equal(2010, spendSummary.Years[0].Year); Assert.Equal(200, spendSummary.Years[0].TotalSpend); Assert.Equal(2011, spendSummary.Years[1].Year); Assert.Equal(400, spendSummary.Years[1].TotalSpend); invoiceRepositoryMock.Verify(x => x.Get(), Times.Once); externalInvoiceServiceProcessorMock.Verify(x => x.Process(It.IsAny <int>()), Times.Never); }
public void SpendService_ExternalCustomer_Spend_FailoverCase_IsInClosedTime_Test() { // Arrange int supplierId = 3; SpendService spendService = container.Resolve <ExternalSpendService>(); // Act SpendSummary result = spendService.GetTotalSpend(supplierId); result = spendService.GetTotalSpend(supplierId); // Assert Assert.IsNotNull(result); Assert.AreEqual("Supplier External (Failover)", result.Name); Assert.AreEqual(1, result.Years.Count); Assert.AreEqual(900, result.Years[0].TotalSpend); }
public void SpendService_ExternalCustomer_Spend_FailoverCase_ObsoleteDate_Test() { // Arrange int supplierId = 4; SpendService spendService = container.Resolve <ExternalSpendService>(); // Act SpendSummary result = spendService.GetTotalSpend(supplierId); // Assert - See Exception }
public void SpendService_ExternalCustomer_Name_Test() { // Arrange int supplierId = 2; SpendService spendService = container.Resolve <ExternalSpendService>(); // Act SpendSummary result = spendService.GetTotalSpend(supplierId); // Assert Assert.IsNotNull(result); Assert.AreEqual("Supplier External", result.Name); }
public void SpendService_ExternalCustomer_Spend_ActionCase_Test() { // Arrange int supplierId = 2; SpendService spendService = container.Resolve <ExternalSpendService>(); // Act SpendSummary result = spendService.GetTotalSpend(supplierId); // Assert Assert.IsNotNull(result); Assert.AreEqual(2, result.Years.Count); Assert.AreEqual(1000, result.Years[0].TotalSpend); Assert.AreEqual(1000, result.Years[1].TotalSpend); }
public void Test_ExternalSupplierWithoutFailOver() { var loggerFactory = new LoggerFactory().AddConsole(LogLevel.Information); var supplier = new Supplier(1, "External Supplier Without failover", true); var mockSupplier = new Mock <ISupplierService>(); mockSupplier.Setup(m => m.GetById(1)).Returns(supplier); mockSupplier.Verify(); var mockRepository = new Mock <ISpendService>(); var mockFailover = new Mock <IFailoverInvoiceService>(); var spendService = new SpendService(mockSupplier.Object, mockRepository.Object, mockFailover.Object, loggerFactory); // We can replace with other loggers etc var result = spendService.GetTotalSpend(1); result.Name.Should().Be("External Supplier Without failover"); }
public void InvokeExternalInvoiceService_For_ExternalSupplier() { Mock <ISupplierService> supplierServiceMock = new Mock <ISupplierService>(); Mock <IInvoiceRepository> invoiceRepositoryMock = new Mock <IInvoiceRepository>(); Mock <IExternalInvoiceProcessor> externalInvoiceServiceProcessorMock = new Mock <IExternalInvoiceProcessor>(); Mock <IExternalInvoiceServiceFacade> externalInvoiceSericeFacadeMock = new Mock <IExternalInvoiceServiceFacade>(); var sut = new SpendService(supplierServiceMock.Object, invoiceRepositoryMock.Object, externalInvoiceServiceProcessorMock.Object); supplierServiceMock.SetupAllProperties(); supplierServiceMock.Setup(x => x.GetById(It.IsAny <int>())) .Returns(new Supplier() { Id = 1, IsExternal = true, Name = "Internal Supplier" }); sut.GetTotalSpend(1); invoiceRepositoryMock.Verify(x => x.Get(), Times.Never); externalInvoiceServiceProcessorMock.Verify(x => x.Process(It.IsAny <int>()), Times.Once); }
public void Calculate_TotalSpend_GroupedByYears_ForExternalSupplier() { Mock <ISupplierService> supplierServiceMock = new Mock <ISupplierService>(); Mock <IInvoiceRepository> invoiceRepositoryMock = new Mock <IInvoiceRepository>(); Mock <IExternalInvoiceProcessor> externalInvoiceServiceProcessorMock = new Mock <IExternalInvoiceProcessor>(); Mock <IExternalInvoiceServiceFacade> externalInvoiceSericeFacadeMock = new Mock <IExternalInvoiceServiceFacade>(); Mock <IFailoverInvoiceService> failOverInvoiceServiceMock = new Mock <IFailoverInvoiceService>(); var sut = new SpendService(supplierServiceMock.Object, invoiceRepositoryMock.Object, new ExternalInvoiceProcessor(externalInvoiceSericeFacadeMock.Object, failOverInvoiceServiceMock.Object)); supplierServiceMock.SetupAllProperties(); supplierServiceMock.Setup(x => x.GetById(It.IsAny <int>())) .Returns(new SupplierBuilder().WithExternalSupplier().WithName("ExternalSupplier").Build()); externalInvoiceSericeFacadeMock.Setup(x => x.GetInvoices(It.IsAny <string>())).Returns(new ExternalInvoiceBuilder().SampleExternalInvoices()); var spendSummary = sut.GetTotalSpend(1); invoiceRepositoryMock.Verify(x => x.Get(), Times.Never); externalInvoiceSericeFacadeMock.Verify(x => x.GetInvoices(It.IsAny <string>()), Times.AtLeastOnce); }