using Strata.ApiCommunication.Http; using Strata.ApiLib.Standard.Models; using Strata.ContinuousImprovement.Biz.Generics; using System.Diagnostics.CodeAnalysis; using System.Net.Http.Json; namespace Strata.ContinuousImprovement.Api.Test.Integration.Tests { [ExcludeFromCodeCoverage] [TestFixture(Category = "Integration")] public class TestAllOpportunitiesController : ApiTestBase { protected const string AllOpportunitiesEndpoint = "api/v1/all-opportunities"; [Test] public async Task TestGetAllOportunitiesFromApi() { // arrange var configurations = await GetConfigurations(); var configuration = configurations.First(); var loadOptions = new Controllers.AllOpportunityLoadOptions { Filters = new Biz.All.Opportunities.Filters.AllFilters { ConfigurationGuid = configuration.ConfigurationGuid, OpportunityTypes = [ $"{(int)OpportunityTypes.Encounter}", $"{(int) OpportunityTypes.QualityVariation}", $"{(int) OpportunityTypes.Variation}", ], ViewVisible = true }, PagingOptions = new Biz.Pagination.PagingOptions { First = 0, Rows = 100, SortOrder = Biz.Pagination.SortOrder.Desc, SortField = "IdentifiedSavings" } }; var request = new HttpRequestMessage(HttpMethod.Post, AllOpportunitiesEndpoint); // act await request.SetContentAsJsonAsync(loadOptions); var response = await HttpClient.SendAsync(request, CancellationToken.None); response.EnsureSuccessStatusCode(); // assert Assert.Multiple(() => { var opportunitiesPage = new PagedApiResponse(); Assert.DoesNotThrowAsync(async () => opportunitiesPage = await response.Content.ReadFromJsonAsync>()); response.AssertIsValid(); Assert.That(opportunitiesPage.Data, Is.Not.Empty); Assert.That(opportunitiesPage.Data.Count, Is.LessThanOrEqualTo(loadOptions.PagingOptions.Rows)); Assert.That(opportunitiesPage.Data.Any(opp => opp.OpportunityType == (int)OpportunityTypes.Encounter || opp.OpportunityType == (int)OpportunityTypes.QualityVariation || opp.OpportunityType == (int)OpportunityTypes.Variation), Is.True); Assert.That(opportunitiesPage.PagingInfo.ResultsPerPage, Is.LessThanOrEqualTo(loadOptions.PagingOptions.Rows)); }); } } }