xworkmate-bridge/internal/mounts/reconcile_test.go
2026-04-09 09:49:48 +08:00

116 lines
3.6 KiB
Go

package mounts
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestReconcileCodexAppliesManagedBlockAndPreservesUserEntries(t *testing.T) {
tempDir := t.TempDir()
configuredBinary := filepath.Join(tempDir, "custom-codex")
if err := os.WriteFile(configuredBinary, []byte("#!/bin/sh\nexit 0\n"), 0o755); err != nil {
t.Fatalf("write configured binary: %v", err)
}
configPath := filepath.Join(tempDir, "config.toml")
if err := os.WriteFile(configPath, []byte(`
[mcp_servers.user_server]
command = "user-mcp"
`), 0o644); err != nil {
t.Fatalf("write config: %v", err)
}
result := Reconcile(Request{
Config: Config{
AutoSync: true,
ManagedMCPServers: []ManagedMCPServer{
{ID: "xworkmate_server", Command: "xworkmate-mcp", Args: []string{"--port", "7777"}, Enabled: true},
},
},
ConfiguredCodexCLIPath: configuredBinary,
CodexHome: tempDir,
})
content, err := os.ReadFile(configPath)
if err != nil {
t.Fatalf("read config: %v", err)
}
if !strings.Contains(string(content), `[mcp_servers.user_server]`) {
t.Fatalf("expected user entry preserved: %s", string(content))
}
if !strings.Contains(string(content), `[mcp_servers.xworkmate_server]`) {
t.Fatalf("expected managed entry written: %s", string(content))
}
if strings.Count(string(content), codexManagedMCPBlockStart) != 1 {
t.Fatalf("expected single managed block: %s", string(content))
}
if result.MountTargets[1].ManagedMCPCount != 1 {
t.Fatalf("expected codex managed count 1, got %d", result.MountTargets[1].ManagedMCPCount)
}
}
func TestReconcileOpencodeAppliesManagedBlockAndPreservesUserEntries(t *testing.T) {
tempDir := t.TempDir()
binDir := t.TempDir()
originalPath := os.Getenv("PATH")
t.Setenv("PATH", binDir+string(os.PathListSeparator)+originalPath)
if err := os.WriteFile(filepath.Join(binDir, "opencode"), []byte("#!/bin/sh\nexit 0\n"), 0o755); err != nil {
t.Fatalf("write opencode binary: %v", err)
}
configPath := filepath.Join(tempDir, "config.toml")
if err := os.WriteFile(configPath, []byte(`
[model]
name = "user-default"
`), 0o644); err != nil {
t.Fatalf("write config: %v", err)
}
result := Reconcile(Request{
Config: Config{
AutoSync: true,
ManagedMCPServers: []ManagedMCPServer{
{ID: "xworkmate_server", Command: "xworkmate-mcp", Args: []string{"--port", "3001"}, Enabled: true},
},
},
OpencodeHome: tempDir,
})
content, err := os.ReadFile(configPath)
if err != nil {
t.Fatalf("read config: %v", err)
}
if !strings.Contains(string(content), `[model]`) {
t.Fatalf("expected user config preserved: %s", string(content))
}
if !strings.Contains(string(content), `[mcp_servers.xworkmate_server]`) {
t.Fatalf("expected managed opencode entry written: %s", string(content))
}
if strings.Count(string(content), opencodeManagedMCPBlockStart) != 1 {
t.Fatalf("expected single opencode managed block: %s", string(content))
}
if result.MountTargets[4].ManagedMCPCount != 1 {
t.Fatalf("expected opencode managed count 1, got %d", result.MountTargets[4].ManagedMCPCount)
}
}
func TestReconcileArisReportsReadyWhenBundleAndBridgeAreAvailable(t *testing.T) {
result := Reconcile(Request{
Config: Config{UsesAris: true},
Aris: ArisInput{
Available: true,
BundleVersion: "test",
LLMChatServerPath: "mcp-server.py",
SkillCount: 2,
BridgeAvailable: true,
},
})
if got := result.MountTargets[0].SyncState; got != "ready" {
t.Fatalf("expected ready aris state, got %q", got)
}
if got := result.ArisBundleVersion; got != "test" {
t.Fatalf("expected bundle version test, got %q", got)
}
}