package runtime import ( "testing" "cs-agent/internal/models" "cs-agent/internal/pkg/toolx" ) func TestNormalizeAllowedToolCodes(t *testing.T) { ret := toolx.NormalizeToolCodes([]string{ " ", "graph/create_ticket_with_confirmation", "builtin/create_ticket_with_confirmation", "graph/handoff_to_human", "graph/handoff_to_human", }) if len(ret) != 2 { t.Fatalf("expected 2 tool codes, got %d: %#v", len(ret), ret) } if ret[0] != "graph/create_ticket_with_confirmation" { t.Fatalf("unexpected first tool code: %s", ret[0]) } if ret[1] != "graph/handoff_to_human" { t.Fatalf("unexpected second tool code: %s", ret[1]) } } func TestToolCatalogResolveAllowedToolCodes(t *testing.T) { catalog := newToolCatalog() agent := models.AIAgent{ AllowedMCPTools: `[{"toolCode":"graph/create_ticket_with_confirmation"},{"toolCode":"graph/handoff_to_human"}]`, } skill := &models.SkillDefinition{ ToolWhitelist: `["builtin/create_ticket_with_confirmation","graph/prepare_ticket_draft"]`, } ret := catalog.resolveAllowedToolCodes(agent, skill) if len(ret) != 1 { t.Fatalf("expected 1 tool code, got %d: %#v", len(ret), ret) } if ret[0] != "graph/create_ticket_with_confirmation" { t.Fatalf("unexpected tool code: %s", ret[0]) } } func TestToolCatalogResolveAllowedToolCodesFallsBackWhenSkillEmpty(t *testing.T) { catalog := newToolCatalog() agent := models.AIAgent{ AllowedMCPTools: `[{"toolCode":"graph/create_ticket_with_confirmation"},{"toolCode":"graph/handoff_to_human"}]`, } ret := catalog.resolveAllowedToolCodes(agent, nil) if len(ret) != 2 { t.Fatalf("expected 2 tool codes, got %d: %#v", len(ret), ret) } } func TestBuildRuntimeStaticTools(t *testing.T) { ret := buildRuntimeStaticTools() if len(ret) != len(toolx.ListRuntimeStaticToolSpecs()) { t.Fatalf("expected %d runtime static tools, got %d", len(toolx.ListRuntimeStaticToolSpecs()), len(ret)) } }