summaryrefslogtreecommitdiff
path: root/internal/api/roles_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/api/roles_test.go')
-rw-r--r--internal/api/roles_test.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/internal/api/roles_test.go b/internal/api/roles_test.go
index 97afdfe..1f17426 100644
--- a/internal/api/roles_test.go
+++ b/internal/api/roles_test.go
@@ -11,6 +11,52 @@ import (
"github.com/thepeterstone/claudomator/internal/role"
)
+// TestServer_ListRoleNames_ReturnsDistinctRoles verifies GET /api/roles — the
+// "which roles exist" discovery endpoint the role/config management panel
+// needs, since there's no other way to enumerate role names.
+func TestServer_ListRoleNames_ReturnsDistinctRoles(t *testing.T) {
+ srv, store := testServer(t)
+
+ if _, err := store.CreateRoleConfig("coder", `{"role":"coder"}`, "human"); err != nil {
+ t.Fatalf("CreateRoleConfig coder: %v", err)
+ }
+ if _, err := store.CreateRoleConfig("coder", `{"role":"coder","system_prompt":"v2"}`, "human"); err != nil {
+ t.Fatalf("CreateRoleConfig coder v2: %v", err)
+ }
+ if _, err := store.CreateRoleConfig("reviewer", `{"role":"reviewer"}`, "human"); err != nil {
+ t.Fatalf("CreateRoleConfig reviewer: %v", err)
+ }
+
+ req := httptest.NewRequest("GET", "/api/roles", nil)
+ w := httptest.NewRecorder()
+ srv.Handler().ServeHTTP(w, req)
+
+ if w.Code != http.StatusOK {
+ t.Fatalf("expected 200, got %d: %s", w.Code, w.Body.String())
+ }
+ var names []string
+ if err := json.Unmarshal(w.Body.Bytes(), &names); err != nil {
+ t.Fatalf("unmarshal: %v", err)
+ }
+ if len(names) != 2 || names[0] != "coder" || names[1] != "reviewer" {
+ t.Errorf("expected [coder reviewer], got %v", names)
+ }
+}
+
+func TestServer_ListRoleNames_Empty_ReturnsEmptyArray(t *testing.T) {
+ srv, _ := testServer(t)
+ req := httptest.NewRequest("GET", "/api/roles", nil)
+ w := httptest.NewRecorder()
+ srv.Handler().ServeHTTP(w, req)
+
+ if w.Code != http.StatusOK {
+ t.Fatalf("expected 200, got %d", w.Code)
+ }
+ if got := w.Body.String(); got != "[]\n" && got != "[]" {
+ t.Errorf("expected empty JSON array, got %q", got)
+ }
+}
+
// TestServer_CreateRoleVersion_CreatesDraft mirrors the projects endpoint
// test pattern (see server_test.go's testServer/httptest.NewRequest usage):
// POSTing a role.RoleConfig body creates a new draft version.