From 206add15037961c1fc2d509972f2c52e5a0501a0 Mon Sep 17 00:00:00 2001
From: reddyashish <43763136+reddyashish@users.noreply.github.com>
Date: Tue, 1 Aug 2023 11:26:44 -0400
Subject: [PATCH] Lucene unit testing
---
src/DynamoCore/Models/DynamoModel.cs | 47 +++++++++++--------
.../SearchElements/CustomNodeSearchElement.cs | 5 +-
.../ViewModels/Search/SearchViewModel.cs | 16 ++++---
.../SearchViewModelTests.cs | 19 ++++++--
test/DynamoCoreWpfTests/WorkspaceSaving.cs | 6 +--
5 files changed, 55 insertions(+), 38 deletions(-)
diff --git a/src/DynamoCore/Models/DynamoModel.cs b/src/DynamoCore/Models/DynamoModel.cs
index d6dd202672d..78dcb2ae2b7 100644
--- a/src/DynamoCore/Models/DynamoModel.cs
+++ b/src/DynamoCore/Models/DynamoModel.cs
@@ -40,7 +40,6 @@
using DynamoServices;
using Greg;
using Lucene.Net.Documents;
-using Lucene.Net.Search;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using ProtoCore;
@@ -928,8 +927,16 @@ protected DynamoModel(IStartConfiguration config)
CustomNodeManager = new CustomNodeManager(NodeFactory, MigrationManager, LibraryServices);
- LuceneSearchUtility = new LuceneSearchUtility(this);
- LuceneSearchUtility.InitializeLuceneConfig(LuceneConfig.NodesIndexingDirectory);
+ if (IsTestMode)
+ {
+ LuceneSearchUtility = new LuceneSearchUtility(this);
+ LuceneSearchUtility.InitializeLuceneConfig(string.Empty, LuceneSearchUtility.LuceneStorage.RAM);
+ }
+ else
+ {
+ LuceneSearchUtility = new LuceneSearchUtility(this);
+ LuceneSearchUtility.InitializeLuceneConfig(LuceneConfig.NodesIndexingDirectory);
+ }
InitializeCustomNodeManager();
@@ -1518,19 +1525,19 @@ private void InitializeIncludedNodes()
//WhenHomeWorkspaceIsFocusedInputAndOutputNodesAreMissingFromSearch
//WhenStartingDynamoInputAndOutputNodesAreNolongerMissingFromSearch
// New index process from Lucene, adding missing nodes: Code Block, Input and Output
- //var ele = AddNodeTypeToSearch(outputData);
- //if (ele != null)
- //{
- // AddNodeTypeToSearchIndex(ele, iDoc);
- //}
-
- //ele = AddNodeTypeToSearch(symbolData);
- //if (ele != null)
- //{
- // AddNodeTypeToSearchIndex(ele, iDoc);
- //}
-
- var ele = AddNodeTypeToSearch(cbnData);
+ var ele = AddNodeTypeToSearch(outputData);
+ if (ele != null)
+ {
+ AddNodeTypeToSearchIndex(ele, iDoc);
+ }
+
+ ele = AddNodeTypeToSearch(symbolData);
+ if (ele != null)
+ {
+ AddNodeTypeToSearchIndex(ele, iDoc);
+ }
+
+ ele = AddNodeTypeToSearch(cbnData);
if (ele != null)
{
AddNodeTypeToSearchIndex(ele, iDoc);
@@ -1569,8 +1576,8 @@ private void InitializeNodeLibrary()
// Import Zero Touch libs
var functionGroups = LibraryServices.GetAllFunctionGroups();
- if (!IsTestMode)
- AddZeroTouchNodesToSearch(functionGroups);
+
+ AddZeroTouchNodesToSearch(functionGroups);
#if DEBUG_LIBRARY
DumpLibrarySnapshot(functionGroups);
#endif
@@ -3248,9 +3255,9 @@ private NodeModelSearchElement AddNodeTypeToSearch(TypeLoadData typeLoadData)
///
/// node info that will be indexed
/// Lucene document in which the node info will be indexed
- private void AddNodeTypeToSearchIndex(NodeSearchElement node, Document doc)
+ internal void AddNodeTypeToSearchIndex(NodeSearchElement node, Document doc)
{
- if (IsTestMode) return;
+ //if (IsTestMode) return;
if (LuceneSearchUtility.addedFields == null) return;
LuceneSearchUtility.SetDocumentFieldValue(doc, nameof(LuceneConfig.NodeFieldsEnum.FullCategoryName), node.FullCategoryName);
diff --git a/src/DynamoCore/Search/SearchElements/CustomNodeSearchElement.cs b/src/DynamoCore/Search/SearchElements/CustomNodeSearchElement.cs
index 8cb94378efb..9b4a6bfcf89 100644
--- a/src/DynamoCore/Search/SearchElements/CustomNodeSearchElement.cs
+++ b/src/DynamoCore/Search/SearchElements/CustomNodeSearchElement.cs
@@ -1,12 +1,9 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
-using Dynamo.Graph;
using Dynamo.Graph.Nodes;
using Dynamo.Graph.Nodes.CustomNodes;
-using Dynamo.Interfaces;
-using Dynamo.Models;
namespace Dynamo.Search.SearchElements
{
diff --git a/src/DynamoCoreWpf/ViewModels/Search/SearchViewModel.cs b/src/DynamoCoreWpf/ViewModels/Search/SearchViewModel.cs
index c3a1a0f7a2f..9d8455d4cfb 100644
--- a/src/DynamoCoreWpf/ViewModels/Search/SearchViewModel.cs
+++ b/src/DynamoCoreWpf/ViewModels/Search/SearchViewModel.cs
@@ -382,6 +382,13 @@ internal SearchViewModel(NodeSearchModel model)
InitializeCore();
}
+ internal SearchViewModel(NodeSearchModel model, DynamoViewModel dynamoViewModel)
+ {
+ Model = model;
+ InitializeCore();
+ LuceneSearchUtility = dynamoViewModel.Model.LuceneSearchUtility;
+ }
+
///
/// Dispose function
///
@@ -875,7 +882,7 @@ public void SearchAndUpdateResults(string query)
return;
//Passing the second parameter as true will search using Lucene.NET
- var foundNodes = DynamoModel.IsTestMode? Search(query) : Search(query, true);
+ var foundNodes = Search(query, true);
searchResults = new List(foundNodes);
FilteredResults = searchResults;
@@ -937,7 +944,7 @@ internal IEnumerable Search(string search, IEnumerab
/// Temporary flag that will be used for searching using Lucene.NET
internal IEnumerable Search(string search, bool useLucene)
{
- if (useLucene)
+ if (LuceneSearchUtility != null)
{
//The DirectoryReader and IndexSearcher have to be assigned after commiting indexing changes and before executing the Searcher.Search() method, otherwise new indexed info won't be reflected
LuceneSearchUtility.dirReader = LuceneSearchUtility.writer?.GetReader(applyAllDeletes: true);
@@ -982,10 +989,7 @@ internal IEnumerable Search(string search, bool useL
}
return candidates;
}
- else
- {
- return Search(search);
- }
+ return null;
}
///
diff --git a/test/DynamoCoreWpfTests/SearchViewModelTests.cs b/test/DynamoCoreWpfTests/SearchViewModelTests.cs
index b4820d468c1..e7029984e2a 100644
--- a/test/DynamoCoreWpfTests/SearchViewModelTests.cs
+++ b/test/DynamoCoreWpfTests/SearchViewModelTests.cs
@@ -4,6 +4,7 @@
using Dynamo.Configuration;
using Dynamo.Search;
using Dynamo.Search.SearchElements;
+using Dynamo.Utilities;
using Dynamo.ViewModels;
using Dynamo.Wpf.ViewModels;
using NUnit.Framework;
@@ -15,12 +16,13 @@ internal class SearchViewModelTests : DynamoViewModelUnitTest
{
private static NodeSearchModel model;
private static SearchViewModel viewModel;
+ private static LuceneSearchUtility LuceneSearchUtility;
[SetUp]
public void Init()
{
model = new NodeSearchModel();
- viewModel = new SearchViewModel(model);
+ viewModel = new SearchViewModel(model, ViewModel);
}
[Test]
@@ -794,23 +796,30 @@ public void CollapseAllTest()
#region Helpers
- private static NodeSearchElement CreateCustomNode(string name, string category,
+ private NodeSearchElement CreateCustomNode(string name, string category,
string description = "", string path = "")
{
var element = new CustomNodeSearchElement(null,
new CustomNodeInfo(Guid.NewGuid(), name, category, description, path));
+ var iDoc = ViewModel.Model.LuceneSearchUtility.InitializeIndexDocumentForNodes();
+ if (element != null)
+ {
+ ViewModel.Model.AddNodeTypeToSearchIndex(element, iDoc);
+ }
+
+
return element;
}
- private static NodeSearchElementViewModel CreateCustomNodeViewModel(string name, string category,
+ private NodeSearchElementViewModel CreateCustomNodeViewModel(string name, string category,
string description = "", string path = "")
{
var element = CreateCustomNode(name, category, description, path);
return new NodeSearchElementViewModel(element, null);
}
- private static NodeSearchElementViewModel CreateCustomNodeViewModel(NodeSearchElement element)
+ private NodeSearchElementViewModel CreateCustomNodeViewModel(NodeSearchElement element)
{
return new NodeSearchElementViewModel(element, null);
}
@@ -819,7 +828,7 @@ private static NodeSearchElementViewModel CreateCustomNodeViewModel(NodeSearchEl
/// Build complex tree.
///
/// All members of built tree.
- private static IEnumerable PrepareTestTree()
+ private IEnumerable PrepareTestTree()
{
// Next tree will be built.
// Used blocks: ─, │, ┌, ┐, ┤, ├, ┴, ┬.
diff --git a/test/DynamoCoreWpfTests/WorkspaceSaving.cs b/test/DynamoCoreWpfTests/WorkspaceSaving.cs
index d44b8d16b48..1ca8499c1ad 100644
--- a/test/DynamoCoreWpfTests/WorkspaceSaving.cs
+++ b/test/DynamoCoreWpfTests/WorkspaceSaving.cs
@@ -1048,7 +1048,7 @@ public void CustomNodeSaveAsAddsNewCustomNodeToSearch()
ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.SearchAndUpdateResults("Constant2");
Assert.AreEqual(originalNumElements + 1, ViewModel.Model.SearchModel.NumElements);
- Assert.AreEqual(2, ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.FilteredResults.Count());
+ Assert.AreEqual(2, ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.FilteredResults.OfType().Count());
var res1 = ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.FilteredResults.ElementAt(0);
var res2 = ViewModel.CurrentSpaceViewModel.InCanvasSearchViewModel.FilteredResults.ElementAt(1);
@@ -1060,7 +1060,7 @@ public void CustomNodeSaveAsAddsNewCustomNodeToSearch()
var node2 = res2.Model as CustomNodeSearchElement;
Assert.IsTrue((node1.ID == oldId && node2.ID == newId) ||
- (node1.ID == newId && node2.ID == oldId));
+ (node1.ID == newId && node2.ID == oldId));
}
@@ -1123,7 +1123,7 @@ public void CustomNodeSaveAsAddsNewCustomNodeToSearchAndItCanBeRefactoredWhilePr
var examplePath = Path.Combine(TestDirectory, @"core\custom_node_saving", "Constant2.dyf");
ViewModel.OpenCommand.Execute(examplePath);
- var oldId = (model.CurrentWorkspace as CustomNodeWorkspaceModel).CustomNodeDefinition.FunctionId;
+ var oldId = (model.CurrentWorkspace as CustomNodeWorkspaceModel).CustomNodeDefinition.FunctionId;
CustomNodeWorkspaceModel nodeWorkspace;
Assert.IsTrue(model.CustomNodeManager.TryGetFunctionWorkspace(oldId, true, out nodeWorkspace));