Ejemplo n.º 1
0
        public void Create_Dynamic_Search_With_Results()
        {
            AttributeTypeRegistry.SetCurrent(new CmsAttributeTypeRegistry());

            // Ensure parent exists for this test
            Hive.AutoCommitTo <IContentStore>(x => x.Repositories.Schemas.AddOrUpdate(new ContentRootSchema()));

            // Create schema
            var schema1 = Hive.Cms().NewContentType <EntitySchema, IContentStore>("homePage")
                          .Define("pageTitle", type => type.UseExistingType("singleLineTextBox"), FixedGroupDefinitions.GeneralGroup)
                          .Define("pageContent", type => type.UseExistingType("singleLineTextBox"), FixedGroupDefinitions.GeneralGroup)
                          .Commit();
            var schema2 = Hive.Cms().NewContentType <EntitySchema, IContentStore>("contentPage")
                          .Define("pageTitle", type => type.UseExistingType("singleLineTextBox"), FixedGroupDefinitions.GeneralGroup)
                          .Define("pageContent", type => type.UseExistingType("singleLineTextBox"), FixedGroupDefinitions.GeneralGroup)
                          .Commit();

            Assert.True(schema1.Success);
            Assert.True(schema2.Success);

            var item1 = new Content();

            item1.SetupFromSchema(schema1.Item);
            item1.Id             = new HiveId(Guid.NewGuid());
            item1["pageTitle"]   = "Hello There";
            item1["pageContent"] = "some page content";

            var item2 = new Content();

            item2.SetupFromSchema(schema2.Item);
            item2.Id             = new HiveId(Guid.NewGuid());
            item2["pageTitle"]   = "Title 1";
            item2["pageContent"] = "this is some page content. hi, hello, goodbye.";

            var item3 = new Content();

            item3.SetupFromSchema(schema1.Item);
            item3.Id             = new HiveId(Guid.NewGuid());
            item3["pageTitle"]   = "Another page";
            item3["pageContent"] = "Say hello to my little friend.";

            var writerResult = Hive.AutoCommitTo <IContentStore>(x =>
            {
                x.Repositories.AddOrUpdate(item1);
                x.Repositories.AddOrUpdate(item2);
                x.Repositories.AddOrUpdate(item3);
            });

            Assert.True(writerResult.WasCommitted);
            AddRevision(item1, FixedStatusTypes.Published);
            AddRevision(item2, FixedStatusTypes.Published);
            AddRevision(item3, FixedStatusTypes.Published);

            // Check can get the items normally
            using (var uow = Hive.OpenReader <IContentStore>())
            {
                Assert.True(uow.Repositories.Exists <Content>(item1.Id));
                Assert.True(uow.Repositories.Exists <Content>(item2.Id));
                Assert.True(uow.Repositories.Exists <Content>(item3.Id));
            }

            //Create a dynamic search

            var docTypes   = new[] { "homePage", "contentPage" };
            var fields     = new[] { "pageTitle", "pageContent" };
            var searchTerm = "hello";

            using (var uow = GroupUnitFactory.Create())
            {
                var predicate = ExpressionExtensions.False <TypedEntity>();
                var query     = uow.Repositories.Query();
                foreach (var d in docTypes)
                {
                    //this will add an 'AND' clause, not an 'OR' clause
                    //query = query.Where(x => x.EntitySchema.Alias == d);
                    var d1 = d;
                    predicate = predicate.Or(x => x.EntitySchema.Alias == d1);
                }
                foreach (var f in fields)
                {
                    //this will add an 'AND' clause, not an 'OR' clause
                    //query = query.Where(x => x.Attribute<string>(f) == searchTerm);
                    var f1 = f;
                    predicate = predicate.Or(x => x.Attribute <string>(f1) == searchTerm);
                }

                var result = query.Where(predicate).ToArray();

                Assert.AreEqual(3, result.Count());
            }
        }