package models import ( "encoding/json" "testing" ) func TestClaimsUnmarshal_ProjectMetadataRoleIDs(t *testing.T) { payload := `{ "users_id":"U0000000003", "email_address":"user@example.com", "role_id":[30], "project_metadata":[ {"project_id":101,"alias":"proj-a","role_ids":[44,52]} ] }` var claims Claims if err := json.Unmarshal([]byte(payload), &claims); err != nil { t.Fatalf("expected no error, got %v", err) } if len(claims.RoleID) != 1 || claims.RoleID[0] != 30 { t.Fatalf("unexpected base role: %v", claims.RoleID) } if len(claims.Projects) != 1 { t.Fatalf("expected 1 project, got %d", len(claims.Projects)) } if claims.Projects[0].ProjectID != 101 { t.Fatalf("expected project_id=101, got %d", claims.Projects[0].ProjectID) } if len(claims.Projects[0].RoleID) != 2 || claims.Projects[0].RoleID[0] != 44 || claims.Projects[0].RoleID[1] != 52 { t.Fatalf("unexpected project role ids: %v", claims.Projects[0].RoleID) } } func TestClaimsUnmarshal_ProjectsMetadataSingleObject(t *testing.T) { payload := `{ "user_id":"U0000000003", "email":"user@example.com", "role_id":"30", "projects_metadata":{"project_id":202,"alias":"proj-b","role_id":"61"} }` var claims Claims if err := json.Unmarshal([]byte(payload), &claims); err != nil { t.Fatalf("expected no error, got %v", err) } if claims.UsersID != "U0000000003" { t.Fatalf("expected users_id fallback from user_id, got %s", claims.UsersID) } if claims.EmailAddress != "user@example.com" { t.Fatalf("expected email fallback from email, got %s", claims.EmailAddress) } if len(claims.Projects) != 1 { t.Fatalf("expected 1 project from projects_metadata object, got %d", len(claims.Projects)) } if len(claims.Projects[0].RoleID) != 1 || claims.Projects[0].RoleID[0] != 61 { t.Fatalf("unexpected project role ids: %v", claims.Projects[0].RoleID) } }