antigravity_oauth_service_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package service
  2. import (
  3. "encoding/json"
  4. "testing"
  5. )
  6. func TestResolveDefaultTierID(t *testing.T) {
  7. t.Parallel()
  8. tests := []struct {
  9. name string
  10. loadRaw map[string]any
  11. want string
  12. }{
  13. {
  14. name: "nil loadRaw",
  15. loadRaw: nil,
  16. want: "",
  17. },
  18. {
  19. name: "missing allowedTiers",
  20. loadRaw: map[string]any{
  21. "paidTier": map[string]any{"id": "g1-pro-tier"},
  22. },
  23. want: "",
  24. },
  25. {
  26. name: "empty allowedTiers",
  27. loadRaw: map[string]any{"allowedTiers": []any{}},
  28. want: "",
  29. },
  30. {
  31. name: "tier missing id field",
  32. loadRaw: map[string]any{
  33. "allowedTiers": []any{
  34. map[string]any{"isDefault": true},
  35. },
  36. },
  37. want: "",
  38. },
  39. {
  40. name: "allowedTiers but no default",
  41. loadRaw: map[string]any{
  42. "allowedTiers": []any{
  43. map[string]any{"id": "free-tier", "isDefault": false},
  44. map[string]any{"id": "standard-tier", "isDefault": false},
  45. },
  46. },
  47. want: "",
  48. },
  49. {
  50. name: "default tier found",
  51. loadRaw: map[string]any{
  52. "allowedTiers": []any{
  53. map[string]any{"id": "free-tier", "isDefault": true},
  54. map[string]any{"id": "standard-tier", "isDefault": false},
  55. },
  56. },
  57. want: "free-tier",
  58. },
  59. {
  60. name: "default tier id with spaces",
  61. loadRaw: map[string]any{
  62. "allowedTiers": []any{
  63. map[string]any{"id": " standard-tier ", "isDefault": true},
  64. },
  65. },
  66. want: "standard-tier",
  67. },
  68. }
  69. for _, tc := range tests {
  70. t.Run(tc.name, func(t *testing.T) {
  71. t.Parallel()
  72. got := resolveDefaultTierID(tc.loadRaw)
  73. if got != tc.want {
  74. t.Fatalf("resolveDefaultTierID() = %q, want %q", got, tc.want)
  75. }
  76. })
  77. }
  78. }
  79. // The OAuth handler serializes this DTO before the browser creates or reauthorizes an account.
  80. func TestAntigravityTokenInfoPreservesPlanTypeJSON(t *testing.T) {
  81. for _, plan := range []string{"pro", "ultra", "free", ""} {
  82. t.Run(plan, func(t *testing.T) {
  83. data, err := json.Marshal(AntigravityTokenInfo{PlanType: plan})
  84. if err != nil {
  85. t.Fatal(err)
  86. }
  87. var response map[string]any
  88. if err := json.Unmarshal(data, &response); err != nil {
  89. t.Fatal(err)
  90. }
  91. if plan == "" {
  92. if _, exists := response["plan_type"]; exists {
  93. t.Fatal("unknown plan must remain omitted")
  94. }
  95. } else if response["plan_type"] != plan {
  96. t.Fatalf("OAuth response plan_type = %v, want %q", response["plan_type"], plan)
  97. }
  98. })
  99. }
  100. }