package logic import "testing" func TestAdminJWTRoundTrip(t *testing.T) { s := NewTokenService("wyrs-admin-jwt-secret-change-in-production-2025") tok, err := s.CreateToken(42, "ops", "SUPER_ADMIN", "users,groups,imMessages") if err != nil { t.Fatal(err) } claims, err := s.Parse(tok) if err != nil { t.Fatal(err) } if claims.AdminID != 42 || claims.Type != TypeAdmin || claims.Subject != "ops" { t.Fatalf("%+v", claims) } } func TestAdminJWTRejectsWrongType(t *testing.T) { s := NewTokenService("wyrs-admin-jwt-secret-change-in-production-2025") tok, err := s.CreateToken(1, "x", "SUPER_ADMIN", "") if err != nil { t.Fatal(err) } // tamper by parsing with different secret bad := NewTokenService("other-secret-other-secret-other!!") if _, err := bad.Parse(tok); err == nil { t.Fatal("expected invalid") } } func TestAdminJWTShortSecretAndNil(t *testing.T) { s := NewTokenService("short") tok, err := s.CreateToken(1, "ops", "SUPER_ADMIN", "") if err != nil { t.Fatal(err) } if _, err := s.Parse(tok); err != nil { t.Fatal(err) } if _, err := (*TokenService)(nil).Parse("x"); err == nil { t.Fatal("nil parse") } if _, err := s.Parse(""); err == nil { t.Fatal("empty") } }