public void TestSearchLibraryUpdate() { //Arrange const string nodeName = "TheNoodle"; const string catName = "TheCat"; const string descr = "TheCat"; const string path = @"C:\temp\graphics.dyn"; const string newNodeName = "TheTurtle"; var guid1 = Guid.NewGuid(); var dummyInfo1 = new CustomNodeInfo(guid1, nodeName, catName, descr, path); var dummySearch1 = new CustomNodeSearchElementTest(null, dummyInfo1); var newInfo = new CustomNodeInfo(guid1, newNodeName, catName, descr, path); dummySearch1.SearchKeywords.Add("tag1"); dummySearch1.WeightsCollection.Add(10); //Act search.Add(dummySearch1); dummySearch1.SyncWithCustomNodeInfo(newInfo); search.Update(dummySearch1);//internal void Update(TEntry entry, bool isCategoryChanged = false) search.Update(dummySearch1, true); //Assert //Just validate that the tags and weights were added correctly Assert.AreEqual(dummySearch1.SearchKeywords.Count, 1); Assert.AreEqual(dummySearch1.WeightsCollection.Count, 1); }
/// <summary> /// As we rely on search when generating markdown files and matching them with content from the DynamoDictionary /// we need to add all NodeModel nodes to the SearchModel. /// </summary> /// <param name="asm"></param> /// <param name="nodeModelType"></param> /// <param name="searchModel"></param> private static void AddNodeModelsToSearchModel(Assembly asm, NodeSearchModel searchModel) { System.Type[] typesInAsm = null; try { typesInAsm = asm.GetTypes(); } // see https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.gettypes?view=netframework-4.8#remarks catch (ReflectionTypeLoadException ex) { Program.VerboseControlLog(ex.Message); typesInAsm = ex.Types; } var nodeTypes = typesInAsm .Where(x => NodeModelAssemblyLoader.IsNodeSubType(x)) .Select(t => new TypeLoadData(t)) .Where(type => type != null && !type.IsDeprecated && !type.IsHidden) .ToList(); foreach (var type in nodeTypes) { Program.VerboseControlLog($"adding nodeModelSearchElement for {type.Category} {type.Name}"); searchModel.Add(new NodeModelSearchElement(type)); } }
/// <summary> /// As we rely on search when generating markdown files and matching them with content from the DynamoDictionary /// we need to add all ZT nodes to the SearchModel. /// </summary> /// <param name="funcGroup"></param> /// <param name="nodeSearchModel"></param> private static void AddFunctionGroupToSearch(FunctionGroup funcGroup, NodeSearchModel nodeSearchModel) { foreach (var functionDescriptor in funcGroup.Functions) { if (functionDescriptor.IsVisibleInLibrary) { nodeSearchModel.Add(new ZeroTouchSearchElement(functionDescriptor)); } } }
public void PopulateSearchTextWithSelectedResultReturnsExpectedResult() { const string catName = "Animals"; const string descr = ""; const string path = ""; model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "xyz", catName, descr, path))); model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "abc", catName, descr, path))); model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "cat", catName, descr, path))); model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "dog", catName, descr, path))); model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "frog", catName, descr, path))); model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "Noodle", catName, descr, path))); viewModel.SearchAndUpdateResults("xy"); viewModel.PopulateSearchTextWithSelectedResult(); Assert.AreEqual("xyz", viewModel.SearchText); viewModel.SearchAndUpdateResults("ood"); viewModel.PopulateSearchTextWithSelectedResult(); Assert.AreEqual("Noodle", viewModel.SearchText); viewModel.SearchAndUpdateResults("do"); viewModel.PopulateSearchTextWithSelectedResult(); Assert.AreEqual("dog", viewModel.SearchText); }
/// <summary> /// Helper method for custom node adding and removing /// </summary> public static void AssertAddAndRemoveCustomNode( NodeSearchModel searchModel, string nodeName, string catName, string descr = "Bla", string path = "Bla") { var dummyInfo = new CustomNodeInfo(Guid.NewGuid(), nodeName, catName, descr, path); var dummySearch = new CustomNodeSearchElement(null, dummyInfo); searchModel.Add(dummySearch); var res = searchModel.Search(nodeName).ToList(); Assert.AreNotEqual(0, res.Count()); Assert.AreEqual(res[0].Name, nodeName); searchModel.Remove(dummySearch); res = searchModel.Search(nodeName).ToList(); Assert.AreEqual(0, res.Count()); }
public void LibraryDataUpdatedEventRaised() { const string libraryDataUpdated = "libraryDataUpdated"; var timeout = 50; //50 milliseconds var resetevent = new AutoResetEvent(false); var model = new NodeSearchModel(); var controller = new Mock <IEventController>(); controller.Setup(c => c.RaiseEvent(It.IsAny <string>(), It.IsAny <object[]>())).Callback(() => resetevent.Set()); var customization = new LibraryViewCustomization(); var disposable = LibraryViewController.SetupSearchModelEventsObserver(model, controller.Object, customization, timeout); controller.Verify(c => c.RaiseEvent(libraryDataUpdated, It.IsAny <object[]>()), Times.Never); var d1 = MockNodeSearchElement("A", "B"); var d2 = MockNodeSearchElement("C", "D"); var d3 = MockNodeSearchElement("E", "F"); model.Add(d1.Object); model.Add(d2.Object); model.Add(d3.Object); Assert.AreEqual(3, model.NumElements); Assert.IsTrue(resetevent.WaitOne(timeout * 200)); resetevent.Dispose(); controller.Verify(c => c.RaiseEvent(libraryDataUpdated), Times.Once); var spec = customization.GetSpecification(); var section = spec.sections.FirstOrDefault(); Assert.AreEqual(1, spec.sections.Count); //There must be a section named "Add-ons" now. Assert.AreEqual("Add-ons", section.text); Assert.AreEqual(3, section.include.Count); Assert.AreEqual("A, C, E", string.Join(", ", section.include.Select(i => i.path))); //Dispose disposable.Dispose(); d1 = MockNodeSearchElement("G", "B"); d2 = MockNodeSearchElement("H", "D"); d3 = MockNodeSearchElement("I", "F"); model.Add(d1.Object); model.Add(d2.Object); model.Add(d3.Object); Assert.AreEqual(6, model.NumElements); controller.Verify(c => c.RaiseEvent(libraryDataUpdated, It.IsAny <object[]>()), Times.Once); }
public void CanRefactorCustomNodeName() { const string nodeName = "TheNoodle"; const string catName = "TheCat"; const string descr = "TheCat"; const string path = @"C:\turtle\graphics.dyn"; var guid1 = Guid.NewGuid(); var dummyInfo1 = new CustomNodeInfo(guid1, nodeName, catName, descr, path); var dummySearch1 = new CustomNodeSearchElement(null, dummyInfo1); search.Add(dummySearch1); Assert.AreEqual(1, search.NumElements); const string newNodeName = "TheTurtle"; var newInfo = new CustomNodeInfo(guid1, newNodeName, catName, descr, path); dummySearch1.SyncWithCustomNodeInfo(newInfo); search.Update(dummySearch1); Assert.AreEqual(1, search.NumElements); // search for new name var results = search.Search(newNodeName).ToList(); // results are correct Assert.AreEqual(1, results.Count()); var res1 = results[0]; Assert.IsInstanceOf <CustomNodeSearchElement>(res1); Assert.AreEqual(guid1, ((CustomNodeSearchElement)res1).ID); // search for old name var results1 = search.Search(nodeName); // results are correct Assert.AreEqual(0, results1.Count()); }