public async Task RetrieveAsync_ShouldRunPredicateValidation()
        {
            //arrange
            var predicates = new Expression <Func <FakeProjection, bool> >[] {
                ((p) => p.Id + p.Id == 3)
            };
            //act
            AsyncTestDelegate action = async() => await _dataRetriever.RetrieveAsync(predicates, new[] { Sorting <FakeProjection> .Ascending(c => c.Id) });

            //assert
            Assert.AreEqual("predicates[0]",
                            Assert.ThrowsAsync <ArgumentException>(action).ParamName);
        }
        public async Task RetrieveAsync_ShouldReturnEmptyDataPage()
        {
            //arrange
            var dataRetriever = new InMemoryDataRetriever <FakeProjection>(Enumerable.Empty <FakeProjection>());
            var predicates    = Enumerable.Empty <Expression <Func <FakeProjection, bool> > >();

            //act
            var result = await dataRetriever.RetrieveAsync(predicates, new [] { Sorting <FakeProjection> .Ascending(c => c.Id) });

            //assert
            Assert.IsNotNull(result);
            Assert.AreEqual(0, result.TotalRecords);
            Assert.AreEqual(0, result.Data.Count());
        }