Close P0 auth gaps for lineage/runs, stage ABAC fail-closed, and project:create; add IAM migrations 00021-23, me settings APIs, schema v2 manifests, orchestrator skeleton, and gate A regression coverage. Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package auth_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"chat-agent-system/internal/auth"
|
|
"chat-agent-system/internal/config"
|
|
)
|
|
|
|
func TestMemoryStore_DevEnvSeedsDemoUsers(t *testing.T) {
|
|
cfg := &config.Config{Env: "dev", AdminPassword: "admin-test-pass-999"}
|
|
store := auth.NewMemoryStore(cfg)
|
|
ctx := context.Background()
|
|
|
|
user, err := store.GetUserByUsername(ctx, "zhanggong")
|
|
if err != nil {
|
|
t.Fatalf("expected zhanggong in dev env: %v", err)
|
|
}
|
|
if user.RoleID != "role-tech-lead" {
|
|
t.Fatalf("unexpected role: %s", user.RoleID)
|
|
}
|
|
}
|
|
|
|
func TestMemoryStore_MainEnvNoSeedUsers(t *testing.T) {
|
|
cfg := &config.Config{
|
|
Env: "main",
|
|
AdminPassword: "secure-main-admin-pass-xyz",
|
|
}
|
|
store := auth.NewMemoryStore(cfg)
|
|
ctx := context.Background()
|
|
|
|
if _, err := store.GetUserByUsername(ctx, "zhanggong"); err == nil {
|
|
t.Fatal("main env must not seed zhanggong demo user")
|
|
}
|
|
if _, err := store.GetUserByUsername(ctx, "guest"); err == nil {
|
|
t.Fatal("main env must not seed guest demo user")
|
|
}
|
|
admin, err := store.GetUserByUsername(ctx, cfg.AdminUsername)
|
|
if err != nil && cfg.AdminUsername == "" {
|
|
admin, err = store.GetUserByUsername(ctx, "admin")
|
|
}
|
|
if err != nil {
|
|
t.Fatalf("admin account should still exist: %v", err)
|
|
}
|
|
if admin.RoleID != "role-admin" {
|
|
t.Fatalf("expected role-admin, got %s", admin.RoleID)
|
|
}
|
|
}
|