using BusinessLogic.Classes.Strategies; using BusinessLogic.Entities; using BusinessLogic.Interfaces.Persistence; using BusinessLogic.Interfaces.Security; using BusinessLogic.Interfaces.Strategies; using FluentAssertions; using log4net; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace BusinessLogic.UnitTests.Classes.Strategies { [TestClass] [ExcludeFromCodeCoverage] public class ApproveEReturnsStrategyTests { private readonly Mock _mockLogger = new Mock(); private readonly Mock _mockUnitOfWork = new Mock(); private readonly Mock _mockSecurityContext = new Mock(); private readonly Mock _mockTransactionVatStrategy = new Mock(); public ApproveEReturnsStrategy ConstructorSetup() { return new ApproveEReturnsStrategy( _mockLogger.Object, _mockUnitOfWork.Object, _mockSecurityContext.Object, _mockTransactionVatStrategy.Object); } [TestMethod] public void ConstructorAcceptsCorrectArguments() { // Arrange try { // Act var strategy = new ApproveEReturnsStrategy( _mockLogger.Object, _mockUnitOfWork.Object, _mockSecurityContext.Object, _mockTransactionVatStrategy.Object); } catch (Exception) { // Assert; Assert.Fail(); } } [TestMethod] public void ExecuteGood() { _mockUnitOfWork.Setup(x => x.EReturns.GetEReturnsBeingProcessed(It.IsAny())) .Returns(new List() { new EReturn() { Id=3, EReturnStatus = new EReturnStatus() {Id =3 }, StatusId=3, PendingTransactions = new List() { new PendingTransaction() { Id=3, StatusId=3, Amount=1 } } } }); _mockUnitOfWork.Setup(x => x.Transactions.AddRange(It.IsAny>())); var controller = ConstructorSetup(); var result = controller.Execute(new List>() { new Tuple(3, "test") }); result.Success.Should().BeTrue(); } [TestMethod] public void ExecuteNoItemsError() { _mockUnitOfWork.Setup(x => x.EReturns.GetEReturnsBeingProcessed(It.IsAny())) .Returns(new List()); var controller = ConstructorSetup(); var result = controller.Execute(new List>()); result.Success.Should().BeFalse(); result.Error.Should().Be("You must choose some eReturns"); } [TestMethod] public void ExecuteNotSubmittedEreturnError() { _mockUnitOfWork.Setup(x => x.EReturns.GetEReturnsBeingProcessed(It.IsAny())) .Returns(new List() { new EReturn() { EReturnStatus = new EReturnStatus() {Id =1 } } }); var controller = ConstructorSetup(); var result = controller.Execute(new List>()); result.Success.Should().BeFalse(); result.Error.Should().Be("Some of the eReturns selected are not in the correct state"); } [TestMethod] public void ExecuteAlreadyProcessedEreturnError() { _mockUnitOfWork.Setup(x => x.EReturns.GetEReturnsBeingProcessed(It.IsAny())) .Returns(new List() { new EReturn() { EReturnStatus = new EReturnStatus() {Id =3 }, ProcessedTransactions = new List() { new ProcessedTransaction() { Id=1 } } } }); var controller = ConstructorSetup(); var result = controller.Execute(new List>()); result.Success.Should().BeFalse(); result.Error.Should().Be("Unable to process all of the records requested."); } [TestMethod] public void ExecuteMissMatchedEreturnError() { _mockUnitOfWork.Setup(x => x.EReturns.GetEReturnsBeingProcessed(It.IsAny())) .Returns(new List() { new EReturn() { EReturnStatus = new EReturnStatus() {Id =3 } }, new EReturn() { EReturnStatus= new EReturnStatus() { Id=3 } } }); var controller = ConstructorSetup(); var result = controller.Execute(new List>()); result.Success.Should().BeFalse(); result.Error.Should().Be("Unable to process all of the records requested."); } } }