Files
continuousimprovement/tests/Strata.ContinuousImprovement.Api.Test.Unit/Controllers/ChargeCodeInitiativesControllerTests.cs
T

86 lines
4.2 KiB
C#

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<TestCaseData> DevDbTestCases1()
{
var foundOpportunityGuid = Guid.NewGuid();
var notFoundOpportunityGuid = Guid.NewGuid();
var newInitiative = Guid.NewGuid();
var stakeholderUsers = Mock.Of<IStakeholderUser>();
var clientClaimsPrincipalAccessor = TestUtilities.GetClaimsPrincipalAccessor();
var service = Mock.Of<ICCInitiativeService>();
Mock.Get(service)
.Setup(s => s.CreateChargeCodeInitiative(It.IsAny<Guid>(), It.IsAny<Initiative>(),
It.IsIn(new[] { foundOpportunityGuid }.AsEnumerable()), It.IsAny<CancellationToken>()))
.Returns(Task.FromResult(newInitiative));
var controller = new ChargeCodeInitiativesController(clientClaimsPrincipalAccessor, service, stakeholderUsers);
var notFoundService = Mock.Of<ICCInitiativeService>();
Mock.Get(notFoundService)
.Setup(s => s.CreateChargeCodeInitiative(It.IsAny<Guid>(), It.IsAny<Initiative>(),
It.IsNotIn(new[] { foundOpportunityGuid }.AsEnumerable()), It.IsAny<CancellationToken>()))
.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<TestCaseData> TestCases()
{
var foundOpportunityGuid = Guid.NewGuid();
var notFoundOpportunityGuid = Guid.NewGuid();
var stakeholderUsers = Mock.Of<IStakeholderUser>();
var service = Mock.Of<ICCInitiativeService>();
Mock.Get(service)
.Setup(s => s.CreateChargeCodeInitiative(It.IsIn(new[] { new Guid(TestUtilities.ClientDbGuid) }.AsEnumerable()),
It.IsAny<Initiative>(), It.IsIn(new[] { foundOpportunityGuid }.AsEnumerable()), It.IsAny<CancellationToken>()))
.Throws<Exception>();
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");
}
}
}