Skip to content

Commit 17f72b8

Browse files
committed
fixup! Introduce Kotlin integration tests
Signed-off-by: Sergey Karpov <sergey.karpov@jetbrains.com>
1 parent aeb0f4a commit 17f72b8

15 files changed

+699
-466
lines changed

kotlin-sdk-test/src/jvmTest/kotlin/io/modelcontextprotocol/kotlin/sdk/integration/kotlin/KotlinTestBase.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,12 @@ abstract class KotlinTestBase {
4545
}
4646

4747
protected suspend fun setupClient() {
48-
val transport = SseClientTransport(HttpClient(CIO) {
49-
install(SSE)
50-
}, "http://$host:$port")
48+
val transport = SseClientTransport(
49+
HttpClient(CIO) {
50+
install(SSE)
51+
},
52+
"http://$host:$port",
53+
)
5154
client = Client(
5255
Implementation("test", "1.0"),
5356
)
@@ -59,7 +62,7 @@ abstract class KotlinTestBase {
5962

6063
server = Server(
6164
Implementation(name = "test-server", version = "1.0"),
62-
ServerOptions(capabilities = capabilities)
65+
ServerOptions(capabilities = capabilities),
6366
)
6467

6568
configureServer()

kotlin-sdk-test/src/jvmTest/kotlin/io/modelcontextprotocol/kotlin/sdk/integration/kotlin/PromptEdgeCasesTest.kt

Lines changed: 71 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package io.modelcontextprotocol.kotlin.sdk.integration.kotlin
22

3+
import io.modelcontextprotocol.kotlin.sdk.GetPromptRequest
4+
import io.modelcontextprotocol.kotlin.sdk.GetPromptResult
5+
import io.modelcontextprotocol.kotlin.sdk.PromptArgument
6+
import io.modelcontextprotocol.kotlin.sdk.PromptMessage
7+
import io.modelcontextprotocol.kotlin.sdk.Role
8+
import io.modelcontextprotocol.kotlin.sdk.ServerCapabilities
9+
import io.modelcontextprotocol.kotlin.sdk.TextContent
310
import io.modelcontextprotocol.kotlin.sdk.integration.utils.TestUtils.runTest
4-
import io.modelcontextprotocol.kotlin.sdk.*
511
import kotlinx.coroutines.launch
612
import kotlinx.coroutines.runBlocking
713
import org.junit.jupiter.api.Test
@@ -28,13 +34,11 @@ class PromptEdgeCasesTest : KotlinTestBase() {
2834
private val specialCharsPromptDescription = "A prompt with special characters"
2935
private val specialCharsContent = "!@#$%^&*()_+{}|:\"<>?~`-=[]\\;',./\n\t"
3036

31-
override fun configureServerCapabilities(): ServerCapabilities {
32-
return ServerCapabilities(
33-
prompts = ServerCapabilities.Prompts(
34-
listChanged = true
35-
)
36-
)
37-
}
37+
override fun configureServerCapabilities(): ServerCapabilities = ServerCapabilities(
38+
prompts = ServerCapabilities.Prompts(
39+
listChanged = true,
40+
),
41+
)
3842

3943
override fun configureServer() {
4044
server.addPrompt(
@@ -44,9 +48,9 @@ class PromptEdgeCasesTest : KotlinTestBase() {
4448
PromptArgument(
4549
name = "name",
4650
description = "The name to greet",
47-
required = true
48-
)
49-
)
51+
required = true,
52+
),
53+
),
5054
) { request ->
5155
val name = request.arguments?.get("name") ?: "World"
5256

@@ -55,13 +59,13 @@ class PromptEdgeCasesTest : KotlinTestBase() {
5559
messages = listOf(
5660
PromptMessage(
5761
role = Role.user,
58-
content = TextContent(text = "Hello, $name!")
62+
content = TextContent(text = "Hello, $name!"),
5963
),
6064
PromptMessage(
6165
role = Role.assistant,
62-
content = TextContent(text = "Greetings, $name! How can I assist you today?")
63-
)
64-
)
66+
content = TextContent(text = "Greetings, $name! How can I assist you today?"),
67+
),
68+
),
6569
)
6670
}
6771

@@ -78,8 +82,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
7882
PromptArgument(name = "arg7", description = "Argument 7", required = false),
7983
PromptArgument(name = "arg8", description = "Argument 8", required = false),
8084
PromptArgument(name = "arg9", description = "Argument 9", required = false),
81-
PromptArgument(name = "arg10", description = "Argument 10", required = false)
82-
)
85+
PromptArgument(name = "arg10", description = "Argument 10", required = false),
86+
),
8387
) { request ->
8488
// validate required arguments
8589
val requiredArgs = listOf("arg1", "arg2", "arg3")
@@ -103,13 +107,19 @@ class PromptEdgeCasesTest : KotlinTestBase() {
103107
messages = listOf(
104108
PromptMessage(
105109
role = Role.user,
106-
content = TextContent(text = "Arguments: ${args.entries.joinToString { "${it.key}=${it.value}" }}")
110+
content = TextContent(
111+
text = "Arguments: ${
112+
args.entries.joinToString {
113+
"${it.key}=${it.value}"
114+
}
115+
}",
116+
),
107117
),
108118
PromptMessage(
109119
role = Role.assistant,
110-
content = TextContent(text = "Received ${args.size} arguments")
111-
)
112-
)
120+
content = TextContent(text = "Received ${args.size} arguments"),
121+
),
122+
),
113123
)
114124
}
115125

@@ -121,9 +131,9 @@ class PromptEdgeCasesTest : KotlinTestBase() {
121131
PromptArgument(
122132
name = "size",
123133
description = "Size multiplier",
124-
required = false
125-
)
126-
)
134+
required = false,
135+
),
136+
),
127137
) { request ->
128138
val size = request.arguments?.get("size")?.toIntOrNull() ?: 1
129139
val content = largePromptContent.repeat(size)
@@ -133,13 +143,13 @@ class PromptEdgeCasesTest : KotlinTestBase() {
133143
messages = listOf(
134144
PromptMessage(
135145
role = Role.user,
136-
content = TextContent(text = "Generate a large response")
146+
content = TextContent(text = "Generate a large response"),
137147
),
138148
PromptMessage(
139149
role = Role.assistant,
140-
content = TextContent(text = content)
141-
)
142-
)
150+
content = TextContent(text = content),
151+
),
152+
),
143153
)
144154
}
145155

@@ -150,9 +160,9 @@ class PromptEdgeCasesTest : KotlinTestBase() {
150160
PromptArgument(
151161
name = "special",
152162
description = "Special characters to include",
153-
required = false
154-
)
155-
)
163+
required = false,
164+
),
165+
),
156166
) { request ->
157167
val special = request.arguments?.get("special") ?: specialCharsContent
158168

@@ -161,13 +171,13 @@ class PromptEdgeCasesTest : KotlinTestBase() {
161171
messages = listOf(
162172
PromptMessage(
163173
role = Role.user,
164-
content = TextContent(text = "Special characters: $special")
174+
content = TextContent(text = "Special characters: $special"),
165175
),
166176
PromptMessage(
167177
role = Role.assistant,
168-
content = TextContent(text = "Received special characters: $special")
169-
)
170-
)
178+
content = TextContent(text = "Received special characters: $special"),
179+
),
180+
),
171181
)
172182
}
173183
}
@@ -179,8 +189,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
179189
val result = client.getPrompt(
180190
GetPromptRequest(
181191
name = basicPromptName,
182-
arguments = mapOf("name" to testName)
183-
)
192+
arguments = mapOf("name" to testName),
193+
),
184194
)
185195

186196
assertNotNull(result, "Get prompt result should not be null")
@@ -201,7 +211,7 @@ class PromptEdgeCasesTest : KotlinTestBase() {
201211
assertEquals(
202212
"Greetings, $testName! How can I assist you today?",
203213
assistantContent.text,
204-
"Assistant message content should match"
214+
"Assistant message content should match",
205215
)
206216
}
207217
}
@@ -214,8 +224,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
214224
val result = client.getPrompt(
215225
GetPromptRequest(
216226
name = complexPromptName,
217-
arguments = arguments
218-
)
227+
arguments = arguments,
228+
),
219229
)
220230

221231
assertNotNull(result, "Get prompt result should not be null")
@@ -241,7 +251,7 @@ class PromptEdgeCasesTest : KotlinTestBase() {
241251
assertEquals(
242252
"Received 10 arguments",
243253
assistantContent.text,
244-
"Assistant message should indicate 10 arguments"
254+
"Assistant message should indicate 10 arguments",
245255
)
246256
}
247257
}
@@ -252,8 +262,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
252262
val result = client.getPrompt(
253263
GetPromptRequest(
254264
name = largePromptName,
255-
arguments = mapOf("size" to "1")
256-
)
265+
arguments = mapOf("size" to "1"),
266+
),
257267
)
258268

259269
assertNotNull(result, "Get prompt result should not be null")
@@ -276,8 +286,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
276286
val result = client.getPrompt(
277287
GetPromptRequest(
278288
name = specialCharsPromptName,
279-
arguments = mapOf("special" to specialCharsContent)
280-
)
289+
arguments = mapOf("special" to specialCharsContent),
290+
),
281291
)
282292

283293
assertNotNull(result, "Get prompt result should not be null")
@@ -299,7 +309,7 @@ class PromptEdgeCasesTest : KotlinTestBase() {
299309
val assistantText = assistantContent.text ?: ""
300310
assertTrue(
301311
assistantText.contains(specialCharsContent),
302-
"Assistant message should contain special characters"
312+
"Assistant message should contain special characters",
303313
)
304314
}
305315
}
@@ -312,18 +322,18 @@ class PromptEdgeCasesTest : KotlinTestBase() {
312322
client.getPrompt(
313323
GetPromptRequest(
314324
name = complexPromptName,
315-
arguments = mapOf("arg4" to "value4", "arg5" to "value5")
316-
)
325+
arguments = mapOf("arg4" to "value4", "arg5" to "value5"),
326+
),
317327
)
318328
}
319329
}
320330

321331
assertTrue(
322332
exception.message?.contains("arg1") == true ||
323-
exception.message?.contains("arg2") == true ||
324-
exception.message?.contains("arg3") == true ||
325-
exception.message?.contains("required") == true,
326-
"Exception should mention missing required arguments"
333+
exception.message?.contains("arg2") == true ||
334+
exception.message?.contains("arg3") == true ||
335+
exception.message?.contains("required") == true,
336+
"Exception should mention missing required arguments",
327337
)
328338
}
329339
}
@@ -354,8 +364,8 @@ class PromptEdgeCasesTest : KotlinTestBase() {
354364
val result = client.getPrompt(
355365
GetPromptRequest(
356366
name = promptName,
357-
arguments = arguments
358-
)
367+
arguments = arguments,
368+
),
359369
)
360370

361371
synchronized(results) {
@@ -384,19 +394,19 @@ class PromptEdgeCasesTest : KotlinTestBase() {
384394
client.getPrompt(
385395
GetPromptRequest(
386396
name = nonExistentPromptName,
387-
arguments = mapOf("name" to "Test")
388-
)
397+
arguments = mapOf("name" to "Test"),
398+
),
389399
)
390400
}
391401
}
392402

393403
assertTrue(
394404
exception.message?.contains("not found") == true ||
395-
exception.message?.contains("does not exist") == true ||
396-
exception.message?.contains("unknown") == true ||
397-
exception.message?.contains("error") == true,
398-
"Exception should indicate prompt not found"
405+
exception.message?.contains("does not exist") == true ||
406+
exception.message?.contains("unknown") == true ||
407+
exception.message?.contains("error") == true,
408+
"Exception should indicate prompt not found",
399409
)
400410
}
401411
}
402-
}
412+
}

0 commit comments

Comments
 (0)