Skip to content

Commit 2290aea

Browse files
committed
test(docql): add missing default values to DocQLSearchStats
Ensure all DocQLSearchStats test instances include required default values for new fields, improving test reliability and coverage.
1 parent 239ad76 commit 2290aea

File tree

3 files changed

+63
-38
lines changed

3 files changed

+63
-38
lines changed

mpp-ui/src/jvmTest/kotlin/cc/unitmesh/devins/ui/compose/agent/DocQLMetadataFlowTest.kt

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import kotlin.test.assertTrue
1111
* Test that DocQL tool correctly produces metadata that can be parsed by DocQLSearchStats.fromMetadata()
1212
*/
1313
class 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
}

mpp-ui/src/jvmTest/kotlin/cc/unitmesh/devins/ui/compose/agent/DocQLStatsFlowTest.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import kotlin.test.assertNull
1717
* 5. fromMessageMetadata() deserializes docqlStats from MessageMetadata
1818
*/
1919
class DocQLStatsFlowTest {
20-
20+
2121
@Test
2222
fun `test MessageMetadata serialization and deserialization of DocQL stats`() {
2323
// Simulate what toMessageMetadata does
@@ -34,7 +34,7 @@ class DocQLStatsFlowTest {
3434
detailedResults = "Detailed results...",
3535
smartSummary = "Found 25: AuthService (class), login (function), +23 more"
3636
)
37-
37+
3838
// Create MessageMetadata like toMessageMetadata does
3939
val messageMetadata = MessageMetadata(
4040
itemType = TimelineItemType.COMBINED_TOOL,
@@ -57,7 +57,7 @@ class DocQLStatsFlowTest {
5757
docqlDetailedResults = stats.detailedResults,
5858
docqlSmartSummary = stats.smartSummary
5959
)
60-
60+
6161
// Verify all fields are set
6262
assertEquals("SMART_SEARCH", messageMetadata.docqlSearchType)
6363
assertEquals("authentication", messageMetadata.docqlQuery)
@@ -68,11 +68,11 @@ class DocQLStatsFlowTest {
6868
assertEquals(25, messageMetadata.docqlRerankedResults)
6969
assertEquals(true, messageMetadata.docqlTruncated)
7070
assertEquals(false, messageMetadata.docqlUsedFallback)
71-
71+
7272
// Now simulate what fromMessageMetadata does
7373
val searchTypeStr = messageMetadata.docqlSearchType
7474
assertNotNull(searchTypeStr, "docqlSearchType should not be null")
75-
75+
7676
val restoredStats = if (searchTypeStr != null) {
7777
val searchType = try {
7878
DocQLSearchStats.SearchType.valueOf(searchTypeStr)
@@ -84,18 +84,19 @@ class DocQLStatsFlowTest {
8484
searchType = it,
8585
query = messageMetadata.docqlQuery ?: "",
8686
documentPath = messageMetadata.docqlDocumentPath,
87-
channels = messageMetadata.docqlChannels?.split(",")?.filter { ch -> ch.isNotBlank() } ?: emptyList(),
87+
channels = messageMetadata.docqlChannels?.split(",")?.filter { ch -> ch.isNotBlank() }
88+
?: emptyList(),
8889
documentsSearched = messageMetadata.docqlDocsSearched ?: 0,
8990
totalRawResults = messageMetadata.docqlRawResults ?: 0,
9091
resultsAfterRerank = messageMetadata.docqlRerankedResults ?: 0,
9192
truncated = messageMetadata.docqlTruncated ?: false,
9293
usedFallback = messageMetadata.docqlUsedFallback ?: false,
93-
detailedResults = messageMetadata.docqlDetailedResults,
94+
detailedResults = messageMetadata.docqlDetailedResults ?: "",
9495
smartSummary = messageMetadata.docqlSmartSummary
9596
)
9697
}
9798
} else null
98-
99+
99100
// Verify restored stats
100101
assertNotNull(restoredStats, "Restored stats should not be null")
101102
assertEquals(stats.searchType, restoredStats.searchType)
@@ -110,24 +111,24 @@ class DocQLStatsFlowTest {
110111
assertEquals(stats.detailedResults, restoredStats.detailedResults)
111112
assertEquals(stats.smartSummary, restoredStats.smartSummary)
112113
}
113-
114+
114115
@Test
115116
fun `test MessageMetadata without DocQL stats`() {
116117
val messageMetadata = MessageMetadata(
117118
itemType = TimelineItemType.COMBINED_TOOL,
118119
toolName = "read_file",
119120
success = true
120121
)
121-
122+
122123
// docqlSearchType should be null for non-DocQL tools
123124
assertNull(messageMetadata.docqlSearchType)
124-
125+
125126
// Restoration should return null
126127
val searchTypeStr = messageMetadata.docqlSearchType
127128
val restoredStats = if (searchTypeStr != null) {
128129
DocQLSearchStats.SearchType.valueOf(searchTypeStr)
129130
} else null
130-
131+
131132
assertNull(restoredStats)
132133
}
133134
}

mpp-ui/src/jvmTest/kotlin/cc/unitmesh/devins/ui/compose/agent/DocQLStatsTest.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,21 @@ class DocQLStatsTest {
8484
fun `test minimal DocQLSearchStats roundtrip`() {
8585
val original = DocQLSearchStats(
8686
searchType = DocQLSearchStats.SearchType.DIRECT_QUERY,
87-
query = "simple query"
87+
query = "simple query",
88+
documentPath = "",
89+
channels = emptyList(),
90+
documentsSearched = 0,
91+
totalRawResults = 0,
92+
resultsAfterRerank = 0,
93+
truncated = false,
94+
usedFallback = false,
95+
rerankerConfig = null,
96+
scoringInfo = null,
97+
keywordExpansion = null,
98+
llmRerankerInfo = null,
99+
detailedResults = "",
100+
smartSummary = null,
101+
fullResults = null,
88102
)
89103

90104
val metadata = original.toMetadata()

0 commit comments

Comments
 (0)