public void Execute_ShouldExecuteARealQueryHandler_UsingCount()
        {
            var query = new Entity1Query { ValueLike = "Something" };
            this.factoryMock.Setup(
                x =>
                x.Get<IDbContextDatabaseQueryHandler>(
                    typeof(IDbContextDatabaseQueryHandler<Entity1Query, IDatabaseQueryParametrizedResult<Entity1>>)))
                .Returns(new Entity1QueryHandler());

            using (var context = this.CreateContext())
            {
                context.Start();
                for (var i = 0; i < 20; i++)
                {
                    context.Add(new Entity1 { Value = "Something Good " + i });
                }

                var result = context.Execute(query).Count();

                Assert.That(result, Is.EqualTo(20));
            }
        }
        public void Execute_ShouldThrowException_WhenNoQueryHandlerFound()
        {
            var query = new Entity1Query();

            using (var context = this.CreateContext())
            {
                context.Start();
                Assert.That(
                    () => context.Execute(query),
                    Throws.Exception.TypeOf<HexagonException>().With.Message.ContainsSubstring("appropriate handler"));
            }
        }
        public void Execute_ShouldExecuteARealQueryHandler_UsingPaginate()
        {
            var query = new Entity1Query { ValueLike = "Something" };
            this.factoryMock.Setup(
                x =>
                x.Get<IDbContextDatabaseQueryHandler>(
                    typeof(IDbContextDatabaseQueryHandler<Entity1Query, IDatabaseQueryParametrizedResult<Entity1>>)))
                .Returns(new Entity1QueryHandler());

            using (var context = this.CreateContext())
            {
                context.Start();
                for (var i = 0; i < 50; i++)
                {
                    context.Add(new Entity1 { Value = "Something Good " + i });
                }

                var intResult = context.Execute(query).OrderBy(x => x.Value);
                var resultPage1 = intResult.Paginate(1, 30);
                var resultPage2 = intResult.Paginate(2, 30);

                Assert.That(resultPage1.CurrentPage, Is.EqualTo(1));
                Assert.That(resultPage1.PerPage, Is.EqualTo(30));
                Assert.That(resultPage1.TotalEntries, Is.EqualTo(50));
                Assert.That(resultPage1.PageCount(), Is.EqualTo(2));
                Assert.That(resultPage1.Items.Count(), Is.EqualTo(30));

                Assert.That(resultPage2.CurrentPage, Is.EqualTo(2));
                Assert.That(resultPage2.PerPage, Is.EqualTo(30));
                Assert.That(resultPage2.TotalEntries, Is.EqualTo(50));
                Assert.That(resultPage2.PageCount(), Is.EqualTo(2));
                Assert.That(resultPage2.Items.Count(), Is.EqualTo(20));

                Assert.That(resultPage2.Items.Last().Value, Is.StringEnding(9.ToString())); // Because of sort is not using natural sort :-(
            }
        }
        public void Execute_ShouldSelectQueryHandler_AndReturnResult()
        {
            var query = new Entity1Query();
            var resultMock = new Mock<IDatabaseQueryParametrizedResult<Entity1>>();
            var queryHandler = new Mock<IDbContextDatabaseQueryHandler<Entity1Query, IDatabaseQueryParametrizedResult<Entity1>>>();
            queryHandler.Setup(x => x.Handle(query, It.IsNotNull<DbContext>())).Returns(resultMock.Object).Verifiable();
            this.factoryMock.Setup(x => x.Get<IDbContextDatabaseQueryHandler>(typeof(IDbContextDatabaseQueryHandler<Entity1Query, IDatabaseQueryParametrizedResult<Entity1>>)))
                            .Returns(queryHandler.Object)
                            .Verifiable();

            using (var context = this.CreateContext())
            {
                context.Start();
                var result = context.Execute(query);
                Assert.That(result, Is.SameAs(resultMock.Object));
                queryHandler.Verify();
                this.factoryMock.Verify();
            }
        }
        public void Execute_ShouldExecuteARealQueryHandler_UsingFirstOrDefault()
        {
            var query = new Entity1Query { ValueLike = "Something" };
            this.factoryMock.Setup(
                x =>
                x.Get<IDbContextDatabaseQueryHandler>(
                    typeof(IDbContextDatabaseQueryHandler<Entity1Query, IDatabaseQueryParametrizedResult<Entity1>>)))
                .Returns(new Entity1QueryHandler());

            using (var context = this.CreateContext())
            {
                context.Start();
                context.Add(new Entity1 { Value = "Something Good" });

                var result = context.Execute(query).FirstOrDefault();

                Assert.That(() => result.Value, Is.EqualTo("Something Good"));
            }
        }