fix(mcp): show Installed state for catalog entries already installed (#1405)

This commit is contained in:
m57 authored and GitHub committed 2026-09-30 13:15:30 +03:00
1 parent 81b5e6d84b
commit 6810ef02fe
6 files changed
+92 -22

No files matched your search

@@ -0,0 +1,37 @@
package com.m57.hermescontrol.data.model
import kotlinx.serialization.json.Json
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test
class McpServerParsingTest {
private val json = Json { ignoreUnknownKeys = true }
@Test
fun `servers decode tools as null, list, or filter object`() {
val body =
"""{"servers":[
{"name":"a","enabled":true,"tools":null},
{"name":"b","enabled":true,"tools":["x","y"]},
{"name":"c","enabled":true,"tools":{"exclude":["docs","*_radar*"]}},
{"name":"d","enabled":true,"tools":{"include":["one","two","three"]}}
]}"""
val servers = json.decodeFromString<McpServersResponse>(body).servers
assertEquals(listOf<Int?>(null, 2, null, 3), servers.map { it.toolCount })
}
@Test
fun `catalog entry decodes backend required_env and installed flags`() {
val body =
"""{"entries":[{"name":"gh","description":"d","source":"nous","transport":"stdio",
"required_env":[{"name":"GH_TOKEN","prompt":"Token","required":true}],
"installed":true,"enabled":false,"needs_install":false}],"diagnostics":[]}"""
val entry = json.decodeFromString<McpCatalogResponse>(body).entries.single()
assertTrue(entry.installed)
assertEquals("GH_TOKEN", entry.env?.single()?.key)
assertEquals("Token", entry.env?.single()?.label)
assertNull(entry.url)
}
}