Template
374 lines
16 KiB
C#
374 lines
16 KiB
C#
using ClosedXML.Excel;
|
|
using DocumentFormat.OpenXml.Drawing.Diagrams;
|
|
using FluentAssertions;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using Strata.ContinuousImprovement.Api.Controllers;
|
|
using Strata.ContinuousImprovement.Biz.All.Opportunities;
|
|
using Strata.ContinuousImprovement.Biz.ChargeCode.Initiatives;
|
|
using Strata.ContinuousImprovement.Biz.ChargeCode.Opportunities;
|
|
using Strata.ContinuousImprovement.Biz.Configuration;
|
|
using Strata.ContinuousImprovement.Biz.DbContexts;
|
|
using Strata.ContinuousImprovement.Biz.Dtos;
|
|
using Strata.ContinuousImprovement.Biz.Initiatives;
|
|
using Strata.ContinuousImprovement.Biz.OrgDefined;
|
|
using Strata.ContinuousImprovement.Biz.Shared;
|
|
using Strata.ContinuousImprovement.Biz.Test.Unit.Utilities;
|
|
using Strata.ContinuousImprovement.JazzEntityFrameworkStub;
|
|
using Strata.ContinuousImprovement.JazzEntityFrameworkStub.Generics;
|
|
using Strata.CoreLib.Claims;
|
|
using Strata.FeatureFlags.Client;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
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 ChargeCodeOpportunitiesControllerTests
|
|
{
|
|
public JazzDbContext DbContext { get; set; }
|
|
public ChargeCodeOpportunitiesController Controller { get; set; }
|
|
public IEnumerable<Biz.Configuration.Configuration> Configurations { get; set; }
|
|
public IClaimsPrincipalAccessor ClaimsPrincipalAccessor { get; set; }
|
|
public IConfigurationService ConfigurationService { get; set; }
|
|
public ICCOpportunityService OpportunityService;
|
|
public ICCInitiativeService InitiativeService;
|
|
public IOpportunityMetricCohortService OpportunityMetricCohortService;
|
|
public IFeatureFlagServiceClient FeatureFlagServiceClient;
|
|
public IAllOpportunityService AllOpportunityService;
|
|
|
|
[OneTimeSetUp]
|
|
public async Task ConfigurationsControllerTestSetup()
|
|
{
|
|
// Arrange
|
|
var jeff = new JazzEntityFrameworkFactory();
|
|
DbContext = await jeff.CreateDbContextAsync(nameof(ConfigurationsControllerTests), CancellationToken.None);
|
|
Configurations = jeff.Configurations.ToList();
|
|
var configuration = jeff.Configurations.First(c => c.ConfigurationGuid == JazzEntityFrameworkFactory.CurrentConfigurationGuid);
|
|
var ccOpportunityDataModel = jeff.CCOpportunities[0].MapToDataModel(configuration);
|
|
var workbook = new XLWorkbook();
|
|
|
|
// Act
|
|
ClaimsPrincipalAccessor = TestUtilities.GetClaimsPrincipalAccessor();
|
|
FeatureFlagServiceClient = TestUtilities.GetFeatureFlagServiceClient("chargecodebeta", true);
|
|
ConfigurationService = Mock.Of<IConfigurationService>();
|
|
Mock.Get(ConfigurationService)
|
|
.Setup(s => s.GetConfigurationsAsync(It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(Configurations.AsEnumerable()));
|
|
Mock.Get(ConfigurationService)
|
|
.Setup(s => s.GetConfigurationAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(configuration));
|
|
AllOpportunityService = Mock.Of<IAllOpportunityService>();
|
|
Mock.Get(AllOpportunityService)
|
|
.Setup(s => s.NameIsValid(It.IsAny<Guid>(), It.IsAny<int>(), It.IsAny<string>(), It.IsAny<Guid?>(), It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(true));
|
|
OpportunityService = Mock.Of<ICCOpportunityService>();
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.UpdateAsync(It.IsAny<Guid>(), It.IsAny<CCOpportunityDataModel>(), It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(Guid.NewGuid().ToString()));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.ValidateChargeCodesAsync(It.IsAny<List<string>>(), It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(true));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.ValidateOpportunityLevelsAsync(It.IsAny<OpportunityLevel>(), It.IsAny<List<string>>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(true));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.DeleteAsync<CCOpportunityDataModel>(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(true));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.GetById(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
|
|
.Returns<Guid, CancellationToken>((oppGuid, token)
|
|
=> oppGuid == ccOpportunityDataModel.OpportunityGuid
|
|
? Task.FromResult(ccOpportunityDataModel)
|
|
: Task.FromResult((CCOpportunityDataModel)null));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.ExportAsync(It.IsAny<Guid>(), It.IsAny<IEnumerable<string>>(), It.IsAny<string>(), It.IsAny<CancellationToken>()))
|
|
.Returns<Guid, IEnumerable<string>, string, CancellationToken>((oppGuid, chargeCodes, userName, token)
|
|
=> oppGuid == ccOpportunityDataModel.OpportunityGuid
|
|
? Task.FromResult(((IXLWorkbook)workbook))
|
|
: Task.FromResult(((IXLWorkbook)null)));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.UpdateGoalTotalUnitsOfServiceAsync(It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<double>(), It.IsAny<CancellationToken>()))
|
|
.Returns<Guid, string, double, CancellationToken>((oppGuid, key, value, token)
|
|
=> oppGuid == ccOpportunityDataModel.OpportunityGuid
|
|
? Task.FromResult(true)
|
|
: Task.FromResult(false));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.UpdateGoalCostPerUnitAsync(It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<double>(), It.IsAny<CancellationToken>()))
|
|
.Returns<Guid, string, double, CancellationToken>((oppGuid, key, goalValue, token)
|
|
=> oppGuid == ccOpportunityDataModel.OpportunityGuid
|
|
? Task.FromResult(true)
|
|
: Task.FromResult(false));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.GetInitiativeInfoAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(new InitiativeInfo()));
|
|
Mock.Get(OpportunityService)
|
|
.Setup(s => s.RefreshOpportunityTrackingData(It.IsAny<Guid>(), It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
|
|
.Returns<Guid, Guid, CancellationToken>((dbGuid, oppGuid, token)
|
|
=> dbGuid.ToString() == TestUtilities.DbGuid && oppGuid == ccOpportunityDataModel.OpportunityGuid
|
|
? Task.FromResult("Good")
|
|
: Task.FromResult(""));
|
|
InitiativeService = Mock.Of<ICCInitiativeService>();
|
|
Mock.Get(InitiativeService)
|
|
.Setup(s => s.UpdateSavings(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
|
|
.Returns(Task.FromResult(true));
|
|
OpportunityMetricCohortService = Mock.Of<IOpportunityMetricCohortService>();
|
|
}
|
|
|
|
[NUnitSetup]
|
|
public void TestSetup()
|
|
{
|
|
// Arrange
|
|
Controller = new ChargeCodeOpportunitiesController(ClaimsPrincipalAccessor, ConfigurationService, OpportunityService, InitiativeService, OpportunityMetricCohortService, FeatureFlagServiceClient, AllOpportunityService);
|
|
}
|
|
|
|
[Test()]
|
|
public void ChargeCodeOpportunitiesControllerTest()
|
|
{
|
|
// Act
|
|
var controller = new ChargeCodeOpportunitiesController(ClaimsPrincipalAccessor, ConfigurationService, OpportunityService, InitiativeService, OpportunityMetricCohortService, FeatureFlagServiceClient, AllOpportunityService);
|
|
|
|
// Assert
|
|
controller.Should().NotBeNull();
|
|
}
|
|
|
|
[Test()]
|
|
public async Task UpdateOpportunityTest()
|
|
{
|
|
// Arrange
|
|
var opp = await DbContext.ChargeCodeOpportunities.FirstOrDefaultAsync(CancellationToken.None);
|
|
var opportunity = opp.MapToSaveModel();
|
|
|
|
// Act
|
|
var result = await Controller.UpdateOpportunity(opportunity.OpportunityGuid, opportunity, CancellationToken.None);
|
|
|
|
// Assert
|
|
var actual = result.Result;
|
|
result.Result.Should().BeOfType<OkObjectResult>();
|
|
var okResult = (OkObjectResult)result.Result;
|
|
okResult.Value.Should().BeOfType<string>();
|
|
var value = new Guid(okResult.Value as string);
|
|
value.Should().NotBeEmpty();
|
|
}
|
|
|
|
[Test()]
|
|
public async Task ValidateChargeCodesAsyncTest()
|
|
{
|
|
// Arrange
|
|
var chargeCodes = new List<string>();
|
|
|
|
// Act
|
|
var result = await Controller.ValidateChargeCodesAsync(new ChargeCodeOpportunitiesController.ValidateChargeCodeDto() { ChargeCodes = chargeCodes }, CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Result.Should().BeOfType<OkObjectResult>();
|
|
var okResult = (OkObjectResult)result.Result;
|
|
okResult.Value.Should().BeOfType<bool>();
|
|
var value = (bool)okResult.Value;
|
|
value.Should().BeTrue();
|
|
}
|
|
|
|
[Test()]
|
|
public async Task GetCustomPickerChargeCodesAsyncTest()
|
|
{
|
|
// Arrange
|
|
var chargeCodes = new List<string>();
|
|
|
|
// Act
|
|
var result = await Controller.GetChargeCodeMembers(chargeCodes, CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Result.Should().BeOfType<OkObjectResult>();
|
|
var okResult = (OkObjectResult)result.Result;
|
|
okResult.Value.Should().BeOfType<ChargeCodePickerModel[]>();
|
|
var value = (ChargeCodePickerModel[])okResult.Value;
|
|
value.Should().NotBeNull();
|
|
}
|
|
|
|
[Test()]
|
|
public async Task ValidateOpportunityLevelsAsyncTest()
|
|
{
|
|
// Arrange
|
|
var info = new ChargeCodeOpportunitiesController.OpportunityLevelSelectionInfo
|
|
{
|
|
Configuration = Configurations.First().ConfigurationGuid,
|
|
OpportunityLevel = OpportunityLevel.Entity,
|
|
OpportunityLevels = new List<string>()
|
|
};
|
|
|
|
// Act
|
|
var result = await Controller.ValidateOpportunityLevelsAsync(info, CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Result.Should().BeOfType<OkObjectResult>();
|
|
var okResult = (OkObjectResult)result.Result;
|
|
okResult.Value.Should().BeOfType<bool>();
|
|
var value = (bool)okResult.Value;
|
|
value.Should().BeTrue();
|
|
}
|
|
|
|
[Test()]
|
|
public async Task DeleteTest()
|
|
{
|
|
// Act
|
|
var result = await Controller.Delete(Guid.NewGuid(), CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().BeTrue();
|
|
}
|
|
|
|
[TestCase(true, TestName = "GetByIdTest - true")]
|
|
[TestCase(false, TestName = "GetByIdTest - false")]
|
|
public async Task GetByIdTest(bool withOpp)
|
|
{
|
|
// Arrange
|
|
var opp = await DbContext.ChargeCodeOpportunities.FirstAsync(CancellationToken.None);
|
|
|
|
// Act
|
|
var result = await Controller.GetById(withOpp ? opp.OpportunityGuid : Guid.NewGuid(), CancellationToken.None);
|
|
|
|
// Assert
|
|
if (withOpp)
|
|
{
|
|
result.Result.Should().BeOfType<OkObjectResult>();
|
|
var okResult = (OkObjectResult)result.Result;
|
|
okResult.Value.Should().BeOfType<CCOpportunityDto>()
|
|
.And.NotBeOfType<CCOpportunityDataModel>();
|
|
}
|
|
else
|
|
{
|
|
result.Result.Should().BeOfType<NotFoundResult>();
|
|
}
|
|
}
|
|
|
|
[TestCase(true, TestName = "GetEditModelTest - true")]
|
|
[TestCase(false, TestName = "GetEditModelTest - false")]
|
|
public async Task GetEditModelTest(bool withOpp)
|
|
{
|
|
// Arrange
|
|
var opp = await DbContext.ChargeCodeOpportunities.FirstAsync(CancellationToken.None);
|
|
|
|
// Act
|
|
var result = await Controller.GetEditModel(withOpp ? opp.OpportunityGuid : Guid.NewGuid(), CancellationToken.None);
|
|
|
|
// Assert
|
|
if (withOpp)
|
|
{
|
|
result.Should().BeOfType<CCOpportunitySaveModel>();
|
|
}
|
|
else
|
|
{
|
|
result.Should().BeNull();
|
|
}
|
|
}
|
|
|
|
[TestCase(true, TestName = "UpdateGoalTotalUnitsOfServiceTest - true")]
|
|
[TestCase(false, TestName = "UpdateGoalTotalUnitsOfServiceTest - false")]
|
|
public async Task UpdateGoalTotalUnitsOfServiceTest(bool withOpp)
|
|
{
|
|
// Arrange
|
|
var opp = await DbContext.ChargeCodeOpportunities.FirstAsync(CancellationToken.None);
|
|
|
|
// Act
|
|
var result = await Controller.UpdateGoalTotalUnitsOfService(withOpp ? opp.OpportunityGuid : Guid.NewGuid(), new ChargeCodeOpportunitiesController.GoalSetDto(), CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().Be(withOpp);
|
|
}
|
|
|
|
[TestCase(true, TestName = "UpdateGoalCostPerUnitTest - true")]
|
|
[TestCase(false, TestName = "UpdateGoalCostPerUnitTest - false")]
|
|
public async Task UpdateGoalCostPerUnitTest(bool withOpp)
|
|
{
|
|
// Arrange
|
|
var opp = await DbContext.ChargeCodeOpportunities.FirstAsync(CancellationToken.None);
|
|
|
|
// Act
|
|
var result = await Controller.UpdateGoalCostPerUnit(withOpp ? opp.OpportunityGuid : Guid.NewGuid(), new ChargeCodeOpportunitiesController.GoalSetDto(), CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().Be(withOpp);
|
|
}
|
|
|
|
[TestCase(true, TestName = "ExportTest - true")]
|
|
[TestCase(false, TestName = "ExportTest - false")]
|
|
public async Task ExportTest(bool withOpp)
|
|
{
|
|
// Arrange
|
|
var opp = await DbContext.ChargeCodeOpportunities.FirstAsync(CancellationToken.None);
|
|
var chargeCodeItems = new ChargeCodeOpportunitiesController.ChargeCodeItems
|
|
{
|
|
ChargeCodes = new List<string>()
|
|
};
|
|
|
|
// Act
|
|
var result = await Controller.Export(withOpp ? opp.OpportunityGuid : Guid.NewGuid(), chargeCodeItems, CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().BeOfType<ExcelContentResult>();
|
|
var excelContentResult = (ExcelContentResult)result;
|
|
if (withOpp)
|
|
{
|
|
excelContentResult.Workbook.Should().NotBeNull();
|
|
}
|
|
else
|
|
{
|
|
excelContentResult.Workbook.Should().BeNull();
|
|
}
|
|
}
|
|
|
|
[Test()]
|
|
public async Task OpportunityCreateEnabledTest()
|
|
{
|
|
// Act
|
|
var result = await Controller.OpportunityCreateEnabled(CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().BeTrue();
|
|
}
|
|
|
|
[Test()]
|
|
public async Task GetInitiativeInfoTest()
|
|
{
|
|
// Act
|
|
var result = await Controller.GetInitiativeInfo(Guid.NewGuid(), CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().BeOfType<InitiativeInfo>()
|
|
.And.NotBeNull();
|
|
}
|
|
|
|
[TestCase(true, TestName = "RefreshTest - true")]
|
|
[TestCase(false, TestName = "RefreshTest - false")]
|
|
public async Task RefreshTest(bool withOpp)
|
|
{
|
|
// Arrange
|
|
var opp = await DbContext.ChargeCodeOpportunities.FirstAsync(CancellationToken.None);
|
|
|
|
// Act
|
|
var result = await Controller.Refresh(new ChargeCodeOpportunitiesController.RefreshData
|
|
{
|
|
DatabaseGuid = new Guid(TestUtilities.DbGuid),
|
|
Guid = withOpp ? opp.OpportunityGuid : Guid.NewGuid()
|
|
}, CancellationToken.None);
|
|
|
|
// Assert
|
|
result.Should().BeOfType<string>();
|
|
if (withOpp)
|
|
{
|
|
result.Should().NotBeNullOrEmpty();
|
|
}
|
|
else
|
|
{
|
|
result.Should().BeNullOrEmpty();
|
|
}
|
|
}
|
|
|
|
}
|
|
} |