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 _mockClientJob; private ILogger _logger; [OneTimeSetUp] public void TestSetup() { // Arrange BackgroundJobClient ??= new FakeBackgroundJobClient(); _mockClientJob = new Mock(); _logger = Mock.Of>(); _mockClientJob .Setup(j => j.RefreshClientOpportunityBaselineDetails(It.IsAny(), It.Is(g => g != Guid.Empty), It.IsAny())) .ReturnsAsync("baseline-job-123"); _mockClientJob .Setup(j => j.RefreshClientOpportunityTrackingDetails(It.IsAny(), It.Is(g => g != Guid.Empty), It.IsAny())) .ReturnsAsync("tracking-job-456"); _mockClientJob .Setup(j => j.RefreshClientOpportunityBaselineDetails(It.IsAny(), Guid.Empty, It.IsAny())) .ThrowsAsync(new InvalidOperationException("Opportunity missing")); _mockClientJob .Setup(j => j.RefreshClientOpportunityTrackingDetails(It.IsAny(), Guid.Empty, It.IsAny())) .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().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().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(); } [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(); } } }