package service import ( "encoding/json" "testing" ) func TestResolveDefaultTierID(t *testing.T) { t.Parallel() tests := []struct { name string loadRaw map[string]any want string }{ { name: "nil loadRaw", loadRaw: nil, want: "", }, { name: "missing allowedTiers", loadRaw: map[string]any{ "paidTier": map[string]any{"id": "g1-pro-tier"}, }, want: "", }, { name: "empty allowedTiers", loadRaw: map[string]any{"allowedTiers": []any{}}, want: "", }, { name: "tier missing id field", loadRaw: map[string]any{ "allowedTiers": []any{ map[string]any{"isDefault": true}, }, }, want: "", }, { name: "allowedTiers but no default", loadRaw: map[string]any{ "allowedTiers": []any{ map[string]any{"id": "free-tier", "isDefault": false}, map[string]any{"id": "standard-tier", "isDefault": false}, }, }, want: "", }, { name: "default tier found", loadRaw: map[string]any{ "allowedTiers": []any{ map[string]any{"id": "free-tier", "isDefault": true}, map[string]any{"id": "standard-tier", "isDefault": false}, }, }, want: "free-tier", }, { name: "default tier id with spaces", loadRaw: map[string]any{ "allowedTiers": []any{ map[string]any{"id": " standard-tier ", "isDefault": true}, }, }, want: "standard-tier", }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { t.Parallel() got := resolveDefaultTierID(tc.loadRaw) if got != tc.want { t.Fatalf("resolveDefaultTierID() = %q, want %q", got, tc.want) } }) } } // The OAuth handler serializes this DTO before the browser creates or reauthorizes an account. func TestAntigravityTokenInfoPreservesPlanTypeJSON(t *testing.T) { for _, plan := range []string{"pro", "ultra", "free", ""} { t.Run(plan, func(t *testing.T) { data, err := json.Marshal(AntigravityTokenInfo{PlanType: plan}) if err != nil { t.Fatal(err) } var response map[string]any if err := json.Unmarshal(data, &response); err != nil { t.Fatal(err) } if plan == "" { if _, exists := response["plan_type"]; exists { t.Fatal("unknown plan must remain omitted") } } else if response["plan_type"] != plan { t.Fatalf("OAuth response plan_type = %v, want %q", response["plan_type"], plan) } }) } }