public async Task TestPageOk(int pageSize, int pageNum)  //pageNum starts at 1
        {
            //SETUP
            pageSize.ShouldBeInRange(1, 1000);
            using (var context = new NoSqlDbContext(_options))
            {
                var service = new ListNoSqlBooksService(context);

                //ATTEMPT
                var filterPageOptions = new NoSqlSortFilterPageOptions
                {
                    OrderByOptions = OrderByOptions.ByPriceLowestFirst,
                    PageSize       = pageSize,
                    PageNum        = pageNum
                };
                var temp = await service.SortFilterPageAsync(filterPageOptions); //to set the PrevCheckState

                filterPageOptions.PageNum = pageNum;
                var books = await service.SortFilterPageAsync(filterPageOptions);

                //VERIFY
                books.Count.ShouldEqual(Math.Min(pageSize, books.Count));
                books.First().ActualPrice.ShouldEqual(1 + pageSize * (pageNum - 1));
            }
        }
        public async Task TestOrderByOk(OrderByOptions orderBy)
        {
            //SETUP
            using (var context = new NoSqlDbContext(_options))
            {
                var service = new ListNoSqlBooksService(context);

                //ATTEMPT
                var books = await(service.SortFilterPageAsync(new NoSqlSortFilterPageOptions
                {
                    OrderByOptions = orderBy
                }));

                //VERIFY
                books.Any().ShouldBeTrue();
            }
        }
        public async Task TestFilterDatesFutureOk()
        {
            //SETUP
            using (var context = new NoSqlDbContext(_options))
            {
                var service = new ListNoSqlBooksService(context);

                //ATTEMPT
                var books = await service.SortFilterPageAsync(new NoSqlSortFilterPageOptions
                {
                    OrderByOptions = OrderByOptions.ByPublicationDate,
                    FilterBy       = BooksFilterBy.ByPublicationYear,
                    FilterValue    = "Coming Soon"
                });

                //VERIFY
                books.All(x => x.PublishedOn > DateTime.UtcNow).ShouldBeTrue();
            }
        }
        public async Task TestFilterVotesOk()
        {
            //SETUP
            var year = DddEfTestData.DummyBookStartDate.AddYears(5).Year;

            using (var context = new NoSqlDbContext(_options))
            {
                var service = new ListNoSqlBooksService(context);

                //ATTEMPT
                var books = await service.SortFilterPageAsync(new NoSqlSortFilterPageOptions
                {
                    OrderByOptions = OrderByOptions.ByVotes,
                    FilterBy       = BooksFilterBy.ByVotes,
                    FilterValue    = "2"
                });

                //VERIFY
                books.All(x => x.ReviewsAverageVotes > 2).ShouldBeTrue();
            }
        }
        public async Task TestFilterDatesOk()
        {
            //SETUP
            var year = Math.Min(DateTime.UtcNow.Year, DddEfTestData.DummyBookStartDate.AddYears(5).Year);

            using (var context = new NoSqlDbContext(_options))
            {
                var service = new ListNoSqlBooksService(context);

                //ATTEMPT
                var books = await service.SortFilterPageAsync(new NoSqlSortFilterPageOptions
                {
                    OrderByOptions = OrderByOptions.ByPublicationDate,
                    FilterBy       = BooksFilterBy.ByPublicationYear,
                    FilterValue    = year.ToString()
                });

                //VERIFY
                books.Single().PublishedOn.Year.ShouldEqual(year);
            }
        }