refactor(mcp): extract AddServerRequestBuilder and McpImportSummary
Extract request building and import summary formatting helpers. Wire into McpServersViewModel with unit test coverage.
This commit is contained in:
1 parent
9eaf9663f3
commit
4a93772b93
5 files changed
+195
-39
No files matched your search
@@ -0,0 +1,95 @@
|
||||
package com.m57.hermescontrol.ui.mcp
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Test
|
||||
|
||||
class AddServerRequestBuilderTest {
|
||||
@Test
|
||||
fun `build HTTP mode creates request with url and auth`() {
|
||||
val request =
|
||||
AddServerRequestBuilder.build(
|
||||
name = " weather-server ",
|
||||
mode = AddServerMode.HTTP,
|
||||
url = " https://api.weather.com/mcp ",
|
||||
command = "ignored-cmd",
|
||||
args = "ignored-arg",
|
||||
auth = "header",
|
||||
bearerToken = " secret-token ",
|
||||
)
|
||||
assertEquals("weather-server", request.name)
|
||||
assertEquals("https://api.weather.com/mcp", request.url)
|
||||
assertNull(request.command)
|
||||
assertNull(request.args)
|
||||
assertEquals("header", request.auth)
|
||||
assertEquals("secret-token", request.bearerToken)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `build HTTP mode with none auth nulls auth and bearerToken`() {
|
||||
val request =
|
||||
AddServerRequestBuilder.build(
|
||||
name = "public-server",
|
||||
mode = AddServerMode.HTTP,
|
||||
url = "https://example.com/mcp",
|
||||
command = "",
|
||||
args = "",
|
||||
auth = "none",
|
||||
bearerToken = "should-be-ignored",
|
||||
)
|
||||
assertEquals("public-server", request.name)
|
||||
assertEquals("https://example.com/mcp", request.url)
|
||||
assertNull(request.auth)
|
||||
assertNull(request.bearerToken)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `build Stdio mode creates request with command and parsed args`() {
|
||||
val request =
|
||||
AddServerRequestBuilder.build(
|
||||
name = "local-tools",
|
||||
mode = AddServerMode.Stdio,
|
||||
url = "https://ignored.com",
|
||||
command = " python3 ",
|
||||
args = " -m mcp_server --debug ",
|
||||
auth = "header",
|
||||
bearerToken = "token",
|
||||
)
|
||||
assertEquals("local-tools", request.name)
|
||||
assertNull(request.url)
|
||||
assertEquals("python3", request.command)
|
||||
assertEquals(listOf("-m", "mcp_server", "--debug"), request.args)
|
||||
assertNull(request.auth)
|
||||
assertNull(request.bearerToken)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `build Stdio mode with empty args nulls args`() {
|
||||
val request =
|
||||
AddServerRequestBuilder.build(
|
||||
name = "npx-server",
|
||||
mode = AddServerMode.Stdio,
|
||||
url = "",
|
||||
command = "npx server",
|
||||
args = " ",
|
||||
auth = "none",
|
||||
bearerToken = "",
|
||||
)
|
||||
assertEquals("npx server", request.command)
|
||||
assertNull(request.args)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `build from McpServersUiState populates fields correctly`() {
|
||||
val state =
|
||||
McpServersUiState(
|
||||
addServerName = "state-server",
|
||||
addMode = AddServerMode.HTTP,
|
||||
addServerUrl = "https://state.com",
|
||||
addServerAuth = "none",
|
||||
)
|
||||
val request = AddServerRequestBuilder.build(state)
|
||||
assertEquals("state-server", request.name)
|
||||
assertEquals("https://state.com", request.url)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.m57.hermescontrol.ui.mcp
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class McpImportSummaryTest {
|
||||
@Test
|
||||
fun `formatSummary returns success message when zero errors`() {
|
||||
val result = McpImportSummary.formatSummary(3, emptyList())
|
||||
assertEquals("Successfully imported 3 server(s)", result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `formatSummary returns partial success message when some failed`() {
|
||||
val result = McpImportSummary.formatSummary(2, listOf("serverA: timeout", "serverB: 404"))
|
||||
assertEquals("Imported 2 server(s), 2 failed: serverA: timeout; serverB: 404", result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `formatSummary returns failure message when all failed`() {
|
||||
val result = McpImportSummary.formatSummary(0, listOf("serverA: connection refused"))
|
||||
assertEquals("Failed to import: serverA: connection refused", result)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user