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); }); }
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); }); }
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."); }); }); }
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."); }); }); }
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); } }
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"); }
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); }); }
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> "); }); }
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); }
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(); } }
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"); }); }
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()); }); }
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>()); }); }
//[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); }); }
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()); }); }
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); }
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"); }
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); }); }
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); }); }
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); }
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); }
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"); }
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"); }
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); }
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")); }); }
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")); }
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); }); }
private void InstallContentType() { string contentString = Tools.GetStreamString(_handler.Context.Request.InputStream); if (!string.IsNullOrEmpty(contentString)) { ContentTypeInstaller.InstallContentType(contentString); } _handler.Context.Response.StatusCode = 200; }
public async Task Test_Applications() { 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' />"; await DeleteContentTypeTest(() => { InstallCarContentType(); ContentTypeInstaller.InstallContentType( string.Format(contentTypeTemplate, "Car1"), string.Format(contentTypeTemplate, "Car2")); var rootApps = Node.Load <Folder>("/Root/(apps)"); var rooAppCount = rootApps.Children.Count(); rootApps .CreateChild("Car", "Folder", out Node rootCar) .CreateChild("MyOperation", "Application"); rootApps .CreateChild("Car1", "Folder", out Node rootCar1) .CreateChild("MyOperation", "Application"); Repository.Root .CreateChild("MyStructure", "SystemFolder", out Node myRoot) .CreateChild("(apps)", "SystemFolder") .CreateChild("Car", "Folder", out Node deepCar) .CreateChild("MyOperation", "Application"); myRoot.CreateChild("Car", "Folder", out Node carFolder); // test-1 var step = new DeleteContentType { Name = "Car", Delete = DeleteContentType.Mode.Force }; var dependencies = step.GetDependencies(new[] { "Car" }); Assert.AreEqual(0, dependencies.InstanceCount); // Any instance in a content template is irrelevant. Assert.AreEqual(0, dependencies.PermittingContentTypes.Length); Assert.AreEqual(0, dependencies.PermittingFieldSettings.Length); Assert.AreEqual(0, dependencies.PermittingContentCollection.Count); Assert.AreEqual(3, dependencies.Applications.Length); Assert.AreEqual(0, dependencies.ContentTemplates.Length); Assert.AreEqual(0, dependencies.ContentViews.Length); // test-2 step.Execute(GetExecutionContext()); Assert.IsNull(Node.LoadNode(rootCar.Id)); Assert.IsNull(Node.LoadNode(rootCar1.Id)); Assert.IsNull(Node.LoadNode(deepCar.Id)); Assert.IsNotNull(Node.LoadNode(carFolder.Id)); Assert.AreEqual(rooAppCount, rootApps.Children.Count()); return(Task.CompletedTask); }); }
//[TestMethod] public void Indexing_Choice_Enum_Localized() { var typeName = typeof(TestEnum2ForChoiceField).Name; var ctName = "ChoiceFieldIndexingTestContentType"; var localizationData = new Dictionary <string, List <string> > { { "en", new List <string> { $"{TestEnum2ForChoiceField.Enum2Value1}en", $"{TestEnum2ForChoiceField.Enum2Value2}en", $"{TestEnum2ForChoiceField.Enum2Value3}en", } }, { "xx", new List <string> { $"{TestEnum2ForChoiceField.Enum2Value1}xx", $"{TestEnum2ForChoiceField.Enum2Value2}xx", $"{TestEnum2ForChoiceField.Enum2Value3}xx", } }, }; var xml = GetResourceXml(ctName, "Choice_Enum_Localized", localizationData); Test(() => { ContentTypeInstaller.InstallContentType(_choiceFieldIndexingTestContentType); InstallResourceFile("CtdResourcesXX.xml", xml); var root = CreateTestRoot(); var contents = Enum.GetValues(typeof(TestEnum2ForChoiceField)) .OfType <TestEnum2ForChoiceField>() .Select(x => { var content = Content.CreateNew("ChoiceFieldIndexingTestContentType", root, $"Content_{x}"); content["Choice_Enum_Localized"] = (int)x; content.Save(); return(content); }).ToArray(); var result1 = CreateSafeContentQuery( $"Choice_Enum_Localized:${(int)TestEnum2ForChoiceField.Enum2Value2}").Execute(); var result2 = CreateSafeContentQuery( $"Choice_Enum_Localized:{TestEnum2ForChoiceField.Enum2Value2.ToString()}").Execute(); var result3 = CreateSafeContentQuery( $"Choice_Enum_Localized:{TestEnum2ForChoiceField.Enum2Value2}en").Execute(); var result4 = CreateSafeContentQuery( $"Choice_Enum_Localized:{TestEnum2ForChoiceField.Enum2Value2}xx").Execute(); Assert.AreEqual(1, result1.Count); Assert.AreEqual(1, result2.Count); Assert.AreEqual(1, result3.Count); Assert.AreEqual(1, result4.Count); }); }