90 lines
2.9 KiB
Kotlin
90 lines
2.9 KiB
Kotlin
import io.modelcontextprotocol.kotlin.sdk.client.Client
|
|
import io.modelcontextprotocol.kotlin.sdk.types.ReadResourceRequest
|
|
import io.modelcontextprotocol.kotlin.sdk.types.ReadResourceRequestParams
|
|
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
|
|
import io.modelcontextprotocol.kotlin.sdk.types.TextResourceContents
|
|
import kotlinx.coroutines.runBlocking
|
|
import kotlin.test.Test
|
|
import kotlin.test.assertEquals
|
|
import kotlin.test.assertIs
|
|
import kotlin.test.assertNotNull
|
|
import kotlin.test.assertNull
|
|
import kotlin.test.assertTrue
|
|
|
|
class SseServerIntegrationTest {
|
|
|
|
private val client: Client = TestEnvironment.client
|
|
|
|
@Test
|
|
fun `should list tools`(): Unit = runBlocking {
|
|
// when
|
|
val listToolsResult = client.listTools()
|
|
|
|
// then
|
|
assertNull(listToolsResult.meta)
|
|
|
|
val tools = listToolsResult.tools
|
|
assertEquals(actual = tools.size, expected = 1)
|
|
assertEquals(expected = listOf("kotlin-sdk-tool"), actual = tools.map { it.name })
|
|
}
|
|
|
|
@Test
|
|
fun `should list prompts`(): Unit = runBlocking {
|
|
// when
|
|
val listPromptsResult = client.listPrompts()
|
|
|
|
// then
|
|
assertNull(listPromptsResult.meta)
|
|
|
|
val prompts = listPromptsResult.prompts
|
|
|
|
assertEquals(expected = listOf("Kotlin Developer"), actual = prompts.map { it.name })
|
|
}
|
|
|
|
@Test
|
|
fun `should list resources`(): Unit = runBlocking {
|
|
val listResourcesResult = client.listResources()
|
|
|
|
// then
|
|
assertNull(listResourcesResult.meta)
|
|
val resources = listResourcesResult.resources
|
|
|
|
assertEquals(expected = listOf("Web Search"), actual = resources.map { it.name })
|
|
}
|
|
|
|
@Test
|
|
fun `should get resource`(): Unit = runBlocking {
|
|
val testResourceUri = "https://search.com/"
|
|
val getResourcesResult = client.readResource(
|
|
ReadResourceRequest(ReadResourceRequestParams(uri = testResourceUri)),
|
|
)
|
|
|
|
// then
|
|
assertEquals(expected = null, actual = getResourcesResult.meta)
|
|
val contents = getResourcesResult.contents
|
|
assertEquals(expected = 1, actual = contents.size)
|
|
assertTrue {
|
|
contents.contains(
|
|
TextResourceContents("Placeholder content for $testResourceUri", testResourceUri, "text/html"),
|
|
)
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun `should call tool`(): Unit = runBlocking {
|
|
// when
|
|
val toolResult = client.callTool(
|
|
name = "kotlin-sdk-tool",
|
|
arguments = emptyMap(),
|
|
)
|
|
|
|
// then
|
|
assertNotNull(toolResult)
|
|
assertNull(toolResult.meta)
|
|
val content = toolResult.content.single()
|
|
assertIs<TextContent>(content, "Tool result should be a text content")
|
|
|
|
assertEquals(expected = "Hello, world!", actual = content.text)
|
|
assertEquals(expected = "text", actual = "${content.type}".lowercase())
|
|
}
|
|
}
|