示例#1
0
        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)));
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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));
            }
        }