You've already forked agentic-coding-workflow
ACP / MCP
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package acp_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/yan1h/agent-coding-workflow/internal/acp"
|
||||
"github.com/yan1h/agent-coding-workflow/internal/infra/errs"
|
||||
)
|
||||
|
||||
func TestAgentKindService_MCPServers_Validation(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
svc := acp.NewAgentKindService(newFakeAgentKindRepo(), testEncryptor(t), nil)
|
||||
admin := acp.Caller{UserID: uuid.New(), IsAdmin: true}
|
||||
|
||||
base := acp.CreateAgentKindInput{Name: "k", DisplayName: "K", BinaryPath: "/x", Enabled: true}
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
servers []acp.McpServerSpec
|
||||
}{
|
||||
{"missing name", []acp.McpServerSpec{{Type: acp.McpStdio, Command: "/x"}}},
|
||||
{"reserved acw name", []acp.McpServerSpec{{Name: "acw", Type: acp.McpHTTP, URL: "http://x"}}},
|
||||
{"duplicate name", []acp.McpServerSpec{
|
||||
{Name: "d", Type: acp.McpStdio, Command: "/x"},
|
||||
{Name: "d", Type: acp.McpHTTP, URL: "http://x"},
|
||||
}},
|
||||
{"stdio without command", []acp.McpServerSpec{{Name: "a", Type: acp.McpStdio}}},
|
||||
{"http without url", []acp.McpServerSpec{{Name: "a", Type: acp.McpHTTP}}},
|
||||
{"invalid type", []acp.McpServerSpec{{Name: "a", Type: "magic"}}},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
in := base
|
||||
in.MCPServers = tc.servers
|
||||
_, err := svc.Create(ctx, admin, in)
|
||||
ae, ok := errs.As(err)
|
||||
require.True(t, ok, "case %s should fail", tc.name)
|
||||
assert.Equal(t, errs.CodeInvalidInput, ae.Code, "case %s", tc.name)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAgentKindService_MCPServers_CreateAndUpdate(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
svc := acp.NewAgentKindService(newFakeAgentKindRepo(), testEncryptor(t), nil)
|
||||
admin := acp.Caller{UserID: uuid.New(), IsAdmin: true}
|
||||
|
||||
k, err := svc.Create(ctx, admin, acp.CreateAgentKindInput{
|
||||
Name: "k", DisplayName: "K", BinaryPath: "/x", Enabled: true,
|
||||
MCPServers: []acp.McpServerSpec{
|
||||
{Name: "ctx7", Type: acp.McpHTTP, URL: "https://mcp.ctx7.dev", Headers: map[string]string{"X-Key": "v"}},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.NotEmpty(t, k.EncryptedMCPServers) // 已加密落库
|
||||
|
||||
// nil = 不改
|
||||
updated, err := svc.Update(ctx, admin, k.ID, acp.UpdateAgentKindInput{})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, k.EncryptedMCPServers, updated.EncryptedMCPServers)
|
||||
|
||||
// 空列表 = 清空
|
||||
updated, err = svc.Update(ctx, admin, k.ID, acp.UpdateAgentKindInput{MCPServers: []acp.McpServerSpec{}})
|
||||
require.NoError(t, err)
|
||||
assert.NotEqual(t, k.EncryptedMCPServers, updated.EncryptedMCPServers)
|
||||
}
|
||||
Reference in New Issue
Block a user