@@ -11,7 +11,7 @@ import kotlin.test.assertTrue
1111 * Test that DocQL tool correctly produces metadata that can be parsed by DocQLSearchStats.fromMetadata()
1212 */
1313class DocQLMetadataFlowTest {
14-
14+
1515 @Test
1616 fun `test DocQLSearchStats toMetadata produces correct keys` () {
1717 val stats = DocQLSearchStats (
@@ -27,44 +27,44 @@ class DocQLMetadataFlowTest {
2727 detailedResults = " Detailed results..." ,
2828 smartSummary = " Found 25: AuthService (class), login (function), +23 more"
2929 )
30-
30+
3131 val metadata = stats.toMetadata()
32-
32+
3333 // Verify all required keys are present
3434 assertTrue(metadata.containsKey(" docql_search_type" ), " Should have docql_search_type" )
3535 assertEquals(" SMART_SEARCH" , metadata[" docql_search_type" ])
36-
36+
3737 assertTrue(metadata.containsKey(" docql_query" ), " Should have docql_query" )
3838 assertEquals(" authentication" , metadata[" docql_query" ])
39-
39+
4040 assertTrue(metadata.containsKey(" docql_document_path" ), " Should have docql_document_path" )
4141 assertEquals(" /docs/auth.md" , metadata[" docql_document_path" ])
42-
42+
4343 assertTrue(metadata.containsKey(" docql_channels" ), " Should have docql_channels" )
4444 assertEquals(" code,docs" , metadata[" docql_channels" ])
45-
45+
4646 assertTrue(metadata.containsKey(" docql_docs_searched" ), " Should have docql_docs_searched" )
4747 assertEquals(" 15" , metadata[" docql_docs_searched" ])
48-
48+
4949 assertTrue(metadata.containsKey(" docql_raw_results" ), " Should have docql_raw_results" )
5050 assertEquals(" 100" , metadata[" docql_raw_results" ])
51-
51+
5252 assertTrue(metadata.containsKey(" docql_reranked_results" ), " Should have docql_reranked_results" )
5353 assertEquals(" 25" , metadata[" docql_reranked_results" ])
54-
54+
5555 assertTrue(metadata.containsKey(" docql_truncated" ), " Should have docql_truncated" )
5656 assertEquals(" true" , metadata[" docql_truncated" ])
57-
57+
5858 assertTrue(metadata.containsKey(" docql_used_fallback" ), " Should have docql_used_fallback" )
5959 assertEquals(" false" , metadata[" docql_used_fallback" ])
60-
60+
6161 assertTrue(metadata.containsKey(" docql_detailed_results" ), " Should have docql_detailed_results" )
6262 assertEquals(" Detailed results..." , metadata[" docql_detailed_results" ])
63-
63+
6464 assertTrue(metadata.containsKey(" docql_smart_summary" ), " Should have docql_smart_summary" )
6565 assertEquals(" Found 25: AuthService (class), login (function), +23 more" , metadata[" docql_smart_summary" ])
6666 }
67-
67+
6868 @Test
6969 fun `test ToolResult Success correctly stores metadata` () {
7070 val stats = DocQLSearchStats (
@@ -73,18 +73,28 @@ class DocQLMetadataFlowTest {
7373 documentsSearched = 10 ,
7474 totalRawResults = 50 ,
7575 resultsAfterRerank = 20 ,
76- smartSummary = " Found 20 results"
76+ smartSummary = " Found 20 results" ,
77+ documentPath = " " ,
78+ channels = emptyList(),
79+ truncated = false ,
80+ usedFallback = false ,
81+ rerankerConfig = null ,
82+ scoringInfo = null ,
83+ keywordExpansion = null ,
84+ llmRerankerInfo = null ,
85+ detailedResults = " " ,
86+ fullResults = null ,
7787 )
78-
88+
7989 val toolResult = ToolResult .Success (" Found 20 results" , stats.toMetadata())
80-
90+
8191 // Verify metadata is accessible
8292 val extractedMetadata = toolResult.extractMetadata()
8393 assertNotNull(extractedMetadata[" docql_search_type" ])
8494 assertEquals(" SMART_SEARCH" , extractedMetadata[" docql_search_type" ])
8595 assertEquals(" test query" , extractedMetadata[" docql_query" ])
8696 }
87-
97+
8898 @Test
8999 fun `test fromMetadata correctly parses metadata from ToolResult` () {
90100 val originalStats = DocQLSearchStats (
@@ -100,16 +110,16 @@ class DocQLMetadataFlowTest {
100110 detailedResults = " Detailed results..." ,
101111 smartSummary = " Found 25: AuthService (class), login (function), +23 more"
102112 )
103-
113+
104114 // Simulate what DocQLTool does
105115 val toolResult = ToolResult .Success (originalStats.smartSummary ? : " " , originalStats.toMetadata())
106-
116+
107117 // Simulate what ToolOrchestrator does
108118 val metadata = toolResult.extractMetadata()
109-
119+
110120 // Simulate what ComposeRenderer.renderToolResult does
111121 val parsedStats = DocQLSearchStats .fromMetadata(metadata)
112-
122+
113123 // Verify parsing succeeded
114124 assertNotNull(parsedStats, " fromMetadata should return non-null stats" )
115125 assertEquals(originalStats.searchType, parsedStats.searchType)
@@ -124,16 +134,16 @@ class DocQLMetadataFlowTest {
124134 assertEquals(originalStats.detailedResults, parsedStats.detailedResults)
125135 assertEquals(originalStats.smartSummary, parsedStats.smartSummary)
126136 }
127-
137+
128138 @Test
129139 fun `test fromMetadata returns null for non-DocQL metadata` () {
130140 val metadata = mapOf (
131141 " some_key" to " some_value" ,
132142 " another_key" to " another_value"
133143 )
134-
144+
135145 val stats = DocQLSearchStats .fromMetadata(metadata)
136-
146+
137147 // Should return null because docql_search_type is missing
138148 assertEquals(null , stats)
139149 }
0 commit comments