using FluentAssertions; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; using Strata.ContinuousImprovement.Api.Controllers.JazzQvi; using Strata.ContinuousImprovement.Biz.QualityVariation.QVI; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Strata.ContinuousImprovement.Api.Test.Unit.Controllers { [TestFixture, Category("Unit"), Category("Controller")] public class QviLineItemSavingsControllerTests { private Mock _serviceMock; private QviLineItemSavingsController _controller; [SetUp] public void SetUp() { _serviceMock = new Mock(); _controller = new QviLineItemSavingsController(_serviceMock.Object); } [Test] public async Task GetCaseTypeFamilies_WhenConfigurationGuidIsEmpty_ReturnsBadRequest() { var result = await _controller.GetCaseTypeFamilies(Guid.Empty, false, CancellationToken.None); result.Result.Should().BeOfType(); _serviceMock.Verify(s => s.GetCaseTypeFamilyInfoAsync(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public async Task GetCaseTypeFamilies_WhenConfigurationGuidIsValid_ReturnsOk() { var configurationGuid = Guid.NewGuid(); var expected = new[] { new QviLineItemCaseTypeFamilyInfo { QualityVariationEventId = 1, CaseTypeFamilyId = 2 } }; _serviceMock .Setup(s => s.GetCaseTypeFamilyInfoAsync(configurationGuid, true, It.IsAny())) .ReturnsAsync(expected); var result = await _controller.GetCaseTypeFamilies(configurationGuid, true, CancellationToken.None); result.Result.Should().BeOfType(); var okResult = result.Result as OkObjectResult; var value = okResult?.Value as System.Collections.Generic.IEnumerable; value.Should().NotBeNull(); value!.Single().CaseTypeFamilyId.Should().Be(2); _serviceMock.Verify(s => s.GetCaseTypeFamilyInfoAsync(configurationGuid, true, It.IsAny()), Times.Once); } [Test] public async Task GetDrgTypes_WhenConfigurationGuidIsEmpty_ReturnsBadRequest() { var result = await _controller.GetDrgTypes(Guid.Empty, false, CancellationToken.None); result.Result.Should().BeOfType(); _serviceMock.Verify(s => s.GetDrgTypeInfoAsync(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public async Task GetDrgTypes_WhenConfigurationGuidIsValid_ReturnsOk() { var configurationGuid = Guid.NewGuid(); var expected = new[] { new QviLineItemDrgTypeInfo { DrgType = "APR" } }; _serviceMock .Setup(s => s.GetDrgTypeInfoAsync(configurationGuid, true, It.IsAny())) .ReturnsAsync(expected); var result = await _controller.GetDrgTypes(configurationGuid, true, CancellationToken.None); result.Result.Should().BeOfType(); var okResult = result.Result as OkObjectResult; var value = okResult?.Value as System.Collections.Generic.IEnumerable; value.Should().NotBeNull(); value!.Single().DrgType.Should().Be("APR"); _serviceMock.Verify(s => s.GetDrgTypeInfoAsync(configurationGuid, true, It.IsAny()), Times.Once); } [Test] public async Task GetEncounterSavings_WhenConfigurationGuidIsEmpty_ReturnsBadRequest() { var result = await _controller.GetEncounterSavings(Guid.Empty, cancellationToken: CancellationToken.None); result.Result.Should().BeOfType(); _serviceMock.Verify(s => s.GetEncounterSavingInfoAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public async Task GetEncounterSavings_WhenConfigurationGuidIsValid_ReturnsOk() { var configurationGuid = Guid.NewGuid(); var expected = new[] { new QviLineItemEncounterSavingInfo { EncounterRecordNumber = "enc-1" } }; _serviceMock .Setup(s => s.GetEncounterSavingInfoAsync(configurationGuid, It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync(expected); var result = await _controller.GetEncounterSavings(configurationGuid, cancellationToken: CancellationToken.None); result.Result.Should().BeOfType(); var okResult = result.Result as OkObjectResult; var value = okResult?.Value as System.Collections.Generic.IEnumerable; value.Should().NotBeNull(); value!.Single().EncounterRecordNumber.Should().Be("enc-1"); _serviceMock.Verify(s => s.GetEncounterSavingInfoAsync(configurationGuid, null, null, It.IsAny()), Times.Once); } } }