Template
86 lines
4.2 KiB
C#
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");
|
|
}
|
|
|
|
}
|
|
}
|