public async Task Handler_Gets_Next_Page_Of_Books()
        {
            var expectedBook = _fixture
                               .Build <BookRecord>()
                               .With(book => book.Author, "Rucka")
                               .With(book => book.Title, "Wonder Woman")
                               .With(book => book.User, _testQuery.User)
                               .With(book => book.UserId, _testQuery.User.Id)
                               .Create();

            var unexpectedBook = _fixture
                                 .Build <BookRecord>()
                                 .With(book => book.Author, "Rucka")
                                 .With(book => book.Title, "Old Guard")
                                 .With(book => book.User, _testQuery.User)
                                 .With(book => book.UserId, _testQuery.User.Id)
                                 .Create();

            await _context.BookRecords.AddAsync(unexpectedBook);

            await _context.BookRecords.AddAsync(expectedBook);

            await _context.SaveChangesAsync();

            var query = new BookListGetQuery(1, 1, _testQuery.SearchQuery, _testQuery.User);

            var result = await _handler.Handle(query);

            result.Books.First().Title.Should().Be(expectedBook.Title);
        }
        public async Task Handler_Returns_Total_Books()
        {
            await InitializeRecords();

            var count = await _context.Books.CountAsync();

            var query = new BookListGetQuery(10, 0, _testQuery.SearchQuery, null);

            var result = await _handler.Handle(query);

            result.TotalCount.Should().Be(count);
        }
        public async Task Handler_Returns_Requested_Count()
        {
            await _context.BookRecords.AddAsync(_testRecord);

            await InitializeRecords();

            var request = new BookListGetQuery(1, 0, _testQuery.SearchQuery, _testQuery.User);

            var result = await _handler.Handle(request);

            result.Books.Should().HaveCount(1);
        }
        public async Task Handler_Returns_Records_When_Search_Query_Is_Empty()
        {
            await _context.BookRecords.AddAsync(_testRecord);

            await InitializeRecords();

            var request = new BookListGetQuery(1, 0, string.Empty, _testQuery.User);

            var result = await _handler.Handle(request);

            result.Books.Should().NotBeEmpty();
        }
        public BookListGetQueryHandlerTests()
        {
            _fixture = new Fixture();
            _fixture.Behaviors.Add(new OmitOnRecursionBehavior());

            _context = InitializeDatabase();

            _bookRecords = _fixture.Create <IEnumerable <BookRecord> >();
            _testQuery   = new BookListGetQuery(69, 0, string.Empty, _fixture.Create <ApplicationUser>());
            _testRecord  = _fixture
                           .Build <BookRecord>()
                           .With(book => book.User, _testQuery.User)
                           .With(book => book.UserId, _testQuery.User.Id)
                           .Create();

            _handler = new BookListGetQueryHandler(_context);
        }
        public async Task Handler_Returns_Record_With_Query_For_Title()
        {
            var record = _fixture
                         .Build <BookRecord>()
                         .With(b => b.Title, "Wonder Woman")
                         .Create();

            await _context.BookRecords.AddAsync(record);

            await InitializeRecords();

            var request = new BookListGetQuery(1, 0, record.Title, null);

            var result = await _handler.Handle(request);

            result.Books.Should().Contain(b => b.Title == record.Title);
            result.TotalCount.Should().Be(request.ItemCount);
        }