using FluentAssertions; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Moq; using NUnit.Framework; using Strata.ContinuousImprovement.Api.Controllers; using Strata.ContinuousImprovement.Biz.Dtos; using Strata.ContinuousImprovement.Biz.Exploration; using Strata.ContinuousImprovement.Biz.Population; using Strata.ContinuousImprovement.Biz.UserSetting; using Strata.DecisionSupport.Models.Encounters; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace Strata.ContinuousImprovement.Api.Test.Unit.Controllers { [TestFixture, Category("Unit"), Category("Controller")] public class ExplorationPopulationsControllerTests { public ExplorationPopulationsController Controller { get; set; } public IUserSettingService UserSettingService { get; set; } public IExplorationPopulationService PopulationService { get; set; } public IExplorationService ExplorationService { get; set; } [OneTimeSetUp] public async Task ExplorationPopulationsControllerTests_OneTimeSetUp() { UserSettingService = Mock.Of(); PopulationService = Mock.Of(); ExplorationService = Mock.Of(); } [SetUp] public void ExplorationPopulationsControllerTests_Setup() { Controller = new ExplorationPopulationsController(UserSettingService, PopulationService, ExplorationService, Mock.Of>()); } [TestCaseSource(nameof(GetEncountersTestCases))] public async Task GetEncountersTest(ExplorationPopulationDto population, IEnumerable encounterPhysicians) { // Arrange long populationId = 0; Guid configurationGuid = new Guid(); Mock.Get(PopulationService) .Setup(s => s.GetPopulationDataAsync(It.IsAny(), It.IsAny())) .Returns((populationId, token) => Task.FromResult(population)); Mock.Get(ExplorationService) .Setup(s => s.GetEncountersAsync(It.IsAny(), It.IsAny(), It.IsAny())) .Returns((exploration, configurationGuid, token) => Task.FromResult(encounterPhysicians)); // Act var response = await Controller.GetEncounters(populationId, configurationGuid, CancellationToken.None); // Assert response.Should().NotBeNull(); if (population == null || encounterPhysicians == null) { response.Result.Should().BeOfType(); } else { response.Result.Should().BeOfType(); var okResult = (OkObjectResult)response.Result; okResult.Value.Should().BeAssignableTo>(); okResult.Value.Should().NotBeNull(); } } public static IEnumerable GetEncountersTestCases() { var population = new ExplorationPopulationDto() { FiltersJSON = string.Empty }; var encounterPhysicians = Enumerable.Empty(); yield return new TestCaseData(population, encounterPhysicians) .SetName("Population and Encounters are not null"); yield return new TestCaseData(population, null) .SetName("Encounters is null"); yield return new TestCaseData(null, encounterPhysicians) .SetName("Population is null"); yield return new TestCaseData(null, null) .SetName("Population and Encounters are null"); } } }