public async Task Step2__Customer_Searches_For_Cheap_Science_Fiction_Books_About_Robots() { const decimal maxPrice = 20m; var query = new SearchBooksQuery { Genres = new List <BookGenre> { BookGenre.ScienceFiction }, SearchTerm = "robot", MaxPrice = maxPrice }; var expectedBooks = _books.Where( x => x.Title.Contains(query.SearchTerm, StringComparison.OrdinalIgnoreCase) && x.Price <= maxPrice); var booksPage = await Client.SearchBooks(query); booksPage.Items.Should().BeEquivalentTo(expectedBooks); booksPage.Items.Should().BeInAscendingOrder(x => x.Price); _selectedBooks = booksPage.Items; }
public async Task <Page <BookModel> > SearchBooks(SearchBooksQuery query) { var url = new Url("books"); if (query.Genres.Count > 0) { url.SetQueryParam(nameof(query.Genres).ToLowerInvariant(), query.Genres); } if (query.MaxPrice != null) { url.SetQueryParam(nameof(query.MaxPrice).ToLowerInvariant(), query.MaxPrice); } if (!string.IsNullOrEmpty(query.SearchTerm)) { url.SetQueryParam(nameof(query.SearchTerm).ToLowerInvariant(), query.SearchTerm); } using var response = await _httpClient.GetAsync(url); var booksPage = await SafelyReadFromJsonAsync <Page <BookModel> >(response); return(booksPage); }
public async Task <ActionResult <Page <BookModel> > > SearchBooks([FromQuery] SearchBooksQuery query) { var booksPage = await _mediator.Send(query); return(Ok(booksPage)); }
public async Task <ActionResult <SearchBooksOutputModel> > Search( [FromQuery] SearchBooksQuery query) => await this.Send(query);