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

127 lines
5.0 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.Api.Test.Unit.Generics;
using Strata.ContinuousImprovement.Biz.ChargeCode.Jobs;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Strata.ContinuousImprovement.Api.Test.Unit.Controllers
{
[TestFixture, Category("Unit"), Category("Controller")]
public class ChargeCodeOpportunityDetailsControllerTests
{
public ChargeCodeOpportunityDetailsController Controller { get; set; }
public FakeBackgroundJobClient BackgroundJobClient { get; set; }
private Mock<ICCOpportunityClientJob> _mockClientJob;
private ILogger<ChargeCodeOpportunityDetailsController> _logger;
[OneTimeSetUp]
public void TestSetup()
{
// Arrange
BackgroundJobClient ??= new FakeBackgroundJobClient();
_mockClientJob = new Mock<ICCOpportunityClientJob>();
_logger = Mock.Of<ILogger<ChargeCodeOpportunityDetailsController>>();
_mockClientJob
.Setup(j => j.RefreshClientOpportunityBaselineDetails(It.IsAny<int>(), It.Is<Guid>(g => g != Guid.Empty), It.IsAny<CancellationToken>()))
.ReturnsAsync("baseline-job-123");
_mockClientJob
.Setup(j => j.RefreshClientOpportunityTrackingDetails(It.IsAny<int>(), It.Is<Guid>(g => g != Guid.Empty), It.IsAny<CancellationToken>()))
.ReturnsAsync("tracking-job-456");
_mockClientJob
.Setup(j => j.RefreshClientOpportunityBaselineDetails(It.IsAny<int>(), Guid.Empty, It.IsAny<CancellationToken>()))
.ThrowsAsync(new InvalidOperationException("Opportunity missing"));
_mockClientJob
.Setup(j => j.RefreshClientOpportunityTrackingDetails(It.IsAny<int>(), Guid.Empty, It.IsAny<CancellationToken>()))
.ThrowsAsync(new InvalidOperationException("Initiative missing"));
Controller = new ChargeCodeOpportunityDetailsController(BackgroundJobClient, _mockClientJob.Object, _logger);
}
[Test]
public void ChargeCodeOpportunityDetailsControllerTest()
{
// Arrange
var controller = new ChargeCodeOpportunityDetailsController(BackgroundJobClient, _mockClientJob.Object, _logger);
// Assert
controller.Should().NotBeNull();
}
[Test]
public void CreateTest()
{
// Arrange
Action create = () => Controller.Create(new ChargeCodeOpportunityDetailsController.ChargeCodeDetailInfo
{
StrataId = 9,
OpportunityGuid = Guid.NewGuid(),
IsBaseline = true,
IsUpdate = true
}, CancellationToken.None);
// Assert
create.Should().NotThrow();
}
[Test]
public async Task RefreshBaselineDetails_ReturnsOk_OnSuccess()
{
var request = new ChargeCodeOpportunityDetailsController.ChargeCodeOpportunityJobRequestInfo
{
StrataId = 9,
OpportunityGuid = Guid.NewGuid()
};
var result = await Controller.RefreshBaselineDetails(request, CancellationToken.None);
var ok = result.Should().BeOfType<OkObjectResult>().Subject;
ok.Value.Should().Be("baseline-job-123");
}
[Test]
public async Task RefreshTrackingDetails_ReturnsOk_OnSuccess()
{
var request = new ChargeCodeOpportunityDetailsController.ChargeCodeOpportunityJobRequestInfo
{
StrataId = 9,
OpportunityGuid = Guid.NewGuid()
};
var result = await Controller.RefreshTrackingDetails(request, CancellationToken.None);
var ok = result.Should().BeOfType<OkObjectResult>().Subject;
ok.Value.Should().Be("tracking-job-456");
}
[Test]
public async Task RefreshBaselineDetails_ReturnsBadRequest_OnException()
{
var request = new ChargeCodeOpportunityDetailsController.ChargeCodeOpportunityJobRequestInfo
{
StrataId = 9,
OpportunityGuid = Guid.Empty
};
var result = await Controller.RefreshBaselineDetails(request, CancellationToken.None);
result.Should().BeOfType<BadRequestResult>();
}
[Test]
public async Task RefreshTrackingDetails_ReturnsBadRequest_OnException()
{
var request = new ChargeCodeOpportunityDetailsController.ChargeCodeOpportunityJobRequestInfo
{
StrataId = 9,
OpportunityGuid = Guid.Empty
};
var result = await Controller.RefreshTrackingDetails(request, CancellationToken.None);
result.Should().BeOfType<BadRequestResult>();
}
}
}