Template
289 lines
13 KiB
C#
289 lines
13 KiB
C#
using FluentAssertions;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Logging;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using Strata.ContinuousImprovement.Api.Controllers;
|
|
using Strata.ContinuousImprovement.Biz.All.Opportunities;
|
|
using Strata.ContinuousImprovement.Biz.Initiatives;
|
|
using Strata.ContinuousImprovement.Biz.Network;
|
|
using Strata.ContinuousImprovement.Biz.Test.Unit.Utilities;
|
|
using Strata.CoreLib.Claims;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using NUnitSetup = NUnit.Framework.SetUpAttribute;
|
|
|
|
|
|
namespace Strata.ContinuousImprovement.Api.Test.Unit.Controllers
|
|
{
|
|
[TestFixture, Category("Unit"), Category("Controller")]
|
|
public class ClientNetworkOpportunityLinkControllerTests
|
|
{
|
|
public ClientNetworkOpportunityLinkController Controller { get; set; }
|
|
public ClientNetworkOpportunityLinkController EmptyDbController { get; set; }
|
|
public IClaimsPrincipalAccessor ClaimsPrincipalAccessor { get; set; }
|
|
public IClaimsPrincipalAccessor EmptyDbClaimsPrincipalAccessor { get; set; }
|
|
public IClientNetworkOpportunityService clientNetworkOpportunityService;
|
|
public IClientNetworkOpportunityLinkService clientNetworkOpportunityLinkService;
|
|
public IAllOpportunityService allOpportunityService;
|
|
public IInitiativeService initiativeService;
|
|
public ILogger<ClientNetworkOpportunityLinkController> logger;
|
|
|
|
[OneTimeSetUp]
|
|
public void ClientNetworkOpportunityLinkControllerTestsSetup()
|
|
{
|
|
// Arrange
|
|
clientNetworkOpportunityService = Mock.Of<IClientNetworkOpportunityService>();
|
|
clientNetworkOpportunityLinkService = Mock.Of<IClientNetworkOpportunityLinkService>();
|
|
allOpportunityService = Mock.Of<IAllOpportunityService>();
|
|
initiativeService = Mock.Of<IInitiativeService>();
|
|
logger = Mock.Of<ILogger<ClientNetworkOpportunityLinkController>>();
|
|
|
|
// Act
|
|
ClaimsPrincipalAccessor = TestUtilities.GetClaimsPrincipalAccessor();
|
|
EmptyDbClaimsPrincipalAccessor = TestUtilities.GetClaimsPrincipalAccessor(isEmptyDatabase: true);
|
|
var expected = new ClientNetworkOpportunityLink
|
|
{
|
|
OpportunityGuid = Guid.NewGuid(),
|
|
ConfigurationGuid = Guid.NewGuid(),
|
|
ClientNetworkOpportunityLinkId = 1,
|
|
InitiativeGuid = Guid.NewGuid(),
|
|
ClientNetworkOpportunity = new ClientNetworkOpportunity
|
|
{
|
|
NetworkOpportunityId = 1,
|
|
}
|
|
};
|
|
Mock.Get(clientNetworkOpportunityLinkService)
|
|
.Setup(s => s.RolloverOpportunityLinkAsync(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<Guid>(),
|
|
It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
|
|
.Returns<Guid, Guid, Guid, Guid, Guid, Guid, CancellationToken>(
|
|
(dbGuid, SrcConfigGuid, SrcOppGuid, RollConfigGuid, RollOppGuid, RollInitGuid, token) =>
|
|
dbGuid == Guid.Empty || SrcOppGuid == Guid.Empty
|
|
? Task.FromResult(default(ClientNetworkOpportunityLink))
|
|
: Task.FromResult(expected));
|
|
Mock.Get(clientNetworkOpportunityLinkService)
|
|
.Setup(s => s.DeleteOpportunityLinkAsync(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<Guid>(),
|
|
It.IsAny<CancellationToken>()));
|
|
}
|
|
|
|
[NUnitSetup]
|
|
public void TestSetup()
|
|
{
|
|
// Act
|
|
Controller = new ClientNetworkOpportunityLinkController(
|
|
ClaimsPrincipalAccessor,
|
|
clientNetworkOpportunityService,
|
|
clientNetworkOpportunityLinkService,
|
|
allOpportunityService,
|
|
initiativeService,
|
|
logger);
|
|
|
|
EmptyDbController = new ClientNetworkOpportunityLinkController(
|
|
EmptyDbClaimsPrincipalAccessor,
|
|
clientNetworkOpportunityService,
|
|
clientNetworkOpportunityLinkService,
|
|
allOpportunityService,
|
|
initiativeService,
|
|
logger);
|
|
}
|
|
|
|
[Test()]
|
|
public async Task ClientNetworkOpportunityLinkControllerTest()
|
|
{
|
|
// Assert
|
|
Controller.Should().NotBeNull();
|
|
EmptyDbController.Should().NotBeNull();
|
|
}
|
|
|
|
[TestCaseSource(nameof(AddOpportunityLinkTestCases))]
|
|
public async Task AddOpportunityLinkTest(Guid opportunityGuid)
|
|
{
|
|
var result = await Controller.AddOpportunityLink(new ClientNetworkOpportunityLinkController.CreateNetworkOpportunityLinkDto
|
|
{
|
|
OpportunityGuid = opportunityGuid
|
|
}, CancellationToken.None);
|
|
|
|
result.Should().NotBeNull();
|
|
result.Should().BeOfType<ActionResult<ClientNetworkOpportunityLinkController.ClientNetworkOpportunityResultDto>>();
|
|
result.Result.Should().NotBeNull();
|
|
if (opportunityGuid == Guid.Empty)
|
|
{
|
|
result.Result.Should().BeOfType<BadRequestResult>();
|
|
}
|
|
else
|
|
{
|
|
result.Should().NotBeOfType<BadRequestResult>();
|
|
}
|
|
}
|
|
|
|
public static IEnumerable<TestCaseData> AddOpportunityLinkTestCases()
|
|
{
|
|
yield return new TestCaseData(Guid.Empty)
|
|
.SetName(nameof(AddOpportunityLinkTestCases) + " w/Empty Opp Guid");
|
|
yield return new TestCaseData(Guid.NewGuid())
|
|
.SetName(nameof(AddOpportunityLinkTestCases) + " w/Opp Guid");
|
|
}
|
|
|
|
[TestCaseSource(nameof(RolloverOpportunityLinkTestCases))]
|
|
public async Task RolloverOpportunityLinkTest(Guid srcOppGuid, bool useEmptyController)
|
|
{
|
|
// Arrange
|
|
var rolloverOpportunityInfo = new ClientNetworkOpportunityLinkController.RolloverOpportunityDto
|
|
{
|
|
SourceOpportunityGuid = srcOppGuid,
|
|
SourceConfigurationGuid = Guid.Empty,
|
|
DatabaseGuid = useEmptyController ? Guid.Empty : new Guid(TestUtilities.DbGuid),
|
|
};
|
|
|
|
// Act
|
|
var result = await Controller.RolloverOpportunityLink(rolloverOpportunityInfo, CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().NotBeNull();
|
|
if (useEmptyController)
|
|
{
|
|
result.Result.Should().BeOfType<BadRequestResult>();
|
|
}
|
|
else
|
|
{
|
|
result.Result.Should().BeOfType<OkObjectResult>();
|
|
}
|
|
}
|
|
|
|
public static IEnumerable<TestCaseData> RolloverOpportunityLinkTestCases()
|
|
{
|
|
yield return new TestCaseData(Guid.Empty, true)
|
|
.SetName(nameof(RolloverOpportunityLinkTest) + " w/Empty Opp Guid, Empty Db Guid");
|
|
yield return new TestCaseData(Guid.Empty, false)
|
|
.SetName(nameof(RolloverOpportunityLinkTest) + " w/Empty Opp Guid");
|
|
yield return new TestCaseData(Guid.NewGuid(), true)
|
|
.SetName(nameof(RolloverOpportunityLinkTest) + " w/Opp Guid, Empty Db Guid");
|
|
yield return new TestCaseData(Guid.NewGuid(), false)
|
|
.SetName(nameof(RolloverOpportunityLinkTest) + " w/Opp Guid");
|
|
}
|
|
|
|
[TestCaseSource(nameof(DeleteOpportunityLinkTestCases))]
|
|
public async Task DeleteOpportunityLinkTest(Guid srcOppGuid, Guid configurationGuid, Guid databaseGuid, bool useEmptyController)
|
|
{
|
|
// Arrange
|
|
Mock.Get(clientNetworkOpportunityLinkService)
|
|
.Setup(s => s.ContainsOpportunityLinkAsync(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<Guid>(),
|
|
It.IsAny<CancellationToken>()))
|
|
.Returns<Guid, Guid, Guid, CancellationToken>(
|
|
(dbGuid, configurationGuid, oppGuid, token) =>
|
|
oppGuid == Guid.Empty || dbGuid == Guid.Empty
|
|
? Task.FromResult(false)
|
|
: Task.FromResult(true));
|
|
var opportunity = new ClientNetworkOpportunityLinkController.ClientNetworkOpportunityLinkDto
|
|
{
|
|
ConfigurationGuid = configurationGuid,
|
|
DatabaseGuid = databaseGuid,
|
|
Id = srcOppGuid
|
|
};
|
|
|
|
// Act
|
|
ActionResult<bool> result;
|
|
if (useEmptyController)
|
|
{
|
|
result = await EmptyDbController.DeleteOpportunityLink(opportunity, CancellationToken.None);
|
|
}
|
|
else
|
|
{
|
|
result = await Controller.DeleteOpportunityLink(opportunity, CancellationToken.None);
|
|
}
|
|
|
|
// Assert
|
|
result.Should().NotBeNull();
|
|
if (useEmptyController)
|
|
{
|
|
result.Result.Should().BeOfType<BadRequestResult>();
|
|
}
|
|
}
|
|
|
|
public static IEnumerable<TestCaseData> DeleteOpportunityLinkTestCases()
|
|
{
|
|
var configurationGuid = JazzEntityFrameworkStub.JazzEntityFrameworkFactory.CurrentConfigurationGuid;
|
|
var databaseGuid = JazzEntityFrameworkStub.JazzEntityFrameworkFactory.DatabaseGuid;
|
|
|
|
yield return new TestCaseData(Guid.Empty, configurationGuid, Guid.Empty, true)
|
|
.SetName(nameof(DeleteOpportunityLinkTest) + " w/Empty Opp Guid, Empty Db Guid");
|
|
yield return new TestCaseData(Guid.Empty, configurationGuid, null, true)
|
|
.SetName(nameof(DeleteOpportunityLinkTest) + " w/Empty Opp Guid, Null Db Guid");
|
|
yield return new TestCaseData(Guid.Empty, configurationGuid, databaseGuid, false)
|
|
.SetName(nameof(DeleteOpportunityLinkTest) + " w/Empty Opp Guid");
|
|
|
|
yield return new TestCaseData(Guid.NewGuid(), configurationGuid, Guid.Empty, true)
|
|
.SetName(nameof(DeleteOpportunityLinkTest) + " w/Opp Guid, Empty Db Guid");
|
|
yield return new TestCaseData(Guid.NewGuid(), configurationGuid, null, true)
|
|
.SetName(nameof(DeleteOpportunityLinkTest) + " w/Opp Guid, Null Db Guid");
|
|
yield return new TestCaseData(Guid.NewGuid(), configurationGuid, databaseGuid, false)
|
|
.SetName(nameof(DeleteOpportunityLinkTest) + " w/Opp Guid");
|
|
}
|
|
|
|
[TestCaseSource(nameof(DeleteOpportunityLinkIfExistsTestCases))]
|
|
public async Task DeleteOpportunityLinkIfExistsTest(Guid opportunityGuid, Guid configurationGuid, bool useEmptyController)
|
|
{
|
|
// Arrange
|
|
Mock.Get(clientNetworkOpportunityLinkService)
|
|
.Setup(s => s.ContainsOpportunityLinkAsync(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<Guid>(),
|
|
It.IsAny<CancellationToken>()))
|
|
.Returns<Guid, Guid, Guid, CancellationToken>(
|
|
(dbGuid, configurationGuid, oppGuid, token) =>
|
|
oppGuid == Guid.Empty || dbGuid == Guid.Empty
|
|
? Task.FromResult(false)
|
|
: Task.FromResult(true));
|
|
|
|
// Act
|
|
ActionResult<bool> result;
|
|
if (useEmptyController)
|
|
{
|
|
result = await EmptyDbController.DeleteOpportunityLinkIfExists(opportunityGuid, configurationGuid, CancellationToken.None);
|
|
}
|
|
else
|
|
{
|
|
result = await Controller.DeleteOpportunityLinkIfExists(opportunityGuid, configurationGuid, CancellationToken.None);
|
|
}
|
|
|
|
// Assert
|
|
result.Should().NotBeNull();
|
|
if (useEmptyController)
|
|
{
|
|
result.Result.Should().BeOfType<BadRequestResult>();
|
|
}
|
|
}
|
|
|
|
public static IEnumerable<TestCaseData> DeleteOpportunityLinkIfExistsTestCases()
|
|
{
|
|
var configurationGuid = JazzEntityFrameworkStub.JazzEntityFrameworkFactory.CurrentConfigurationGuid;
|
|
var databaseGuid = JazzEntityFrameworkStub.JazzEntityFrameworkFactory.DatabaseGuid;
|
|
|
|
yield return new TestCaseData(Guid.Empty, configurationGuid, true)
|
|
.SetName(nameof(DeleteOpportunityLinkIfExistsTest) + " w/Empty Opp Guid, Empty Db Guid");
|
|
yield return new TestCaseData(Guid.Empty, configurationGuid, true)
|
|
.SetName(nameof(DeleteOpportunityLinkIfExistsTest) + " w/Empty Opp Guid, Null Db Guid");
|
|
yield return new TestCaseData(Guid.Empty, configurationGuid, false)
|
|
.SetName(nameof(DeleteOpportunityLinkIfExistsTest) + " w/Empty Opp Guid");
|
|
|
|
yield return new TestCaseData(Guid.NewGuid(), configurationGuid, true)
|
|
.SetName(nameof(DeleteOpportunityLinkIfExistsTest) + " w/Opp Guid, Empty Db Guid");
|
|
yield return new TestCaseData(Guid.NewGuid(), configurationGuid, true)
|
|
.SetName(nameof(DeleteOpportunityLinkIfExistsTest) + " w/Opp Guid, Null Db Guid");
|
|
yield return new TestCaseData(Guid.NewGuid(), configurationGuid, false)
|
|
.SetName(nameof(DeleteOpportunityLinkIfExistsTest) + " w/Opp Guid");
|
|
}
|
|
|
|
[Test()]
|
|
public async Task DeleteInitiativeLinkTest()
|
|
{
|
|
Assert.Inconclusive();
|
|
}
|
|
|
|
[Test()]
|
|
public async Task DeleteInitiativeLinkTest1()
|
|
{
|
|
Assert.Inconclusive();
|
|
}
|
|
}
|
|
} |