You've already forked agentic-coding-workflow
72 lines
2.5 KiB
Go
72 lines
2.5 KiB
Go
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)
|
|
}
|