コード例 #1
0
        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
            });
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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}");
        }
コード例 #7
0
 public SearchReservationsApiRequest(string url, SearchReservationsRequest request)
 {
     _request = request;
     BaseUrl  = url;
 }