package coreauth
import (
"context"
"testing"
"sourcecraft.dev/bigbes/sr-ht-core/auth"
"sourcecraft.dev/bigbes/sr-ht-spec/authn"
)
func TestDerive(t *testing.T) {
const ownerUserID = 42
tests := []struct {
name string
principal authn.Principal
wantMethod string
wantUserID int
wantUser string
}{
{
name: "owner",
principal: authn.Principal{Kind: authn.KindOwner, Owner: "bigbes"},
wantMethod: auth.AUTH_INTERNAL,
wantUserID: ownerUserID,
wantUser: "bigbes",
},
{
name: "agent",
principal: authn.Principal{Kind: authn.KindAgent, Owner: "bigbes", Agent: "claude-code/spec-writer"},
wantMethod: auth.AUTH_INTERNAL,
wantUserID: ownerUserID,
wantUser: "bigbes",
},
{
name: "anonymous",
principal: authn.Anonymous(),
wantMethod: auth.AUTH_ANON_INTERNAL,
wantUserID: 0,
wantUser: "",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ac := Derive(tt.principal, ownerUserID)
if ac.AuthMethod != tt.wantMethod {
t.Errorf("AuthMethod = %q, want %q", ac.AuthMethod, tt.wantMethod)
}
if ac.UserID != tt.wantUserID {
t.Errorf("UserID = %d, want %d", ac.UserID, tt.wantUserID)
}
if ac.Username != tt.wantUser {
t.Errorf("Username = %q, want %q", ac.Username, tt.wantUser)
}
})
}
}
func TestContext(t *testing.T) {
const ownerUserID = 7
ctx := Context(context.Background(), authn.Principal{Kind: authn.KindOwner, Owner: "bigbes"}, ownerUserID)
ac := auth.ForContext(ctx)
if ac == nil {
t.Fatal("auth.ForContext returned nil; expected an AuthContext")
}
if ac.AuthMethod != auth.AUTH_INTERNAL {
t.Errorf("AuthMethod = %q, want %q", ac.AuthMethod, auth.AUTH_INTERNAL)
}
if ac.UserID != ownerUserID {
t.Errorf("UserID = %d, want %d", ac.UserID, ownerUserID)
}
if ac.Username != "bigbes" {
t.Errorf("Username = %q, want %q", ac.Username, "bigbes")
}
}