using FluentAssertions; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; using Strata.ApiLib.Standard.Models; using Strata.ContinuousImprovement.Api.Controllers; using Strata.ContinuousImprovement.Biz.DbContexts; using Strata.ContinuousImprovement.Biz.FreeForm.Initiatives; using Strata.ContinuousImprovement.Biz.FreeForm.Opportunities; using Strata.ContinuousImprovement.Biz.FreeForm.Opportunities.Filters; using Strata.ContinuousImprovement.Biz.Initiatives; using Strata.ContinuousImprovement.Biz.Pagination; using Strata.ContinuousImprovement.JazzEntityFrameworkStub; 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 FreeFormOpportunitiesControllerTests { public JazzEntityFrameworkFactory jazzEntityFrameworkFactory { get; set; } public JazzDbContext DbContext { get; set; } public IFFOpportunityService FFOpportunityService { get; set; } public IFFInitiativeService FFInitiativeService { get; set; } public IInitiativeService InitiativeService { get; set; } public FreeFormOpportunitiesController Controller { get; set; } [OneTimeSetUp] public async Task FreeFormOpportunitiesControllerTestSetup() { jazzEntityFrameworkFactory = new JazzEntityFrameworkFactory(); DbContext = await jazzEntityFrameworkFactory.CreateDbContextAsync(nameof(ConfigurationsControllerTests), CancellationToken.None); FFOpportunityService = Mock.Of(); InitiativeService = Mock.Of(); } [SetUp] public async Task Setup() { // Arrange Controller = new FreeFormOpportunitiesController(FFOpportunityService, InitiativeService); } [Test()] public async Task FreeFormOpportunitiesControllerTest() { // Act // Assert Controller.Should().NotBeNull(); } [Test()] public async Task GetOpportunitiesTest() { // Arrange var opportunities = DbContext.FFOpportunities.Take(25).ToList(); var pagingOptions = new PagingOptions { First = 1, Rows = 25, SortField = nameof(FFOpportunity.IdentifiedSavings), SortOrder = SortOrder.Asc }; var loadOptions = new FFOpportunityLoadOptions { Filters = new FFFilters { ConfigurationGuid = JazzEntityFrameworkFactory.CurrentConfigurationGuid }, PagingOptions = pagingOptions, }; var response = new PagedApiResponse { PagingInfo = new PagingInfo { PageNumber = 1, TotalNumberOfResults = opportunities.Count, TotalPages = opportunities.Count / pagingOptions.Rows, ResultsPerPage = pagingOptions.Rows }, Data = opportunities }; Mock.Get(FFOpportunityService) .Setup(x => x.GetPagedAsync(It.IsAny(), It.IsAny(), It.IsAny())) .Returns( (pagingOptions, filters, token) => Task.FromResult(response) ); // Act var controllerResponse = await Controller.GetOpportunities(loadOptions, CancellationToken.None); // Assert controllerResponse.Should().NotBeNull(); } [Test()] public async Task GetByIdTest() { // Arrange var opportunities = DbContext.FreeFormOpportunities.ToList(); var firstOpportunity = opportunities.First(); if (firstOpportunity.Configuration == null) { var configuration = DbContext.Configurations.First(); if (configuration.FiscalMonthResolver == null) { var fmr = jazzEntityFrameworkFactory.FiscalMonthResolver; configuration.FiscalMonthResolver = fmr; } firstOpportunity.Configuration = configuration; } var dfltOpportunity = default(FFOpportunityDataModel); var fmResolver = jazzEntityFrameworkFactory.FiscalMonthResolver; Mock.Get(FFOpportunityService) .Setup(x => x.GetDataModelById(It.IsAny(), It.IsAny())) .Returns( (opportunityGuid, token) => opportunityGuid != firstOpportunity.OpportunityGuid ? Task.FromResult(dfltOpportunity) : Task.FromResult(firstOpportunity) ); var detailModel = firstOpportunity.MapToDetailModel(fmResolver); // Act var controllerResponse = await Controller.GetById(firstOpportunity.OpportunityGuid, CancellationToken.None); // Assert controllerResponse.Should().NotBeNull(); controllerResponse.Result.Should().NotBeNull(); controllerResponse.Result.Should().BeOfType(); var result = (OkObjectResult)controllerResponse.Result; result.Should().NotBeNull(); result.Should().BeOfType(); result.Value.Should().NotBeNull(); result.Value.Should().BeOfType(); var detail = (FFOpportunityDetailModel)result.Value; detail.Should().BeEquivalentTo(detailModel); } [Test()] public async Task CreateTest() { Assert.Inconclusive(); } [Test()] public async Task DeleteTest() { Assert.Inconclusive(); } [Test()] public async Task GetInitiativeTest() { Assert.Inconclusive(); } [Test()] public async Task SetGoalsAsyncTest() { Assert.Inconclusive(); } [Test()] public async Task ExportTest() { Assert.Inconclusive(); } [Test()] public async Task GetFilterOptionsAsyncTest() { Assert.Inconclusive(); } } }