83 lines
2.6 KiB
Elixir
83 lines
2.6 KiB
Elixir
defmodule BDS.Desktop.ShellLive.SettingsEditor.MCPConfigTest do
|
|
use ExUnit.Case, async: false
|
|
|
|
alias BDS.Desktop.ShellLive.SettingsEditor.MCPConfig
|
|
|
|
describe "mcp_rows/0" do
|
|
test "returns 7 agent rows" do
|
|
rows = MCPConfig.mcp_rows()
|
|
assert length(rows) == 7
|
|
end
|
|
|
|
test "has correct agent order" do
|
|
rows = MCPConfig.mcp_rows()
|
|
ids = Enum.map(rows, & &1.id)
|
|
assert ids == [:claude_code, :claude_desktop, :github_copilot, :gemini_cli, :opencode, :mistral_vibe, :openai_codex]
|
|
end
|
|
|
|
test "Claude Code and GitHub Copilot are supported" do
|
|
rows = MCPConfig.mcp_rows()
|
|
claude = Enum.find(rows, &(&1.id == :claude_code))
|
|
copilot = Enum.find(rows, &(&1.id == :github_copilot))
|
|
assert claude.supported?
|
|
assert copilot.supported?
|
|
end
|
|
|
|
test "other agents are not supported" do
|
|
rows = MCPConfig.mcp_rows()
|
|
unsupported = Enum.reject(rows, & &1.supported?)
|
|
assert length(unsupported) == 5
|
|
assert Enum.all?(unsupported, &(!&1.supported?))
|
|
end
|
|
|
|
test "unsupported agents have nil config_path" do
|
|
rows = MCPConfig.mcp_rows()
|
|
unsupported = Enum.filter(rows, &(!&1.supported?))
|
|
assert Enum.all?(unsupported, &is_nil(&1.config_path))
|
|
end
|
|
|
|
test "unsupported agents have configured? false" do
|
|
rows = MCPConfig.mcp_rows()
|
|
unsupported = Enum.filter(rows, &(!&1.supported?))
|
|
assert Enum.all?(unsupported, &(&1.configured? == false))
|
|
end
|
|
end
|
|
|
|
describe "toggle_mcp_agent/4" do
|
|
test "unsupported agent appends not-supported error" do
|
|
socket = %{assigns: %{workbench: nil}}
|
|
reload = fn s, _wb -> send(self(), :reloaded); s end
|
|
append_output = fn _socket, _title, _msg, _nil, _kind ->
|
|
send(self(), :error_appended)
|
|
socket
|
|
end
|
|
|
|
MCPConfig.toggle_mcp_agent(socket, "gemini_cli", reload, append_output)
|
|
|
|
assert_received :error_appended
|
|
assert_received :reloaded
|
|
end
|
|
|
|
test "unsupported agent does not touch AgentConfig" do
|
|
socket = %{assigns: %{workbench: nil}}
|
|
reload = fn s, _wb -> s end
|
|
append_output = fn _socket, _title, _msg, _nil, _kind -> socket end
|
|
|
|
assert MCPConfig.toggle_mcp_agent(socket, "opencode", reload, append_output) == socket
|
|
end
|
|
|
|
test "unknown agent is treated as unsupported" do
|
|
socket = %{assigns: %{workbench: nil}}
|
|
reload = fn s, _wb -> s end
|
|
append_output = fn _socket, _title, _msg, _nil, _kind ->
|
|
send(self(), :error_appended)
|
|
socket
|
|
end
|
|
|
|
MCPConfig.toggle_mcp_agent(socket, "nonexistent_agent", reload, append_output)
|
|
|
|
assert_received :error_appended
|
|
end
|
|
end
|
|
end
|