コード例 #1
0
        private CheckFieldResult CheckField(string contentTypeName, string fieldName, string fieldType)
        {
            var result = CheckFieldResult.NoError;

            try
            {
                ContentTypeInstaller.InstallContentType($@"<?xml version='1.0' encoding='utf-8'?>
<ContentType name='{contentTypeName}' parentType='GenericContent'
         handler='{typeof(GenericContent).FullName}' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition'>
    <Fields>
        <Field name='{fieldName}' type='{fieldType}'/>
    </Fields>
</ContentType>
");
            }
            catch (Exception e)
            {
                result = CheckFieldResult.CtdError;
            }

            var contentType = ContentType.GetByName(contentTypeName);

            if (contentType != null)
            {
                ContentTypeInstaller.RemoveContentType(contentTypeName);
            }

            return(result);
        }
コード例 #2
0
        //[TestMethod]/
        public void Indexing_Choice_Enum_NotLocalized()
        {
            Test(() =>
            {
                ContentTypeInstaller.InstallContentType(_choiceFieldIndexingTestContentType);
                var root = CreateTestRoot();

                var contents = Enum.GetValues(typeof(TestEnum1ForChoiceField))
                               .OfType <TestEnum1ForChoiceField>()
                               .Select(x =>
                {
                    var content            = Content.CreateNew("ChoiceFieldIndexingTestContentType", root, $"Content_{x}");
                    content["Choice_Enum"] = (int)x;
                    content.Save();
                    return(content);
                }).ToArray();

                var result1 =
                    CreateSafeContentQuery($"Choice_Enum:${(int)TestEnum1ForChoiceField.Enum1Value2}")
                    .Execute();
                var result2 =
                    CreateSafeContentQuery($"Choice_Enum:{TestEnum1ForChoiceField.Enum1Value2.ToString()}")
                    .Execute();

                Assert.AreEqual(1, result1.Count);
                Assert.AreEqual(1, result2.Count);
            });
        }
コード例 #3
0
        public void ContentType_Complex_RemoveProperty()
        {
            Test(() =>
            {
                ContentTypeInstaller.InstallContentType(CtdComplex);

                var cb = new ContentTypeBuilder(null);

                cb.Type("ComplexTestContent")
                .Field("TestCount")
                .RemoveProperty("Indexing");

                cb.Apply();

                AssertContentTypeXml("ComplexTestContent", (document, manager) =>
                {
                    // the field should remain in the ctd
                    var field = document.SelectSingleNode("ns:ContentType/ns:Fields/ns:Field[@name='TestCount']", manager);
                    Assert.IsNotNull(field);

                    var childNode = field.SelectSingleNode("ns:Indexing", manager);

                    // the Indexing node should have been removed
                    Assert.IsNull(childNode, "The Indexing node should not be there anymore.");
                });
            });
        }
コード例 #4
0
        public void ContentType_Complex_RemoveConfig_Empty()
        {
            Test(() =>
            {
                ContentTypeInstaller.InstallContentType(CtdComplex);

                var cb = new ContentTypeBuilder(null);

                cb.Type("ComplexTestContent")
                .Field("TestCount")
                .RemoveConfiguration("VisibleBrowse")
                .RemoveConfiguration("DefaultValue");

                cb.Apply();

                AssertContentTypeXml("ComplexTestContent", (document, manager) =>
                {
                    // the field should remain in the ctd
                    var field = document.SelectSingleNode("ns:ContentType/ns:Fields/ns:Field[@name='TestCount']", manager);
                    Assert.IsNotNull(field);

                    var configNode = field.SelectSingleNode("ns:Configuration", manager);

                    // the config node should have been removed
                    Assert.IsNull(configNode, "The Configuration node should not be there anymore.");
                });
            });
        }
コード例 #5
0
        public void ContentType_Complex_RemoveConfig()
        {
            Test(() =>
            {
                ContentTypeInstaller.InstallContentType(CtdComplex);

                var fs1 = ContentType.GetByName("ComplexTestContent").FieldSettings.Single(fs => fs.Name == "TestCount");
                Assert.AreEqual("123", fs1.DefaultValue);

                var cb = new ContentTypeBuilder(null);

                cb.Type("ComplexTestContent")
                .Field("TestCount")
                .RemoveConfiguration("Unknown")
                .RemoveConfiguration("DefaultValue");

                cb.Apply();

                fs1 = ContentType.GetByName("ComplexTestContent").FieldSettings.Single(fs => fs.Name == "TestCount");
                Assert.AreEqual(null, fs1.DefaultValue);

                // the other config value is intact
                Assert.AreEqual(FieldVisibility.Hide, fs1.VisibleBrowse);
            });
        }
コード例 #6
0
        public void Apply()
        {
            // Execute field type changes first so that subsequent field operations
            // are performed on the new field.
            foreach (var changedFieldType in ChangedFieldTypes)
            {
                ChangeFieldTypeInternal(changedFieldType.Key, changedFieldType.Value);
            }

            foreach (var ctdBuilder in ContentTypeBuilders)
            {
                var ct = ContentType.GetByName(ctdBuilder.ContentTypeName);
                if (ct == null)
                {
                    _logger.LogWarning($"Content type {ctdBuilder.ContentTypeName} does not exist.");
                    continue;
                }

                var ctdXml = LoadContentTypeXmlDocument(ct);

                EditContentTypeHeader(ctdXml, ctdBuilder);

                foreach (var fieldEditor in ctdBuilder.FieldEditors)
                {
                    EditField(ctdXml, fieldEditor);
                }

                // apply changes
                ContentTypeInstaller.InstallContentType(ctdXml.OuterXml);
            }
        }
コード例 #7
0
        public void ContentType_MorePermissiveLoad_MissingContentHandler_Load()
        {
            Test(() =>
            {
                var ctd0 = @"<ContentType name=""MyType1"" parentType=""GenericContent"" handler=""SenseNet.ContentRepository.GenericContent"" xmlns=""http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition"">
  <Fields>
    <Field name=""Field1"" type=""ShortText""></Field>
  </Fields>
</ContentType>";
                var ctd1 = @"<ContentType name=""MyType1"" parentType=""GenericContent"" handler=""MyType"" xmlns=""http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition"">
  <Fields>
    <Field name=""Field1"" type=""ShortText""></Field>
  </Fields>
</ContentType>";

                // ARRANGE
                ContentTypeInstaller.InstallContentType(ctd0);

                var myType = ContentType.GetByName("MyType1");
                Assert.IsNotNull(myType);
                Assert.IsNotNull(myType.FieldSettings.FirstOrDefault(x => x.Name == "Field1"));

                HackDatabaseForMorePermissiveLoadTest("MyType1", ctd0, ctd1);

                // ACTION: Reload schema from the database.
                Cache.Reset();
                ContentTypeManager.Reload();

                // ASSERT: the ContentType is loaded but invalid.
                var myType1 = ContentType.GetByName("MyType1");
                Assert.AreEqual(ctd1, myType1.ToXml());
                Assert.IsTrue(myType1.IsInvalid);
            });
        }
コード例 #8
0
ファイル: Initializer.cs プロジェクト: pchaozhong/FlexNet
        private static void PatchSystemFolder_Add(string typeName, params string[] additionalContentTypeNames)
        {
            var ct    = ContentType.GetByName(typeName);
            var xml   = new XmlDocument();
            var nsmgr = new XmlNamespaceManager(xml.NameTable);

            nsmgr.AddNamespace("x", ContentType.ContentDefinitionXmlNamespace);
            xml.Load(ct.Binary.GetStream());
            var list    = new List <string>();
            var element = (XmlElement)xml.DocumentElement.SelectSingleNode("x:AllowedChildTypes", nsmgr);

            if (element == null)
            {
                var fieldsElement = (XmlElement)xml.DocumentElement.SelectSingleNode("x:Fields", nsmgr);
                //if (fieldsElement == null)
                //{
                //}
                element = xml.CreateElement("", "AllowedChildTypes", ContentType.ContentDefinitionXmlNamespace);
                xml.DocumentElement.InsertBefore(element, fieldsElement);
            }
            else
            {
                list.AddRange(element.InnerXml.Split(" \t\r\n,;".ToCharArray(), System.StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()));
            }

            if (additionalContentTypeNames != null && additionalContentTypeNames.Length > 0)
            {
                list.AddRange(additionalContentTypeNames);
            }
            element.InnerText = string.Join(" ", list);

            ContentTypeInstaller.InstallContentType(xml.OuterXml);
        }
コード例 #9
0
        public void NodeEvent_OverriddenCreating()
        {
            if (ActiveSchema.NodeTypes[EventTestNode.DefaultNodeTypeName] == null)
            {
                ContentTypeInstaller.InstallContentType(EventTestNode.ContentTypeDefinition);
            }
            _eventLog = new StringBuilder();

            Node node = NodeType.CreateInstance(EventTestNode.DefaultNodeTypeName, _testRoot);

            node.Creating += new CancellableNodeEventHandler(Node_OverriddenCreating);

            try
            {
                node.Save();
            }
            catch (CancelNodeEventException e)
            {
                LogEvent(e.Data["CancelMessage"].ToString());
            }

            node.Index = 12;
            node.Save();
            node.Creating -= new CancellableNodeEventHandler(Node_OverriddenCreating);

            string expectedLog = String.Concat("Index cannot be 0", Environment.NewLine, "Node_OverriddenCreating", Environment.NewLine);

            Assert.IsTrue(_eventLog.ToString() == expectedLog);
        }
コード例 #10
0
        public void Indexing_Json_IndexHandler()
        {
            Test(() =>
            {
                ContentTypeInstaller.InstallContentType(_jsonFieldIndexingTestContentType);

                var root = CreateTestRoot();
                var tc1  = Content.CreateNew("JsonFieldIndexingTestContentType", root, "JC1");
                tc1["JsonExtrafield1"] = Json1;
                tc1.Save();

                var indexFields = tc1.Fields["JsonExtrafield1"].GetIndexFields(out var textExtract).ToArray();
                var indexValues = indexFields.Single().StringArrayValue;

                Assert.AreEqual("string#abc", indexValues[0]);
                Assert.AreEqual("int#123", indexValues[1]);
                Assert.AreEqual("object#p1#def", indexValues[2]);
                Assert.AreEqual("object#p2#456", indexValues[3]);
                Assert.AreEqual("o2#null", indexValues[4]);

                // create another content with a different json to check querying
                var tc2 = Content.CreateNew("JsonFieldIndexingTestContentType", root, "JC2");
                tc2["JsonExtrafield1"] = Json2;
                tc2.Save();

                var query = CreateSafeContentQuery("JsonExtrafield1:String#abc", QuerySettings.AdminSettings).Execute();

                Assert.AreEqual(tc1.Id, query.Identifiers.Single());

                query = CreateSafeContentQuery("JsonExtrafield1:object#p2#123", QuerySettings.AdminSettings).Execute();

                Assert.AreEqual(tc2.Id, query.Identifiers.Single());
            });
        }
コード例 #11
0
        public void Search_ReferenceField()
        {
            IntegrationTest(() =>
            {
                ContentTypeInstaller.InstallContentType(CtdSearchTestReference);

                var parent  = RepositoryTools.CreateStructure("/Root/" + Guid.NewGuid(), "SystemFolder");
                var folder1 = Content.CreateNew("Folder", parent.ContentHandler, "f1");
                folder1.SaveSameVersion();
                var folder2 = Content.CreateNew("Folder", parent.ContentHandler, "f2");
                folder2.SaveSameVersion();
                var folder3 = Content.CreateNew("Folder", parent.ContentHandler, "f3");
                folder3.SaveSameVersion();

                var content1 = Content.CreateNew("GenericContentWithReferenceTest", parent.ContentHandler, "content1");

                content1["SearchTestReference"] = new[]
                {
                    folder1.ContentHandler, folder2.ContentHandler, folder3.ContentHandler
                };
                content1.SaveSameVersion();

                // find content by the reference field
                var result1 = CreateSafeContentQuery($"+SearchTestReference:{folder1.Id}").Execute().Nodes.FirstOrDefault();
                var result2 = CreateSafeContentQuery($"+SearchTestReference:{folder2.Id}").Execute().Nodes.FirstOrDefault();
                var result3 = CreateSafeContentQuery($"+SearchTestReference:{folder3.Id}").Execute().Nodes.FirstOrDefault();

                Assert.IsNotNull(result1);
                Assert.IsNotNull(result2);
                Assert.IsNotNull(result3);
                Assert.AreEqual(content1.Id, result1.Id);
                Assert.AreEqual(content1.Id, result2.Id);
                Assert.AreEqual(content1.Id, result3.Id);
            });
        }
コード例 #12
0
        public void ContentType_FullInstall_InheritedClass_ChangeHandlers2()
        {
            //-- Step 1: Install TestNode10 and TestNode11 content types with TestNode10 and TestNode11 handlers

            string contentTypeADef = @"<?xml version='1.0' encoding='utf-8'?>
							<ContentType name='TestNode10' handler='SenseNet.ContentRepository.Tests.ContentHandlers.TestNode10' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition'>
								<Fields>
									<Field name='X' type='Integer' />
								</Fields>
							</ContentType>"                            ;

            string contentTypeBDef = @"<?xml version='1.0' encoding='utf-8'?>
							<ContentType name='TestNode11' parentType='TestNode10' handler='SenseNet.ContentRepository.Tests.ContentHandlers.TestNode11' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition'>
								<Fields>
									<Field name='Y' type='Integer' />
								</Fields>
							</ContentType>"                            ;

            ContentTypeInstaller installer = ContentTypeInstaller.CreateBatchContentTypeInstaller();

            installer.AddContentType(contentTypeADef);
            installer.AddContentType(contentTypeBDef);
            installer.ExecuteBatch();

            //-- Step 2: change handler of TestNode10 to unknown in the database directly

            ContentTypeManager.Reset();

            Content content = Content.CreateNew("TestNode10", this.TestRoot, "TestNode10unknown");
        }
コード例 #13
0
        public void Indexing_Choice_ExplicitValues()
        {
            Test(() =>
            {
                ContentTypeInstaller.InstallContentType(_choiceFieldIndexingTestContentType);
                var root = CreateTestRoot();

                var contents = (new[] { ExplicitKey0, ExplicitKey1, ExplicitKey2 })
                               .Select(x =>
                {
                    var content = Content.CreateNew("ChoiceFieldIndexingTestContentType", root, $"Content_{x}");
                    content["Choice_ExplicitValues"] = x;
                    content.Save();
                    return(content);
                }).ToArray();

                var result1 =
                    CreateSafeContentQuery($"Choice_ExplicitValues:${ExplicitKey1}")
                    .Execute();
                var result2 =
                    CreateSafeContentQuery($"Choice_ExplicitValues:{ExplicitValue1}")
                    .Execute();

                Assert.AreEqual(1, result1.Count);
                Assert.AreEqual(1, result2.Count);
            });
        }
コード例 #14
0
        public void ContentType_Inheritance_T2addT4add()
        {
            //  Index   Type  OwnerIndex  ParentIndex
            //  0:      T1	  -			  -
            //  1:      T2	  1           -
            //  2:      T3    1           -
            //  3:      T4    3           1
            //  4:      T5    3           -

            Test(() =>
            {
                CreateStartStructure();
                ContentTypeInstaller.InstallContentType(CreateCtd(2, true, false), //T2+
                                                        CreateCtd(4, true, true)); //T4+
                FieldSetting[] fields;
                ContentType[] types = GetTestContentTypes(out fields);

                Assert.IsNull(fields[0], "#01");
                Assert.IsNotNull(fields[1], "#02");
                Assert.IsNotNull(fields[2], "#03");
                Assert.IsNotNull(fields[3], "#04");
                Assert.IsNotNull(fields[4], "#05");

                Assert.IsTrue(ReferenceEquals(fields[1].Owner, types[1]), "#10");
                Assert.IsTrue(ReferenceEquals(fields[3].Owner, types[3]), "#11");

                Assert.IsTrue(ReferenceEquals(fields[2], fields[1]), "#20");
                Assert.IsTrue(ReferenceEquals(fields[3].ParentFieldSetting, fields[1]), "#21");
                Assert.IsTrue(ReferenceEquals(fields[4], fields[3]), "#22");
            });
        }
コード例 #15
0
        public void ClientMetadataProvider_NewType()
        {
            var contentTypeName = System.Reflection.MethodBase.GetCurrentMethod().Name;
            var fieldName1      = "Field123456";

            Test(() =>
            {
                var myType = ContentType.GetByName(contentTypeName);

                Assert.IsNull(myType);

                // register a new content type
                ContentTypeInstaller.InstallContentType($@"<?xml version='1.0' encoding='utf-8'?>
                <ContentType name='{contentTypeName}' parentType='GenericContent'
                         handler='{typeof(GenericContent).FullName}' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition'>
                    <Fields>
                        <Field name='{fieldName1}' type='ShortText'></Field>
                    </Fields>
                </ContentType>
                ");

                // this should return the new type now
                myType = ContentType.GetByName(contentTypeName);

                var myClass      = new Class(myType);
                var myTypeObject = ClientMetadataProvider.Instance.GetClientMetaClass(myClass) as JObject;

                Assert.IsNotNull(myTypeObject);
                Assert.AreEqual(contentTypeName, myTypeObject["ContentTypeName"].Value <string>());

                var field = myTypeObject["FieldSettings"].Values <JToken>().First(f => f["Name"].Value <string>() == fieldName1);

                Assert.AreEqual("ShortTextFieldSetting", field["Type"].Value <string>());
            });
        }
コード例 #16
0
        private static void EnsureReferenceTestStructure(Node testRoot)
        {
            if (ContentType.GetByName(typeof(OData_ReferenceTest_ContentHandler).Name) == null)
            {
                ContentTypeInstaller.InstallContentType(OData_ReferenceTest_ContentHandler.CTD);
            }

            if (ContentType.GetByName(typeof(OData_Filter_ThroughReference_ContentHandler).Name) == null)
            {
                ContentTypeInstaller.InstallContentType(OData_Filter_ThroughReference_ContentHandler.CTD);
            }

            var referrerContent = Content.Load(RepositoryPath.Combine(testRoot.Path, "Referrer"));

            if (referrerContent == null)
            {
                var nodes = new Node[5];
                for (int i = 0; i < nodes.Length; i++)
                {
                    var content = Content.CreateNew("OData_Filter_ThroughReference_ContentHandler", testRoot, "Referenced" + i);
                    content.Index = i + 1;
                    content.Save();
                    nodes[i] = content.ContentHandler;
                }

                referrerContent = Content.CreateNew("OData_Filter_ThroughReference_ContentHandler", testRoot, "Referrer");
                var referrer = (OData_Filter_ThroughReference_ContentHandler)referrerContent.ContentHandler;
                referrer.References = nodes;
                referrerContent.Save();
            }
        }
コード例 #17
0
        public void ContentType_Inheritance_T2addT4addT1addT2delT1del()
        {
            //  Index   Type  OwnerIndex  ParentIndex
            //  0:      T1	  -			  -
            //  1:      T2	  -           -
            //  2:      T3    -           -
            //  3:      T4    3           -
            //  4:      T5    3           -

            ContentTypeInstaller.InstallContentType(CreateCtd(2, true, true),                //T2+
                                                    CreateCtd(4, true, true),                //T4+
                                                    CreateCtd(1, true, false));              //T1+
            ContentTypeInstaller.InstallContentType(CreateCtd(2, false, false),              //T2-
                                                    CreateCtd(1, false, false),              //T1-
                                                    CreateCtd(4, true, false));

            FieldSetting[] fields;
            ContentType[]  types = GetTestContentTypes(out fields);

            Assert.IsNull(fields[0], "#01");
            Assert.IsNull(fields[1], "#02");
            Assert.IsNull(fields[2], "#03");
            Assert.IsNotNull(fields[3], "#04");
            Assert.IsNotNull(fields[4], "#05");

            Assert.IsTrue(ReferenceEquals(fields[3].Owner, types[3]), "#10");

            Assert.IsTrue(ReferenceEquals(fields[4], fields[3]), "#20");
        }
コード例 #18
0
        public void Step_DeleteContentType_Subtree()
        {
            var contentTypeTemplate =
                @"<?xml version='1.0' encoding='utf-8'?><ContentType name='{0}' parentType='Car' handler='SenseNet.ContentRepository.GenericContent' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition' />";

            Test(() =>
            {
                // init
                var contentTypeCount = GetContentTypeCount();
                InstallCarContentType();
                ContentTypeInstaller.InstallContentType(
                    string.Format(contentTypeTemplate, "Car1"),
                    string.Format(contentTypeTemplate, "Car2"));
                Assert.IsNotNull(ContentType.GetByName("Car"));
                Assert.IsNotNull(ContentType.GetByName("Car1"));
                Assert.IsNotNull(ContentType.GetByName("Car2"));
                Assert.AreEqual(contentTypeCount + 3, GetContentTypeCount());

                // test
                var step = new DeleteContentType {
                    Name = "Car", Delete = DeleteContentType.Mode.Force
                };
                step.Execute(GetExecutionContext());

                // check
                Assert.IsNull(ContentType.GetByName("Car"));
                Assert.IsNull(ContentType.GetByName("Car1"));
                Assert.IsNull(ContentType.GetByName("Car2"));
                Assert.AreEqual(contentTypeCount, GetContentTypeCount());
            });
        }
コード例 #19
0
        public void CrossDomain_ContentType_InstallAndRemove()
        {
            DistributedApplication.ClusterChannel.Purge();

            if (ContentType.GetByName("CrossTestType") != null)
            {
                ContentTypeInstaller.RemoveContentType("CrossTestType");
            }

            var a = AllEngine_GetContentTypeCount();

            ContentTypeInstaller.InstallContentType(@"<?xml version='1.0' encoding='utf-8'?>
				<ContentType name='CrossTestType' parentType='GenericContent' handler='SenseNet.ContentRepository.GenericContent' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition'>
				</ContentType>"                );

            var b = AllEngine_GetContentTypeCount();

            ContentTypeInstaller.RemoveContentType("CrossTestType");

            var c = AllEngine_GetContentTypeCount();

            DistributedApplication.ClusterChannel.Purge();

            Assert.IsTrue(a.Distinct().Count <int>() == 1, "#1");
            Assert.IsTrue(b.Distinct().Count <int>() == 1, "#2");
            Assert.IsTrue(c.Distinct().Count <int>() == 1, "#3");
            Assert.IsTrue(a[0] == b[0] - 1, "#4");
            Assert.IsTrue(a[0] == c[0], "#5");
        }
コード例 #20
0
ファイル: Initializer.cs プロジェクト: pchaozhong/FlexNet
        private static void PatchSystemFolder_All(string typeName, params string[] additionalContentTypeNames)
        {
            var ct    = ContentType.GetByName(typeName);
            var xml   = new XmlDocument();
            var nsmgr = new XmlNamespaceManager(xml.NameTable);

            nsmgr.AddNamespace("x", ContentType.ContentDefinitionXmlNamespace);
            xml.Load(ct.Binary.GetStream());
            var element = (XmlElement)xml.DocumentElement.SelectSingleNode("x:AllowedChildTypes", nsmgr);

            if (element == null)
            {
                var fieldsElement = (XmlElement)xml.DocumentElement.SelectSingleNode("x:Fields", nsmgr);
                element = xml.CreateElement("", "AllowedChildTypes", ContentType.ContentDefinitionXmlNamespace);
                xml.DocumentElement.InsertBefore(element, fieldsElement);
            }

            var list = ContentTypeManager.Current.ContentTypes.Values.Select(x => x.Name).Except(new[] { "PortalRoot", "JournalNode" }).ToList();

            if (additionalContentTypeNames != null && additionalContentTypeNames.Length > 0)
            {
                list.AddRange(additionalContentTypeNames);
            }
            element.InnerText = string.Join(" ", list);

            ContentTypeInstaller.InstallContentType(xml.OuterXml);
        }
コード例 #21
0
        public void ContentType_WrongAnalyzer()
        {
            var contentTypeName = System.Reflection.MethodBase.GetCurrentMethod().Name;
            var fieldName       = "Field1";
            var analyzerValue   = "Lucene.Net.Analysis.KeywordAnalyzer";

            Test(() =>
            {
                var searchEngine = SearchManager.SearchEngine as InMemorySearchEngine;
                Assert.IsNotNull(searchEngine);

                ContentTypeInstaller.InstallContentType($@"<?xml version='1.0' encoding='utf-8'?>
<ContentType name='{contentTypeName}' parentType='GenericContent'
         handler='{typeof(GenericContent).FullName}' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition'>
    <Fields>
        <Field name='{fieldName}' type='ShortText'>
            <Indexing>
                <Analyzer>{analyzerValue}</Analyzer>
            </Indexing>
        </Field>
    </Fields>
</ContentType>
");
            });
        }
コード例 #22
0
        public void ContentType_Analyzers()
        {
            var contentTypeName = System.Reflection.MethodBase.GetCurrentMethod().Name;
            var fieldName1      = "Field1";
            var fieldName2      = "Field2";
            var analyzerValue1  = IndexFieldAnalyzer.Whitespace;
            var analyzerValue2  = IndexFieldAnalyzer.Standard;

            Test(() =>
            {
                var analyzersBefore = SearchManager.SearchEngine.GetAnalyzers();

                /**/ ContentTypeInstaller.InstallContentType($@"<?xml version='1.0' encoding='utf-8'?>
<ContentType name='{contentTypeName}' parentType='GenericContent'
         handler='{typeof(GenericContent).FullName}' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition'>
    <Fields>
        <Field name='{fieldName1}' type='ShortText'><Indexing><Analyzer>{analyzerValue1}</Analyzer></Indexing></Field>
        <Field name='{fieldName2}' type='ShortText'><Indexing><Analyzer>{analyzerValue2}</Analyzer></Indexing></Field>
    </Fields>
</ContentType>
");
                ContentType.GetByName(contentTypeName); // starts the contenttype system

                var analyzersAfter = SearchManager.SearchEngine.GetAnalyzers();

                Assert.IsFalse(analyzersBefore.ContainsKey(fieldName1));
                Assert.IsFalse(analyzersBefore.ContainsKey(fieldName2));

                Assert.IsTrue(analyzersAfter.ContainsKey(fieldName1));
                Assert.IsTrue(analyzersAfter[fieldName1] == analyzerValue1);
                Assert.IsTrue(analyzersAfter.ContainsKey(fieldName2));
                Assert.IsTrue(analyzersAfter[fieldName2] == analyzerValue2);
            });
        }
コード例 #23
0
        public void AppModel_Event_OneLevel_MoreEvent()
        {
            Node contextNode;

            if (ContentType.GetByName("TestRepositoryEventHandlerNode") == null)
            {
                ContentTypeInstaller.InstallContentType(TestRepositoryEventHandlerNode.ContentTypeDefinition);
            }
            if (ContentType.GetByName("TestRepositoryCancelEventHandlerNode") == null)
            {
                ContentTypeInstaller.InstallContentType(TestRepositoryCancelEventHandlerNode.ContentTypeDefinition);
            }
            ResetEvents();
            TestRepositoryEventHandlerNode.RepositoryEventFired       += new EventHandler <TestRepositoryEventArgs>(TestRepositoryEventHandlerNode_RepositoryEventFired);
            TestRepositoryCancelEventHandlerNode.RepositoryEventFired += new EventHandler <TestRepositoryEventArgs>(TestRepositoryEventHandlerNode_RepositoryEventFired);
            _eventsHistory.Clear();

            // create a context node
            EnsureNode("[TestRoot]/SimpleTest", "Car");

            // get a context node and execute an operation on the node
            // watch event, assert: event is not fired
            contextNode        = LoadNode("[TestRoot]/SimpleTest");
            contextNode.Index += 1;
            contextNode.Save();
            var eventsCount1 = _eventsHistory.Count; // == 0

            _eventsHistory.Clear();

            // create an event handler node and execute an operation on the context node
            // watch event, assert: event is fired
            EnsureNode("[TestRoot]/Events/Car/Modifying/EventHandler5", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Events/Car/Modifying/EventHandler1", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Events/Car/Modifying/EventHandler3", "TestRepositoryCancelEventHandlerNode");
            contextNode        = LoadNode("[TestRoot]/SimpleTest");
            contextNode.Index += 1;
            contextNode.Save();
            var eventsCount2 = _eventsHistory.Count; // == 3
            var savedHistory = new List <string>(_eventsHistory);

            _eventsHistory.Clear();

            // remove the created event handler node and execute an operation on the context node
            // watch event, assert: event is not fired
            DeleteNode("[TestRoot]/Events/Car/Modifying");
            contextNode        = LoadNode("[TestRoot]/SimpleTest");
            contextNode.Index += 1;
            contextNode.Save();
            var eventsCount3 = _eventsHistory.Count; // == 0

            _eventsHistory.Clear();

            TestRepositoryEventHandlerNode.RepositoryEventFired       -= new EventHandler <TestRepositoryEventArgs>(TestRepositoryEventHandlerNode_RepositoryEventFired);
            TestRepositoryCancelEventHandlerNode.RepositoryEventFired -= new EventHandler <TestRepositoryEventArgs>(TestRepositoryEventHandlerNode_RepositoryEventFired);

            Assert.IsTrue(eventsCount1 == 0, "#1");
            Assert.IsTrue(eventsCount2 == 3, "Events were not fired");
            Assert.IsTrue(eventsCount3 == 0, "Events were fired");
        }
コード例 #24
0
ファイル: SearchTest2.cs プロジェクト: kimduquan/DMIS
        public void ContentQuery_ChoiceFieldLocalizedOptions_Sorting()
        {
            ContentTypeInstaller.InstallContentType(@"<?xml version='1.0' encoding='utf-8'?>
				<ContentType name='ContentQuery_ChoiceField' parentType='GenericContent' handler='ContentRepository.GenericContent' xmlns='http://schemas.com/ContentRepository/ContentTypeDefinition'>
					<Fields>
						<Field name='ChoiceTest' type='Choice'>
							<Configuration>
								<AllowExtraValue>true</AllowExtraValue>
								<AllowMultiple>true</AllowMultiple>
								<Options>
									<Option value='2'>$TestChoice,Text3</Option>
									<Option value='0'>$TestChoice,Text1</Option>
									<Option value='3'>Text4</Option>
									<Option value='1'>$TestChoice,Text2</Option>
								</Options>
							</Configuration>
						</Field>
					</Fields>
				</ContentType>"                );

            SaveResources("TestChoice", @"<?xml version=""1.0"" encoding=""utf-8""?>
                <Resources>
                  <ResourceClass name=""TestChoice"">
                    <Languages>
                      <Language cultureName=""en"">
                        <data name=""Text1"" xml:space=""preserve""><value>C-Text-1</value></data>
                        <data name=""Text2"" xml:space=""preserve""><value>A-Text-2</value></data>
                        <data name=""Text3"" xml:space=""preserve""><value>B-Text-3</value></data>
                      </Language>
                      <Language cultureName=""hu"">
                        <data name=""Text1"" xml:space=""preserve""><value>C-Szöveg-1</value></data>
                        <data name=""Text2"" xml:space=""preserve""><value>A-Szöveg-2</value></data>
                        <data name=""Text3"" xml:space=""preserve""><value>B-Szöveg-3</value></data>
                      </Language>
                    </Languages>
                  </ResourceClass>
                </Resources>");

            ResourceManager.Reset();

            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "2;3;~other.other text", 3);
            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "1", 2);
            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "3", 4);
            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "~other.other text 3", 9);
            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "0", 1);
            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "~other.other text 2", 8);
            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "~other.cccc", 7);
            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "~other.aaaa", 5);
            CreateTestContentForChoiceFieldLocalizedOptions_Sorting("Ordering-", "~other.bbbb", 6);

            var result = ContentQuery.Query("+Name:'Ordering-*' .AUTOFILTERS:OFF .SORT:ChoiceTest");

            Assert.AreEqual(9, result.Count);
            var indexes = String.Join(" ", result.Nodes.Select(n => n.Index.ToString()));

            Assert.AreEqual("1 2 3 4 5 6 7 8 9", indexes);
        }
コード例 #25
0
        public void AppModel_Event_Exceptions()
        {
            Node contextNode;

            if (ContentType.GetByName("TestRepositoryEventHandlerNode") == null)
            {
                ContentTypeInstaller.InstallContentType(TestRepositoryEventHandlerNode.ContentTypeDefinition);
            }
            if (ContentType.GetByName("TestRepositoryCancelEventHandlerNode") == null)
            {
                ContentTypeInstaller.InstallContentType(TestRepositoryCancelEventHandlerNode.ContentTypeDefinition);
            }
            ResetEvents();
            TestRepositoryEventHandlerNode.RepositoryEventFired       += new EventHandler <TestRepositoryEventArgs>(TestRepositoryEventHandlerNode_RepositoryEventFired);
            TestRepositoryCancelEventHandlerNode.RepositoryEventFired += new EventHandler <TestRepositoryEventArgs>(TestRepositoryEventHandlerNode_RepositoryEventFired);
            _eventsHistory.Clear();

            // create a context node
            EnsureNode("[TestRoot]/Level1/Level2/Car1", "Car");

            // create more event handler nodes and execute an operation on the context node
            EnsureNode("[TestRoot]/Events/Car/Modifying/EventHandler5", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Level1/Events/Car/Modifying/EventHandler6Ex", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Level1/Events/Car/Modifying/EventHandler2", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Events/Car/Modifying/EventHandler1", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Level1/Events/Car/Modifying/EventHandler1NullRefEx", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Events/Car/Modifying/EventHandler3", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Level1/Events/Car/Modifying/EventHandler3AppEx", "TestRepositoryCancelEventHandlerNode");
            EnsureNode("[TestRoot]/Level1/Events/Car/Modifying/EventHandler4", "TestRepositoryCancelEventHandlerNode"); // 1NullRefEx, 2, 3AppEx, 4, 6Ex, 5, 1, 3
            contextNode        = LoadNode("[TestRoot]/Level1/Level2/Car1");
            contextNode.Index += 1;
            RepositoryEventException thrownExc = null;

            try
            {
                contextNode.Save();
            }
            catch (RepositoryEventException e)
            {
                thrownExc = e;
            }
            var savedHistory1 = GetHistory();

            _eventsHistory.Clear();

            TestRepositoryEventHandlerNode.RepositoryEventFired       -= new EventHandler <TestRepositoryEventArgs>(TestRepositoryEventHandlerNode_RepositoryEventFired);
            TestRepositoryCancelEventHandlerNode.RepositoryEventFired -= new EventHandler <TestRepositoryEventArgs>(TestRepositoryEventHandlerNode_RepositoryEventFired);

            Assert.IsTrue(savedHistory1 == "1NullRefEx, 2, 3AppEx, 4, 6Ex, 1, 3, 5", String.Format("history is '{0}'. Expected: '1NullRefEx, 2, 3AppEx, 4, 6Ex, 1, 3, 5'", savedHistory1));
            Assert.IsNotNull(thrownExc, "Exception was not thrown");
            var exList = thrownExc.Exceptions.ToList();

            Assert.IsTrue(exList.Count == 3, String.Format("{0} exception was thrown. Expected: 3", thrownExc.Exceptions.Count()));
            Assert.IsTrue(exList[0].Message == "NullRefEx", "#ex1");
            Assert.IsTrue(exList[1].Message == "AppEx", "#ex2");
            Assert.IsTrue(exList[2].Message == "Ex", "#ex3");
        }
コード例 #26
0
        public void Indexing_Disallow()
        {
            Content content;

            ContentTypeInstaller.InstallContentType(
                @"<ContentType name=""NotIndexedCar"" parentType=""Car"" handler=""SenseNet.ContentRepository.GenericContent"" xmlns=""http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition"">
                    <AllowIndexing>false</AllowIndexing><Fields><Field name=""SpecialData"" type=""ShortText"" /></Fields></ContentType>",
                @"<ContentType name=""NotIndexedSystemFolder"" parentType=""SystemFolder"" handler=""SenseNet.ContentRepository.GenericContent"" xmlns=""http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition"">
                    <AllowedChildTypes>Car,NotIndexedCar</AllowedChildTypes>
                    <AllowIndexing>false</AllowIndexing><Fields><Field name=""SpecialData"" type=""ShortText"" /></Fields></ContentType>");

            var word = "SpecialWord";

            var rootPath = TestRoot.Path + "/Indexing_RecoverStoredField";

            if (Node.Exists(rootPath))
            {
                Content.Delete(rootPath);
            }
            var root = new SystemFolder(TestRoot)
            {
                Name = "Indexing_RecoverStoredField"
            };

            root.Save();

            content = Content.CreateNew("Car", root, "Car1".ToString());
            content["Description"] = word;
            content.Save();
            var name1 = content.Name;

            content = Content.CreateNew("NotIndexedSystemFolder", root, "NotIndexedFolder1".ToString());
            content["Description"] = word;
            content.Save();
            var name2  = content.Name;
            var parent = content.ContentHandler;

            content = Content.CreateNew("NotIndexedCar", parent, "NotIndexedCar1".ToString());
            content["Description"] = word;
            content.Save();
            var name3 = content.Name;

            content = Content.CreateNew("Car", parent, "Car2".ToString());
            content["Description"] = word;
            content.Save();
            var name4 = content.Name;

            var expected = String.Join(", ", new[] { name1, name4 });
            var actual   = String.Join(", ", ContentQuery.Query("+InTree:'" + root.Path + "' +Description:" + word + " .AUTOFILTERS:OFF").Nodes.Select(n => n.Name));

            Assert.AreEqual(expected, actual);

            Assert.IsNotNull(Node.LoadNode(root.Path + "/NotIndexedFolder1"));
            Assert.IsNotNull(Node.LoadNode(root.Path + "/NotIndexedFolder1/NotIndexedCar1"));
            Assert.IsNotNull(Node.LoadNode(root.Path + "/NotIndexedFolder1/Car2"));
        }
コード例 #27
0
        public void ContentType_MorePermissiveLoad_MissingBinding_Create()
        {
            Test(() =>
            {
                var ctd0 = @"<ContentType name=""MyType1"" parentType=""GenericContent"" handler=""SenseNet.ContentRepository.GenericContent"" xmlns=""http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition"">
  <Fields>
    <Field name=""Image2"" type=""Image""></Field>
  </Fields>
</ContentType>";
                var ctd1 = @"<ContentType name=""MyType1"" parentType=""GenericContent"" handler=""SenseNet.ContentRepository.GenericContent"" xmlns=""http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition"">
  <Fields>
    <Field name=""ImageRef"" type=""Reference""></Field>
    <Field name=""ImageData"" type=""Binary""></Field>
    <Field name=""Image2"" type=""Image"">
      <Bind property=""ImageRef"" />
      <Bind property=""ImageData"" />
    </Field>
  </Fields>
</ContentType>";

                // ACTION-1: Try install an invalid CTD.
                try
                {
                    //ContentTypeInstaller.InstallContentType(ctd0);
                    var binaryData      = new BinaryData();
                    binaryData.FileName = "MyType1";
                    binaryData.SetStream(RepositoryTools.GetStreamFromString(ctd0));
                    var contentType = new ContentType(ContentType.GetByName("GenericContent"))
                    {
                        Name   = "MyType1",
                        Binary = binaryData
                    };
                    contentType.Save();

                    Assert.Fail("The expected exception was not thrown.");
                }
                catch (ContentRegistrationException e)
                {
                    // do nothing
                }

                // ACTION-2: reinstall without any problem.
                ContentTypeInstaller.InstallContentType(ctd1);


                // ACTION-3: Reload schema from the database.
                Cache.Reset();
                ContentTypeManager.Reload();

                // ASSERT: the ContentType is loaded and valid.
                var myType1 = ContentType.GetByName("MyType1");
                Assert.AreEqual(ctd1, myType1.ToXml());
                Assert.IsFalse(myType1.IsInvalid);
                Assert.IsNotNull(myType1.FieldSettings.FirstOrDefault(x => x.Name == "Image2"));
            });
        }
コード例 #28
0
        public async Task Test_WithRelatedContentType()
        {
            var contentTypeTemplate =
                @"<?xml version='1.0' encoding='utf-8'?>
<ContentType name='{0}' parentType='{1}' handler='SenseNet.ContentRepository.GenericContent' xmlns='http://schemas.sensenet.com/SenseNet/ContentRepository/ContentTypeDefinition'>
<AllowedChildTypes>{2}</AllowedChildTypes>
</ContentType>";

            await DeleteContentTypeTest(() =>
            {
                // init
                var contentTypeCount = GetContentTypeCount();
                InstallCarContentType();
                ContentTypeInstaller.InstallContentType(
                    string.Format(contentTypeTemplate, "Car1", "Car", ""),
                    string.Format(contentTypeTemplate, "Car2", "Car", ""),
                    string.Format(contentTypeTemplate, "Garage1", "GenericContent", "Car,Folder"),
                    string.Format(contentTypeTemplate, "Garage2", "GenericContent", "Folder,Car2"));
                var root = new SystemFolder(Repository.Root)
                {
                    Name = "TestRoot" + Guid.NewGuid()
                };
                root.Save();

                // test-1
                var step = new DeleteContentType {
                    Name = "Car", Delete = DeleteContentType.Mode.Force
                };
                var dependencies = step.GetDependencies(new[] { "Car" });

                Assert.AreEqual(0, dependencies.InstanceCount);
                Assert.AreEqual(2, dependencies.PermittingContentTypes.Length);
                Assert.AreEqual(0, dependencies.PermittingFieldSettings.Length);
                Assert.AreEqual(0, dependencies.PermittingContentCollection.Count);
                Assert.AreEqual(0, dependencies.Applications.Length);
                Assert.AreEqual(0, dependencies.ContentTemplates.Length);
                Assert.AreEqual(0, dependencies.ContentViews.Length);

                // test-2
                step.Execute(GetExecutionContext());

                Assert.IsNull(ContentType.GetByName("Car"));
                Assert.IsNull(ContentType.GetByName("Car1"));
                Assert.IsNull(ContentType.GetByName("Car2"));
                Assert.AreEqual(contentTypeCount + 2, GetContentTypeCount());

                var names = new[] { "Car", "Car1", "Car2" };

                var garage1 = ContentType.GetByName("Garage1");
                Assert.IsFalse(garage1.AllowedChildTypeNames.Intersect(names).Any());
                var garage2 = ContentType.GetByName("Garage2");
                Assert.IsFalse(garage1.AllowedChildTypeNames.Intersect(names).Any());

                return(Task.CompletedTask);
            });
        }
コード例 #29
0
        public void CreateStartStructure()
        {
            ContentTypeInstaller installer = ContentTypeInstaller.CreateBatchContentTypeInstaller();

            for (int level = 1; level < 6; level++)
            {
                installer.AddContentType(CreateCtd(level, false, false));
            }
            installer.ExecuteBatch();
        }
コード例 #30
0
ファイル: Put.cs プロジェクト: pchaozhong/FlexNet
        private void InstallContentType()
        {
            string contentString = Tools.GetStreamString(_handler.Context.Request.InputStream);

            if (!string.IsNullOrEmpty(contentString))
            {
                ContentTypeInstaller.InstallContentType(contentString);
            }
            _handler.Context.Response.StatusCode = 200;
        }