public async Task Then_Sorts_Filters( SearchReservationsRequest request, SearchReservationsApiResponse reservationsApiResponse, [Frozen] Mock <IApiClient> mockApiClient, ReservationService handler) { var dates = new List <DateTime> { DateTime.Parse("Apr 2020"), DateTime.Parse("Sep 2010"), DateTime.Parse("Aug 2018"), DateTime.Parse("Oct 2017"), DateTime.Parse("Jul 2019") }; reservationsApiResponse.Filters.StartDateFilters = dates.Select(dt => $"{dt:MMM yyyy} to {dt.AddMonths(3):MMM yyyy}"); var expectedStartDates = dates .OrderBy(dt => dt) .Select(dt => $"{dt:MMM yyyy} to {dt.AddMonths(3):MMM yyyy}"); mockApiClient .Setup(client => client.Search <SearchReservationsApiResponse>(It.IsAny <ISearchApiRequest>())) .ReturnsAsync(reservationsApiResponse); var response = await handler.SearchReservations(request); response.EmployerFilters.Should().BeInAscendingOrder(); response.CourseFilters.Should().BeInAscendingOrder(); response.StartDateFilters.Should().BeEquivalentTo(expectedStartDates, options => options.WithStrictOrdering()); }
public async Task <SearchReservationsResponse> SearchReservations(SearchReservationsRequest filter) { var apiReservations = await _apiClient.Search <SearchReservationsApiResponse>(new SearchReservationsApiRequest(_config.Url, filter)); var result = apiReservations.Reservations.Select(apiReservation => new Reservation { Id = apiReservation.Id, AccountLegalEntityName = apiReservation.AccountLegalEntityName, AccountLegalEntityId = apiReservation.AccountLegalEntityId, CreatedDate = apiReservation.CreatedDate, StartDate = apiReservation.StartDate, ExpiryDate = apiReservation.ExpiryDate, IsExpired = apiReservation.IsExpired, Course = apiReservation.Course, Status = (ReservationStatus)apiReservation.Status, ProviderId = apiReservation.ProviderId }); return(new SearchReservationsResponse { Reservations = result, NumberOfRecordsFound = apiReservations.NumberOfRecordsFound, EmployerFilters = apiReservations.Filters.EmployerFilters?.OrderBy(s => s).ToList() ?? new List <string>(), CourseFilters = apiReservations.Filters.CourseFilters?.OrderBy(s => s).ToList() ?? new List <string>(), StartDateFilters = SortStartDateFilters(apiReservations.Filters.StartDateFilters) ?? new List <string>(), TotalReservationsForProvider = apiReservations.TotalReservationsForProvider }); }
public async Task Then_Returns_Mapped_Reservations( SearchReservationsRequest request, SearchReservationsApiResponse reservationsApiResponse, [Frozen] Mock <IApiClient> mockApiClient, ReservationService handler) { var dates = new List <DateTime> { DateTime.Parse("Apr 2020"), DateTime.Parse("Sep 2010"), DateTime.Parse("Aug 2018"), DateTime.Parse("Oct 2017"), DateTime.Parse("Jul 2019") }; reservationsApiResponse.Filters.StartDateFilters = dates.Select(dt => $"{dt:MMM yyyy} to {dt.AddMonths(3):MMM yyyy}"); mockApiClient .Setup(client => client.Search <SearchReservationsApiResponse>(It.IsAny <ISearchApiRequest>())) .ReturnsAsync(reservationsApiResponse); var response = await handler.SearchReservations(request); response.Reservations.Should().BeEquivalentTo(reservationsApiResponse.Reservations); response.TotalReservationsForProvider.Should().Be(reservationsApiResponse.TotalReservationsForProvider); response.NumberOfRecordsFound.Should().Be(reservationsApiResponse.NumberOfRecordsFound); response.EmployerFilters.Should().BeEquivalentTo(reservationsApiResponse.Filters.EmployerFilters); response.CourseFilters.Should().BeEquivalentTo(reservationsApiResponse.Filters.CourseFilters); response.StartDateFilters.Should().BeEquivalentTo(reservationsApiResponse.Filters.StartDateFilters); }
public async Task Then_Gets_Reservations_From_Api( SearchReservationsRequest searchRequest, SearchReservationsApiResponse reservationsApiResponse, [Frozen] Mock <IOptions <ReservationsApiConfiguration> > mockOptions, [Frozen] Mock <IApiClient> mockApiClient, ReservationService service) { var dates = new List <DateTime> { DateTime.Parse("Apr 2020"), DateTime.Parse("Sep 2010"), DateTime.Parse("Aug 2018"), DateTime.Parse("Oct 2017"), DateTime.Parse("Jul 2019") }; reservationsApiResponse.Filters.StartDateFilters = dates.Select(dt => $"{dt:MMM yyyy} to {dt.AddMonths(3):MMM yyyy}"); mockApiClient .Setup(client => client.Search <SearchReservationsApiResponse>(It.IsAny <ISearchApiRequest>())) .ReturnsAsync(reservationsApiResponse); await service.SearchReservations(searchRequest); mockApiClient.Verify(client => client.Search <SearchReservationsApiResponse>( It.Is <ISearchApiRequest>(request => request.SearchUrl.StartsWith(mockOptions.Object.Value.Url) && request.SearchUrl.Contains(searchRequest.ProviderId.ToString()) && request.SearchUrl.Contains(searchRequest.Filter.SearchTerm) && request.SearchUrl.Contains(searchRequest.Filter.SelectedEmployer) && request.SearchUrl.Contains(searchRequest.Filter.SelectedCourse) && request.SearchUrl.Contains(searchRequest.Filter.SelectedStartDate))), Times.Once); }
public void Then_It_Sets_The_SearchUrl( string url, SearchReservationsRequest filter) { var request = new SearchReservationsApiRequest(url, filter); request.SearchUrl.Should().Be($"{url}api/reservations/search" + $"?providerId={filter.ProviderId}" + $"&pageNumber={filter.Filter.PageNumber}" + $"&pageItemCount={filter.Filter.PageSize}" + $"&searchTerm={filter.Filter.SearchTerm}" + $"&selectedEmployer={filter.Filter.SelectedEmployer}" + $"&selectedCourse={filter.Filter.SelectedCourse}" + $"&selectedStartDate={filter.Filter.SelectedStartDate}"); }
public void And_No_SearchTerm_Or_Filters_Then_Not_In_SearchUrl( string url, SearchReservationsRequest filter) { filter.Filter.SearchTerm = null; filter.Filter.SelectedEmployer = null; filter.Filter.SelectedCourse = null; filter.Filter.SelectedStartDate = null; var request = new SearchReservationsApiRequest(url, filter); request.SearchUrl.Should().Be($"{url}api/reservations/search" + $"?providerId={filter.ProviderId}" + $"&pageNumber={filter.Filter.PageNumber}" + $"&pageItemCount={filter.Filter.PageSize}"); }
public SearchReservationsApiRequest(string url, SearchReservationsRequest request) { _request = request; BaseUrl = url; }