Implements 15 new MCP tools in the `org` domain covering organization CRUD, membership queries, and team management. All tools follow existing patterns and are available via both MCP and CLI modes.
135 lines
3.4 KiB
Go
135 lines
3.4 KiB
Go
package org
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"testing"
|
|
)
|
|
|
|
func TestListOrgMembersFn_Success(t *testing.T) {
|
|
srv := setupOrgMockServer(t, func(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode([]map[string]interface{}{
|
|
{"id": 1, "login": "user1"},
|
|
{"id": 2, "login": "user2"},
|
|
})
|
|
})
|
|
defer srv.Close()
|
|
|
|
req := newCallToolRequest(map[string]interface{}{
|
|
"org": "test-org",
|
|
})
|
|
result, err := ListOrgMembersFn(context.Background(), req)
|
|
if err != nil {
|
|
t.Fatalf("ListOrgMembersFn returned error: %v", err)
|
|
}
|
|
if result.IsError {
|
|
t.Fatal("ListOrgMembersFn returned tool error")
|
|
}
|
|
}
|
|
|
|
func TestListOrgMembersFn_MissingOrg(t *testing.T) {
|
|
req := newCallToolRequest(map[string]interface{}{})
|
|
_, err := ListOrgMembersFn(context.Background(), req)
|
|
if err == nil {
|
|
t.Fatal("expected error for missing org, got nil")
|
|
}
|
|
}
|
|
|
|
func TestCheckOrgMembershipFn_IsMember(t *testing.T) {
|
|
srv := setupOrgMockServer(t, func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusNoContent)
|
|
})
|
|
defer srv.Close()
|
|
|
|
req := newCallToolRequest(map[string]interface{}{
|
|
"org": "test-org",
|
|
"user": "testuser",
|
|
})
|
|
result, err := CheckOrgMembershipFn(context.Background(), req)
|
|
if err != nil {
|
|
t.Fatalf("CheckOrgMembershipFn returned error: %v", err)
|
|
}
|
|
if result.IsError {
|
|
t.Fatal("CheckOrgMembershipFn returned tool error")
|
|
}
|
|
}
|
|
|
|
func TestCheckOrgMembershipFn_NotMember(t *testing.T) {
|
|
srv := setupOrgMockServer(t, func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusNotFound)
|
|
})
|
|
defer srv.Close()
|
|
|
|
req := newCallToolRequest(map[string]interface{}{
|
|
"org": "test-org",
|
|
"user": "outsider",
|
|
})
|
|
result, err := CheckOrgMembershipFn(context.Background(), req)
|
|
if err != nil {
|
|
t.Fatalf("CheckOrgMembershipFn returned error: %v", err)
|
|
}
|
|
if result.IsError {
|
|
t.Fatal("CheckOrgMembershipFn returned tool error")
|
|
}
|
|
}
|
|
|
|
func TestCheckOrgMembershipFn_MissingOrg(t *testing.T) {
|
|
req := newCallToolRequest(map[string]interface{}{
|
|
"user": "testuser",
|
|
})
|
|
_, err := CheckOrgMembershipFn(context.Background(), req)
|
|
if err == nil {
|
|
t.Fatal("expected error for missing org, got nil")
|
|
}
|
|
}
|
|
|
|
func TestCheckOrgMembershipFn_MissingUser(t *testing.T) {
|
|
req := newCallToolRequest(map[string]interface{}{
|
|
"org": "test-org",
|
|
})
|
|
_, err := CheckOrgMembershipFn(context.Background(), req)
|
|
if err == nil {
|
|
t.Fatal("expected error for missing user, got nil")
|
|
}
|
|
}
|
|
|
|
func TestRemoveOrgMemberFn_Success(t *testing.T) {
|
|
srv := setupOrgMockServer(t, func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusNoContent)
|
|
})
|
|
defer srv.Close()
|
|
|
|
req := newCallToolRequest(map[string]interface{}{
|
|
"org": "test-org",
|
|
"user": "testuser",
|
|
})
|
|
result, err := RemoveOrgMemberFn(context.Background(), req)
|
|
if err != nil {
|
|
t.Fatalf("RemoveOrgMemberFn returned error: %v", err)
|
|
}
|
|
if result.IsError {
|
|
t.Fatal("RemoveOrgMemberFn returned tool error")
|
|
}
|
|
}
|
|
|
|
func TestRemoveOrgMemberFn_MissingOrg(t *testing.T) {
|
|
req := newCallToolRequest(map[string]interface{}{
|
|
"user": "testuser",
|
|
})
|
|
_, err := RemoveOrgMemberFn(context.Background(), req)
|
|
if err == nil {
|
|
t.Fatal("expected error for missing org, got nil")
|
|
}
|
|
}
|
|
|
|
func TestRemoveOrgMemberFn_MissingUser(t *testing.T) {
|
|
req := newCallToolRequest(map[string]interface{}{
|
|
"org": "test-org",
|
|
})
|
|
_, err := RemoveOrgMemberFn(context.Background(), req)
|
|
if err == nil {
|
|
t.Fatal("expected error for missing user, got nil")
|
|
}
|
|
}
|