Skip to content

Commit 21eb40f

Browse files
committed
Refactor tool selection tests to use constants for improved maintainability and consistency
1 parent 39d534e commit 21eb40f

File tree

6 files changed

+74
-38
lines changed

6 files changed

+74
-38
lines changed

src/NLWebNet/Services/ToolSelector.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class ToolSelector : IToolSelector
1515
/// <summary>
1616
/// Constants for tool names and associated keywords
1717
/// </summary>
18-
private static class ToolConstants
18+
public static class ToolConstants
1919
{
2020
// Tool names
2121
public const string SearchTool = "search";

tests/NLWebNet.Tests/Integration/EndToEndQueryTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void Cleanup()
4545
public async Task EndToEnd_BasicSearchScenarios_AllPass()
4646
{
4747
var basicSearchScenarios = TestDataManager.GetTestScenarios()
48-
.Where(s => s.TestCategories.Contains("BasicSearch"));
48+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.BasicSearch));
4949

5050
foreach (var scenario in basicSearchScenarios)
5151
{
@@ -78,7 +78,7 @@ public async Task EndToEnd_BasicSearchScenarios_AllPass()
7878
public async Task EndToEnd_EdgeCaseScenarios_HandleCorrectly()
7979
{
8080
var edgeCaseScenarios = TestDataManager.GetTestScenarios()
81-
.Where(s => s.TestCategories.Contains("EdgeCase"));
81+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.EdgeCase));
8282

8383
foreach (var scenario in edgeCaseScenarios)
8484
{
@@ -104,7 +104,7 @@ public async Task EndToEnd_EdgeCaseScenarios_HandleCorrectly()
104104
public async Task EndToEnd_SiteFilteringScenarios_FilterCorrectly()
105105
{
106106
var siteFilteringScenarios = TestDataManager.GetTestScenarios()
107-
.Where(s => s.TestCategories.Contains("SiteFiltering"));
107+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.SiteFiltering));
108108

109109
foreach (var scenario in siteFilteringScenarios)
110110
{
@@ -141,7 +141,7 @@ public async Task EndToEnd_SiteFilteringScenarios_FilterCorrectly()
141141
public async Task EndToEnd_TechnicalQueries_ReturnRelevantResults()
142142
{
143143
var technicalScenarios = TestDataManager.GetTestScenarios()
144-
.Where(s => s.TestCategories.Contains("Technical"));
144+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.Technical));
145145

146146
foreach (var scenario in technicalScenarios)
147147
{

tests/NLWebNet.Tests/Services/ToolSelectionAccuracyTests.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void Cleanup()
4646
public async Task ToolSelection_CompareQueries_SelectCompareToolCorrectly()
4747
{
4848
var compareScenarios = TestDataManager.GetTestScenarios()
49-
.Where(s => s.TestCategories.Contains("Compare"));
49+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.Compare));
5050

5151
foreach (var scenario in compareScenarios)
5252
{
@@ -57,10 +57,10 @@ public async Task ToolSelection_CompareQueries_SelectCompareToolCorrectly()
5757

5858
Console.WriteLine($"Selected tool: {selectedTool ?? "None"}");
5959

60-
if (scenario.ExpectedTools.Contains("Compare"))
60+
if (scenario.ExpectedTools.Contains(TestConstants.Tools.Compare))
6161
{
6262
// For compare scenarios, the tool selector should select the "compare" tool
63-
Assert.AreEqual("compare", selectedTool?.ToLowerInvariant(),
63+
Assert.AreEqual(ToolSelector.ToolConstants.CompareTool, selectedTool?.ToLowerInvariant(),
6464
$"Expected 'compare' tool to be selected for compare query: '{scenario.Query}'");
6565
Console.WriteLine($"✓ Compare tool correctly selected for: {scenario.Query}");
6666
}
@@ -80,7 +80,7 @@ public async Task ToolSelection_CompareQueries_SelectCompareToolCorrectly()
8080
public async Task ToolSelection_DetailQueries_SelectDetailsToolCorrectly()
8181
{
8282
var detailScenarios = TestDataManager.GetTestScenarios()
83-
.Where(s => s.TestCategories.Contains("Details"));
83+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.Details));
8484

8585
foreach (var scenario in detailScenarios)
8686
{
@@ -91,7 +91,7 @@ public async Task ToolSelection_DetailQueries_SelectDetailsToolCorrectly()
9191

9292
Console.WriteLine($"Selected tool: {selectedTool ?? "None"}");
9393

94-
if (scenario.ExpectedTools.Contains("Details"))
94+
if (scenario.ExpectedTools.Contains(TestConstants.Tools.Details))
9595
{
9696
// Check if the query actually contains details keywords that the tool selector recognizes
9797
var queryLower = scenario.Query.ToLowerInvariant();
@@ -100,14 +100,14 @@ public async Task ToolSelection_DetailQueries_SelectDetailsToolCorrectly()
100100

101101
if (shouldSelectDetails)
102102
{
103-
Assert.AreEqual("details", selectedTool?.ToLowerInvariant(),
103+
Assert.AreEqual(ToolSelector.ToolConstants.DetailsTool, selectedTool?.ToLowerInvariant(),
104104
$"Expected 'details' tool to be selected for details query: '{scenario.Query}'");
105105
Console.WriteLine($"✓ Details tool correctly selected for: {scenario.Query}");
106106
}
107107
else
108108
{
109109
// Query doesn't contain details keywords, so it defaults to search
110-
Assert.AreEqual("search", selectedTool?.ToLowerInvariant(),
110+
Assert.AreEqual(ToolSelector.ToolConstants.SearchTool, selectedTool?.ToLowerInvariant(),
111111
$"Expected 'search' tool (default) for query without details keywords: '{scenario.Query}'");
112112
Console.WriteLine($"✓ Search tool (default) correctly selected for: {scenario.Query}");
113113
}
@@ -128,7 +128,7 @@ public async Task ToolSelection_DetailQueries_SelectDetailsToolCorrectly()
128128
public async Task ToolSelection_EnsembleQueries_SelectToolsCorrectly()
129129
{
130130
var ensembleScenarios = TestDataManager.GetTestScenarios()
131-
.Where(s => s.TestCategories.Contains("Ensemble"));
131+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.Ensemble));
132132

133133
foreach (var scenario in ensembleScenarios)
134134
{
@@ -140,7 +140,7 @@ public async Task ToolSelection_EnsembleQueries_SelectToolsCorrectly()
140140
Console.WriteLine($"Selected tool: {selectedTool ?? "None"}");
141141

142142
// Ensemble queries should be handled appropriately
143-
if (scenario.ExpectedTools.Contains("Ensemble"))
143+
if (scenario.ExpectedTools.Contains(TestConstants.Tools.Ensemble))
144144
{
145145
// Check if the query actually contains ensemble keywords that the tool selector recognizes
146146
var queryLower = scenario.Query.ToLowerInvariant();
@@ -149,14 +149,14 @@ public async Task ToolSelection_EnsembleQueries_SelectToolsCorrectly()
149149

150150
if (shouldSelectEnsemble)
151151
{
152-
Assert.AreEqual("ensemble", selectedTool?.ToLowerInvariant(),
152+
Assert.AreEqual(ToolSelector.ToolConstants.EnsembleTool, selectedTool?.ToLowerInvariant(),
153153
$"Expected 'ensemble' tool to be selected for ensemble query: '{scenario.Query}'");
154154
Console.WriteLine($"✓ Ensemble tool correctly selected for: {scenario.Query}");
155155
}
156156
else
157157
{
158158
// Query doesn't contain ensemble keywords, so it defaults to search
159-
Assert.AreEqual("search", selectedTool?.ToLowerInvariant(),
159+
Assert.AreEqual(ToolSelector.ToolConstants.SearchTool, selectedTool?.ToLowerInvariant(),
160160
$"Expected 'search' tool (default) for query without ensemble keywords: '{scenario.Query}'");
161161
Console.WriteLine($"✓ Search tool (default) correctly selected for: {scenario.Query}");
162162
}
@@ -177,7 +177,7 @@ public async Task ToolSelection_EnsembleQueries_SelectToolsCorrectly()
177177
public async Task ToolSelection_BasicSearchQueries_HandleAppropriately()
178178
{
179179
var basicSearchScenarios = TestDataManager.GetTestScenarios()
180-
.Where(s => s.TestCategories.Contains("BasicSearch"));
180+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.BasicSearch));
181181

182182
foreach (var scenario in basicSearchScenarios)
183183
{
@@ -190,10 +190,10 @@ public async Task ToolSelection_BasicSearchQueries_HandleAppropriately()
190190

191191
// Basic search may or may not require specific tool selection
192192
// The important thing is that the selector doesn't crash and returns a valid response
193-
if (scenario.ExpectedTools.Contains("Search"))
193+
if (scenario.ExpectedTools.Contains(TestConstants.Tools.Search))
194194
{
195195
// For basic search scenarios, the tool selector should select the "search" tool or null
196-
Assert.IsTrue(selectedTool?.ToLowerInvariant() == "search" || selectedTool == null,
196+
Assert.IsTrue(selectedTool?.ToLowerInvariant() == ToolSelector.ToolConstants.SearchTool || selectedTool == null,
197197
$"Expected 'search' tool or null to be selected for basic search query: '{scenario.Query}', but got: {selectedTool}");
198198
Console.WriteLine($"✓ Basic search tool selection validated: {selectedTool ?? "null"} for '{scenario.Query}'");
199199
}
@@ -212,7 +212,7 @@ public async Task ToolSelection_BasicSearchQueries_HandleAppropriately()
212212
public async Task ToolSelection_EdgeCases_HandleGracefully()
213213
{
214214
var edgeCaseScenarios = TestDataManager.GetTestScenarios()
215-
.Where(s => s.TestCategories.Contains("EdgeCase"));
215+
.Where(s => s.TestCategories.Contains(TestConstants.Categories.EdgeCase));
216216

217217
foreach (var scenario in edgeCaseScenarios)
218218
{

tests/NLWebNet.Tests/Services/ToolSelectorTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public async Task SelectToolAsync_WhenSearchKeywords_ReturnsSearchTool()
124124
var result = await _toolSelector.SelectToolAsync(request);
125125

126126
// Assert
127-
Assert.AreEqual("search", result);
127+
Assert.AreEqual(ToolSelector.ToolConstants.SearchTool, result);
128128
}
129129

130130
[TestMethod]
@@ -141,7 +141,7 @@ public async Task SelectToolAsync_WhenCompareKeywords_ReturnsCompareTool()
141141
var result = await _toolSelector.SelectToolAsync(request);
142142

143143
// Assert
144-
Assert.AreEqual("compare", result);
144+
Assert.AreEqual(ToolSelector.ToolConstants.CompareTool, result);
145145
}
146146

147147
[TestMethod]
@@ -158,7 +158,7 @@ public async Task SelectToolAsync_WhenDetailsKeywords_ReturnsDetailsTool()
158158
var result = await _toolSelector.SelectToolAsync(request);
159159

160160
// Assert
161-
Assert.AreEqual("details", result);
161+
Assert.AreEqual(ToolSelector.ToolConstants.DetailsTool, result);
162162
}
163163

164164
[TestMethod]
@@ -175,7 +175,7 @@ public async Task SelectToolAsync_WhenEnsembleKeywords_ReturnsEnsembleTool()
175175
var result = await _toolSelector.SelectToolAsync(request);
176176

177177
// Assert
178-
Assert.AreEqual("ensemble", result);
178+
Assert.AreEqual(ToolSelector.ToolConstants.EnsembleTool, result);
179179
}
180180

181181
[TestMethod]
@@ -192,6 +192,6 @@ public async Task SelectToolAsync_WhenGeneralQuery_ReturnsSearchTool()
192192
var result = await _toolSelector.SelectToolAsync(request);
193193

194194
// Assert
195-
Assert.AreEqual("search", result);
195+
Assert.AreEqual(ToolSelector.ToolConstants.SearchTool, result);
196196
}
197197
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
namespace NLWebNet.Tests.TestData;
2+
3+
/// <summary>
4+
/// Constants for test data to avoid magic strings and ensure consistency
5+
/// </summary>
6+
public static class TestConstants
7+
{
8+
/// <summary>
9+
/// Tool names used in test scenarios (capitalized versions for test data)
10+
/// </summary>
11+
public static class Tools
12+
{
13+
public const string Search = "Search";
14+
public const string Compare = "Compare";
15+
public const string Details = "Details";
16+
public const string Ensemble = "Ensemble";
17+
}
18+
19+
/// <summary>
20+
/// Test categories used to group and filter test scenarios
21+
/// </summary>
22+
public static class Categories
23+
{
24+
public const string BasicSearch = "BasicSearch";
25+
public const string Technical = "Technical";
26+
public const string Compare = "Compare";
27+
public const string Details = "Details";
28+
public const string Ensemble = "Ensemble";
29+
public const string EdgeCase = "EdgeCase";
30+
public const string SiteFiltering = "SiteFiltering";
31+
public const string EndToEnd = "EndToEnd";
32+
public const string ToolSelection = "ToolSelection";
33+
public const string Complex = "Complex";
34+
public const string Validation = "Validation";
35+
}
36+
}

tests/NLWebNet.Tests/TestData/TestDataManager.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public static IEnumerable<TestScenario> GetTestScenarios()
1919
Description = "Simple search query testing basic functionality",
2020
Query = "millennium falcon",
2121
ExpectedMode = QueryMode.List,
22-
ExpectedTools = new[] { "Search" },
22+
ExpectedTools = new[] { TestConstants.Tools.Search },
2323
MinExpectedResults = 1,
24-
TestCategories = new[] { "BasicSearch", "EndToEnd" }
24+
TestCategories = new[] { TestConstants.Categories.BasicSearch, TestConstants.Categories.EndToEnd }
2525
};
2626

2727
yield return new TestScenario
@@ -30,9 +30,9 @@ public static IEnumerable<TestScenario> GetTestScenarios()
3030
Description = "Query for technical documentation or API information",
3131
Query = "API documentation for web services",
3232
ExpectedMode = QueryMode.List,
33-
ExpectedTools = new[] { "Search", "Details" },
33+
ExpectedTools = new[] { TestConstants.Tools.Search, TestConstants.Tools.Details },
3434
MinExpectedResults = 1,
35-
TestCategories = new[] { "Technical", "EndToEnd" }
35+
TestCategories = new[] { TestConstants.Categories.Technical, TestConstants.Categories.EndToEnd }
3636
};
3737

3838
yield return new TestScenario
@@ -41,9 +41,9 @@ public static IEnumerable<TestScenario> GetTestScenarios()
4141
Description = "Comparative query that should trigger compare tool",
4242
Query = "compare .NET Core vs .NET Framework",
4343
ExpectedMode = QueryMode.List,
44-
ExpectedTools = new[] { "Compare", "Search" },
44+
ExpectedTools = new[] { TestConstants.Tools.Compare, TestConstants.Tools.Search },
4545
MinExpectedResults = 1,
46-
TestCategories = new[] { "Compare", "ToolSelection" }
46+
TestCategories = new[] { TestConstants.Categories.Compare, TestConstants.Categories.ToolSelection }
4747
};
4848

4949
yield return new TestScenario
@@ -52,9 +52,9 @@ public static IEnumerable<TestScenario> GetTestScenarios()
5252
Description = "Specific detail query for detailed information",
5353
Query = "detailed specifications for Enterprise NX-01",
5454
ExpectedMode = QueryMode.List,
55-
ExpectedTools = new[] { "Details", "Search" },
55+
ExpectedTools = new[] { TestConstants.Tools.Details, TestConstants.Tools.Search },
5656
MinExpectedResults = 1,
57-
TestCategories = new[] { "Details", "ToolSelection" }
57+
TestCategories = new[] { TestConstants.Categories.Details, TestConstants.Categories.ToolSelection }
5858
};
5959

6060
yield return new TestScenario
@@ -63,9 +63,9 @@ public static IEnumerable<TestScenario> GetTestScenarios()
6363
Description = "Complex query requiring ensemble of tools",
6464
Query = "comprehensive analysis of space exploration technologies",
6565
ExpectedMode = QueryMode.List,
66-
ExpectedTools = new[] { "Ensemble", "Search", "Compare" },
66+
ExpectedTools = new[] { TestConstants.Tools.Ensemble, TestConstants.Tools.Search, TestConstants.Tools.Compare },
6767
MinExpectedResults = 2,
68-
TestCategories = new[] { "Ensemble", "Complex" }
68+
TestCategories = new[] { TestConstants.Categories.Ensemble, TestConstants.Categories.Complex }
6969
};
7070

7171
yield return new TestScenario
@@ -76,7 +76,7 @@ public static IEnumerable<TestScenario> GetTestScenarios()
7676
ExpectedMode = QueryMode.List,
7777
ExpectedTools = Array.Empty<string>(),
7878
MinExpectedResults = 0,
79-
TestCategories = new[] { "EdgeCase", "Validation" }
79+
TestCategories = new[] { TestConstants.Categories.EdgeCase, TestConstants.Categories.Validation }
8080
};
8181

8282
yield return new TestScenario
@@ -86,9 +86,9 @@ public static IEnumerable<TestScenario> GetTestScenarios()
8686
Query = "Dune movie",
8787
Site = "scifi-cinema.com",
8888
ExpectedMode = QueryMode.List,
89-
ExpectedTools = new[] { "Search" },
89+
ExpectedTools = new[] { TestConstants.Tools.Search },
9090
MinExpectedResults = 1,
91-
TestCategories = new[] { "SiteFiltering", "EndToEnd" }
91+
TestCategories = new[] { TestConstants.Categories.SiteFiltering, TestConstants.Categories.EndToEnd }
9292
};
9393
}
9494

0 commit comments

Comments
 (0)