using FluentAssertions; using Moq; using NUnit.Framework; using Strata.ContinuousImprovement.Api.Controllers; using Strata.ContinuousImprovement.Biz.ChargeCode.Initiatives; using Strata.ContinuousImprovement.Biz.Initiatives; using Strata.ContinuousImprovement.Biz.Mappers; using Strata.ContinuousImprovement.Biz.Test.Unit.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Strata.ContinuousImprovement.Api.Test.Unit.Controllers { [TestFixture, Category("Unit"), Category("Controller")] public class ChargeCodeInitiativesControllerTests { [TestCaseSource(nameof(DevDbTestCases1))] [TestCaseSource(nameof(TestCases))] public async Task Test(ChargeCodeInitiativesController controller, Guid opportunityGuid, Guid expected) { var dto = new InitiativeDto { OpportunityGuid = opportunityGuid, TrackingStart = DateTime.Now.ToString("yyyy/MM/dd") }; var result = await controller.Create(dto, CancellationToken.None); var actual = result.Value; actual.Should().Be(expected); } public static IEnumerable DevDbTestCases1() { var foundOpportunityGuid = Guid.NewGuid(); var notFoundOpportunityGuid = Guid.NewGuid(); var newInitiative = Guid.NewGuid(); var stakeholderUsers = Mock.Of(); var clientClaimsPrincipalAccessor = TestUtilities.GetClaimsPrincipalAccessor(); var service = Mock.Of(); Mock.Get(service) .Setup(s => s.CreateChargeCodeInitiative(It.IsAny(), It.IsAny(), It.IsIn(new[] { foundOpportunityGuid }.AsEnumerable()), It.IsAny())) .Returns(Task.FromResult(newInitiative)); var controller = new ChargeCodeInitiativesController(clientClaimsPrincipalAccessor, service, stakeholderUsers); var notFoundService = Mock.Of(); Mock.Get(notFoundService) .Setup(s => s.CreateChargeCodeInitiative(It.IsAny(), It.IsAny(), It.IsNotIn(new[] { foundOpportunityGuid }.AsEnumerable()), It.IsAny())) .Returns(Task.FromResult(Guid.Empty)); var notFoundController = new ChargeCodeInitiativesController(clientClaimsPrincipalAccessor, notFoundService, stakeholderUsers); yield return new TestCaseData(controller, foundOpportunityGuid, newInitiative) .SetName("Dev Db Opportunity Found"); yield return new TestCaseData(controller, notFoundOpportunityGuid, Guid.Empty) .SetName("Dev Db Opportunity Not Found"); yield return new TestCaseData(notFoundController, notFoundOpportunityGuid, Guid.Empty) .SetName("Dev Db Opportunity Not Found 1"); } public static IEnumerable TestCases() { var foundOpportunityGuid = Guid.NewGuid(); var notFoundOpportunityGuid = Guid.NewGuid(); var stakeholderUsers = Mock.Of(); var service = Mock.Of(); Mock.Get(service) .Setup(s => s.CreateChargeCodeInitiative(It.IsIn(new[] { new Guid(TestUtilities.ClientDbGuid) }.AsEnumerable()), It.IsAny(), It.IsIn(new[] { foundOpportunityGuid }.AsEnumerable()), It.IsAny())) .Throws(); var clientClaimsPrincipalAccessor = TestUtilities.GetClaimsPrincipalAccessor(isClientDatabase: true); var controller = new ChargeCodeInitiativesController(clientClaimsPrincipalAccessor, service, stakeholderUsers); yield return new TestCaseData(controller, foundOpportunityGuid, Guid.Empty) .SetName("Client Db Opportunity Found"); yield return new TestCaseData(controller, notFoundOpportunityGuid, Guid.Empty) .SetName("Client Db Opportunity Not Found"); } } }