public async Task <ActionResult <List <LibraryBookDto> > > GetBooksByAuthor(GetBooksByAuthorQuery request) { var response = await Mediator.Send(request); if (response.Succeeded) { return(((QueryResult <List <LibraryBookDto> >)response).Value); } return(StatusCode(_errorToStatusCode.Convert(response.ErrorType))); }
public async Task SendNonExistingAuthor_ShouldReturnNotFoundError() { var query = new GetBooksByAuthorQuery() { AuthorName = "Not existing author", CurrentlyAvailableOnly = false }; var result = await SendAsync(query); result.Succeeded.Should().BeFalse(); result.ErrorType.Should().Equals(RequestError.NotFound); }
public async Task SendQueryWithDefaultFields_ShouldReturnValidationError() { var query = new GetBooksByAuthorQuery() { AuthorName = string.Empty, CurrentlyAvailableOnly = false }; var result = await SendAsync(query); result.Succeeded.Should().BeFalse(); result.ErrorType.Should().Be(RequestError.ValidationError); }
public async Task SendValidQuery_ShouldGetAuthorsBooks() { var neededBook_1 = await Arrange.SeedBookToLibrary(Arrange.Title, Arrange.Author_1); var neededBook_2 = await Arrange.SeedBookToLibrary(Arrange.Title + "_2", Arrange.Author_1); var otherBook_3 = await Arrange.SeedBookToLibrary(Arrange.Title + "_3", Arrange.Author_2); var query = new GetBooksByAuthorQuery() { AuthorName = Arrange.Author_1, CurrentlyAvailableOnly = false }; var result = await SendAsync(query); result.Succeeded.Should().BeTrue(); ((QueryResult <List <LibraryBookDto> >)result).Value.Should().OnlyContain(b => b.Id == neededBook_1.Id || b.Id == neededBook_2.Id); }
public BasePagedAndSortedResult <GetBookByIdResponse> Handle(GetBooksByAuthorQuery query) { using (var ctx = new BookshelfDbContext(_connectionString)) { var booksQueryable = ctx.Books .Where(q => q.AuthorId == query.AuthorId && q.IsActive) .Include(p => p.BookTags) .Select(q => new GetBookByIdResponse { Id = q.Id, Title = q.Title, MaxLoanDays = q.MaxLoanDays, Pages = q.Pages, AuthorId = q.AuthorId, BookTags = q.BookTags.Select(q => new BookTagResponse { Id = q.Id, Tag = q.Tag }).ToList() }); return(BasePagedAndSortedResult.GenerateFromQueryable(booksQueryable, query)); } }