Beispiel #1
0
        private static QueryDataSourceCommandResult ExecuteCommand(QueryDataSourceCommandInfo commandInfo, RhetosTestContainer container)
        {
            var commands    = container.Resolve <IIndex <Type, IEnumerable <ICommandImplementation> > >();
            var readCommand = (QueryDataSourceCommand)commands[typeof(QueryDataSourceCommandInfo)].Single();

            return((QueryDataSourceCommandResult)readCommand.Execute(commandInfo).Data.Value);
        }
Beispiel #2
0
        public void Filter()
        {
            using (var container = new RhetosTestContainer())
            {
                container.Resolve <ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestQueryDataStructureCommand.Source;" });
                container.Resolve <ISqlExecuter>().ExecuteSql(new[] { "a1", "b1", "b2", "c1" }
                                                              .Select(name => "INSERT INTO TestQueryDataStructureCommand.Source (Name) SELECT N'" + name + "';"));

                var info = new QueryDataSourceCommandInfo {
                    DataSource = "TestQueryDataStructureCommand.Source"
                };
                Assert.AreEqual("a1, b1, b2, c1 /4", ReportCommandResult2(container, info, true));

                info.Filter = new TestQueryDataStructureCommand.FilterByPrefix {
                    Prefix = "b"
                };
                Assert.AreEqual("b1, b2 /2", ReportCommandResult2(container, info, true));

                info.OrderByProperty = "Name";
                info.OrderDescending = true;
                Assert.AreEqual("b2, b1 /2", ReportCommandResult2(container, info));

                info.PageNumber     = 1;
                info.RecordsPerPage = 1;
                Assert.AreEqual("b2 /2", ReportCommandResult2(container, info));

                info.GenericFilter = new[] { new FilterCriteria {
                                                 Property = "Name", Operation = "Contains", Value = "1"
                                             } };
                Assert.AreEqual("b1 /1", ReportCommandResult2(container, info));
            }
        }
Beispiel #3
0
        public void QueryDataSourceCommand_OutsideInterface()
        {
            var entityRepos  = new ImplicitQueryDataSourceCommandRepository();
            var genericRepos = NewRepos(entityRepos);

            var command = new QueryDataSourceCommandInfo
            {
                GenericFilter = new[] { new FilterCriteria {
                                            Property = "Name", Operation = "StartsWith", Value = "b"
                                        } },
                OrderByProperty = "Data",
                RecordsPerPage  = 3,
                PageNumber      = 2
            };

            Assert.AreEqual("b4, b5 / 5", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));

            command = new QueryDataSourceCommandInfo
            {
                GenericFilter = new[] { new FilterCriteria {
                                            Property = "Data", Operation = "Equal", Value = "xxx"
                                        } },
                OrderByProperty = "Name",
                RecordsPerPage  = 3,
                PageNumber      = 2
            };
            Assert.AreEqual(" / 0", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));
        }
Beispiel #4
0
        public static QueryDataSourceCommandResult ExecuteQueryDataSourceCommand(
            this GenericRepository <IEntity> genericRepository,
            QueryDataSourceCommandInfo queryDataSourceCommandInfo)
        {
            queryDataSourceCommandInfo.DataSource = typeof(ServerCommandsUtilityTest.SimpleEntity).FullName;
            var commandInfo           = queryDataSourceCommandInfo.ToReadCommandInfo();
            var serverCommandsUtility = new ServerCommandsUtility(new ConsoleLogProvider(), new ApplyFiltersOnClientRead(), new DomainObjectModelMock());
            var commandResult         = serverCommandsUtility.ExecuteReadCommand(commandInfo, genericRepository);

            return(QueryDataSourceCommandResult.FromReadCommandResult(commandResult));
        }
Beispiel #5
0
        private static string ReportFilteredBrowse(RhetosTestContainer container, QueryDataSourceCommandInfo queryDataSourceCommandInfo)
        {
            queryDataSourceCommandInfo.DataSource = "TestFilter.ComposableFilterBrowse";

            return(TestUtility.DumpSorted(
                       ExecuteCommand(queryDataSourceCommandInfo, container).Records,
                       item =>
            {
                var x = (TestFilter.ComposableFilterBrowse)item;
                return x.Name + " " + (x.DebugInfoSimpleName ?? "null");
            }));
        }
Beispiel #6
0
        public void Entity()
        {
            using (var container = new RhetosTestContainer())
            {
                InitializeData(container);

                var info = new QueryDataSourceCommandInfo {
                    DataSource = "TestQueryDataStructureCommand.E"
                };
                Assert.AreEqual("a, b, c, d, e /5", ReportCommandResult(container, info, true));
            }
        }
Beispiel #7
0
        public void QueryDataSourceCommand()
        {
            var entityRepos  = new ImplicitQueryDataSourceCommandRepository();
            var genericRepos = NewRepos(entityRepos);

            var command = new QueryDataSourceCommandInfo
            {
                GenericFilter = new[] { new FilterCriteria {
                                            Property = "Name", Operation = "StartsWith", Value = "b"
                                        } },
                OrderByProperty = "Name",
                RecordsPerPage  = 3,
                PageNumber      = 2
            };

            Assert.AreEqual("a1, b1, b2 / 10", Dump(NewRepos(new ExplicitQueryDataSourceCommandRepository()).ExecuteQueryDataSourceCommand(command)));
            Assert.AreEqual(0, entityRepos.DropQueryCount());
            Assert.AreEqual("b4, b5 / 5", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));
            Assert.AreEqual(2, entityRepos.DropQueryCount()); // Paging should result with two queries: selecting items and count.

            command = new QueryDataSourceCommandInfo();
            Assert.AreEqual("a1, b1, b2, b3, b4, b5 / 6", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));
            Assert.AreEqual(1, entityRepos.DropQueryCount()); // Without paging, there is no need for two queries.

            command = new QueryDataSourceCommandInfo {
                Filter = "1"
            };
            Assert.AreEqual("a1, b1 / 2", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));
            Assert.AreEqual(1, entityRepos.DropQueryCount()); // Without paging, there is no need for two queries.

            command = new QueryDataSourceCommandInfo {
                Filter = "1", GenericFilter = new[] { new FilterCriteria {
                                                          Property = "Name", Operation = "StartsWith", Value = "b"
                                                      } }
            };
            Assert.AreEqual("b1 / 1", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));
            Assert.AreEqual(1, entityRepos.DropQueryCount()); // Without paging, there is no need for two queries.

            command = new QueryDataSourceCommandInfo {
                Filter = "1", GenericFilter = new[] { new FilterCriteria {
                                                          Filter = "System.String", Value = "b"
                                                      } }
            };
            Assert.AreEqual("b1 / 1", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));
            Assert.AreEqual(1, entityRepos.DropQueryCount()); // Without paging, there is no need for two queries.

            command = new QueryDataSourceCommandInfo {
                Filter = "b", PageNumber = 2, RecordsPerPage = 2, OrderByProperty = "Name"
            };
            Assert.AreEqual("b3, b4 / 5", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));
            Assert.AreEqual(1, entityRepos.DropQueryCount()); // Enumerable filter will cause GenericRepository to materialize of the query, so it will be executed only once even though the paging is used.
        }
Beispiel #8
0
        public void Ordering()
        {
            using (var container = new RhetosTestContainer())
            {
                InitializeData(container);

                var info = new QueryDataSourceCommandInfo
                {
                    DataSource      = "TestQueryDataStructureCommand.E",
                    OrderByProperty = "Name",
                    OrderDescending = true
                };
                Assert.AreEqual("e, d, c, b, a /5", ReportCommandResult(container, info));
            }
        }
Beispiel #9
0
        public void GenericFilter()
        {
            using (var container = new RhetosTestContainer())
            {
                InitializeData(container);

                var info = new QueryDataSourceCommandInfo
                {
                    DataSource    = "TestQueryDataStructureCommand.E",
                    GenericFilter = new [] { new FilterCriteria {
                                                 Property = "Name", Operation = "NotEqual", Value = "c"
                                             } }
                };
                Assert.AreEqual("a, b, d, e /4", ReportCommandResult(container, info, true));
            }
        }
Beispiel #10
0
        public void PagingWithoutOrder()
        {
            using (var container = new RhetosTestContainer())
            {
                InitializeData(container);

                var info = new QueryDataSourceCommandInfo
                {
                    DataSource     = "TestQueryDataStructureCommand.E",
                    RecordsPerPage = 3,
                    PageNumber     = 2
                };

                TestUtility.ShouldFail(() => ReportCommandResult(container, info), "Sort order must be set if paging is used");
            }
        }
Beispiel #11
0
        public void QueryDataSourceCommand_Null()
        {
            var entityRepos  = new ImplicitQueryDataSourceCommandRepository();
            var genericRepos = NewRepos(entityRepos);

            var command = new QueryDataSourceCommandInfo
            {
                GenericFilter = new[] { new FilterCriteria {
                                            Property = "Data", Operation = "Equal", Value = null
                                        } },
                OrderByProperty = "Name",
                RecordsPerPage  = 3,
                PageNumber      = 2
            };

            Assert.AreEqual("b3, b4, b5 / 6", Dump(genericRepos.ExecuteQueryDataSourceCommand(command)));
        }
Beispiel #12
0
        private static string ReportCommandResult(RhetosTestContainer container, QueryDataSourceCommandInfo info, bool sort = false)
        {
            var commands = container.Resolve <IIndex <Type, IEnumerable <ICommandImplementation> > >();
            var queryDataSourceCommand = (QueryDataSourceCommand)commands[typeof(QueryDataSourceCommandInfo)].Single();

            var result = (QueryDataSourceCommandResult)queryDataSourceCommand.Execute(info).Data.Value;
            var items  = ((IEnumerable <TestQueryDataStructureCommand.E>)result.Records).Select(item => item.Name);

            if (sort)
            {
                items = items.OrderBy(x => x);
            }
            var report = string.Join(", ", items) + " /" + result.TotalRecords;

            Console.WriteLine(report);
            return(report);
        }
Beispiel #13
0
        public void GenericFilterWithPaging()
        {
            using (var container = new RhetosTestContainer())
            {
                InitializeData(container);

                var info = new QueryDataSourceCommandInfo
                {
                    DataSource    = "TestQueryDataStructureCommand.E",
                    GenericFilter = new [] { new FilterCriteria {
                                                 Property = "Name", Operation = "NotEqual", Value = "c"
                                             } },
                    RecordsPerPage  = 2,
                    PageNumber      = 2,
                    OrderByProperty = "Name"
                };
                Assert.AreEqual("d, e /4", ReportCommandResult(container, info));
            }
        }