github.com/kubeshop/testkube@v1.17.23/pkg/tcl/checktcl/subscription_test.go (about) 1 // Copyright 2024 Testkube. 2 // 3 // Licensed as a Testkube Pro file under the Testkube Community 4 // License (the "License"); you may not use this file except in compliance with 5 // the License. You may obtain a copy of the License at 6 // 7 // https://github.com/kubeshop/testkube/blob/main/licenses/TCL.txt 8 9 package checktcl 10 11 import ( 12 "fmt" 13 "reflect" 14 "testing" 15 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestSubscriptionChecker_GetCurrentOrganizationPlan(t *testing.T) { 20 tests := []struct { 21 name string 22 orgPlan OrganizationPlan 23 want OrganizationPlan 24 wantErr bool 25 }{ 26 { 27 name: "Org plan does not exist", 28 wantErr: true, 29 }, 30 { 31 name: "Org plan exists", 32 orgPlan: OrganizationPlan{ 33 TestkubeMode: OrganizationPlanTestkubeModeEnterprise, 34 IsTrial: false, 35 PlanStatus: PlanStatusActive, 36 }, 37 want: OrganizationPlan{ 38 TestkubeMode: OrganizationPlanTestkubeModeEnterprise, 39 IsTrial: false, 40 PlanStatus: PlanStatusActive, 41 }, 42 wantErr: false, 43 }, 44 } 45 for _, tt := range tests { 46 t.Run(tt.name, func(t *testing.T) { 47 c := &SubscriptionChecker{ 48 orgPlan: tt.orgPlan, 49 } 50 got, err := c.GetCurrentOrganizationPlan() 51 if (err != nil) != tt.wantErr { 52 t.Errorf("SubscriptionChecker.GetCurrentOrganizationPlan() error = %v, wantErr %v", err, tt.wantErr) 53 return 54 } 55 if !reflect.DeepEqual(got, tt.want) { 56 t.Errorf("SubscriptionChecker.GetCurrentOrganizationPlan() = %v, want %v", got, tt.want) 57 } 58 }) 59 } 60 } 61 62 func TestSubscriptionChecker_IsOrgPlanEnterprise(t *testing.T) { 63 tests := []struct { 64 name string 65 orgPlan OrganizationPlan 66 want bool 67 wantErr bool 68 }{ 69 { 70 name: "no org plan", 71 wantErr: true, 72 }, 73 { 74 name: "enterprise org plan", 75 orgPlan: OrganizationPlan{ 76 TestkubeMode: OrganizationPlanTestkubeModeEnterprise, 77 }, 78 want: true, 79 wantErr: false, 80 }, 81 { 82 name: "pro org plan", 83 orgPlan: OrganizationPlan{ 84 TestkubeMode: OrganizationPlanTestkubeModePro, 85 }, 86 want: false, 87 wantErr: false, 88 }, 89 } 90 for _, tt := range tests { 91 t.Run(tt.name, func(t *testing.T) { 92 c := &SubscriptionChecker{ 93 orgPlan: tt.orgPlan, 94 } 95 got, err := c.IsOrgPlanEnterprise() 96 if (err != nil) != tt.wantErr { 97 t.Errorf("SubscriptionChecker.IsOrgPlanEnterprise() error = %v, wantErr %v", err, tt.wantErr) 98 return 99 } 100 if got != tt.want { 101 t.Errorf("SubscriptionChecker.IsOrgPlanEnterprise() = %v, want %v", got, tt.want) 102 } 103 }) 104 } 105 } 106 107 func TestSubscriptionChecker_IsOrgPlanPro(t *testing.T) { 108 tests := []struct { 109 name string 110 orgPlan OrganizationPlan 111 want bool 112 wantErr bool 113 }{ 114 { 115 name: "no org plan", 116 wantErr: true, 117 }, 118 { 119 name: "enterprise org plan", 120 orgPlan: OrganizationPlan{ 121 TestkubeMode: OrganizationPlanTestkubeModeEnterprise, 122 }, 123 want: false, 124 wantErr: false, 125 }, 126 { 127 name: "pro org plan", 128 orgPlan: OrganizationPlan{ 129 TestkubeMode: OrganizationPlanTestkubeModePro, 130 }, 131 want: true, 132 wantErr: false, 133 }, 134 } 135 for _, tt := range tests { 136 t.Run(tt.name, func(t *testing.T) { 137 c := &SubscriptionChecker{ 138 orgPlan: tt.orgPlan, 139 } 140 got, err := c.IsOrgPlanPro() 141 if (err != nil) != tt.wantErr { 142 t.Errorf("SubscriptionChecker.IsOrgPlanPro() error = %v, wantErr %v", err, tt.wantErr) 143 return 144 } 145 if got != tt.want { 146 t.Errorf("SubscriptionChecker.IsOrgPlanPro() = %v, want %v", got, tt.want) 147 } 148 }) 149 } 150 } 151 152 func TestSubscriptionChecker_IsOrgPlanActive(t *testing.T) { 153 tests := []struct { 154 name string 155 orgPlan OrganizationPlan 156 want bool 157 wantErr bool 158 }{ 159 { 160 name: "no org plan", 161 wantErr: true, 162 }, 163 { 164 name: "active org plan", 165 orgPlan: OrganizationPlan{ 166 PlanStatus: PlanStatusActive, 167 }, 168 want: true, 169 wantErr: false, 170 }, 171 { 172 name: "inactive org plan", 173 orgPlan: OrganizationPlan{ 174 PlanStatus: PlanStatusUnpaid, 175 }, 176 want: false, 177 wantErr: false, 178 }, 179 } 180 for _, tt := range tests { 181 t.Run(tt.name, func(t *testing.T) { 182 c := &SubscriptionChecker{ 183 orgPlan: tt.orgPlan, 184 } 185 got, err := c.IsOrgPlanActive() 186 if (err != nil) != tt.wantErr { 187 t.Errorf("SubscriptionChecker.IsOrgPlanActive() error = %v, wantErr %v", err, tt.wantErr) 188 return 189 } 190 if got != tt.want { 191 t.Errorf("SubscriptionChecker.IsOrgPlanActive() = %v, want %v", got, tt.want) 192 } 193 }) 194 } 195 } 196 197 func TestSubscriptionChecker_IsActiveOrgPlanEnterpriseForFeature(t *testing.T) { 198 featureName := "feature" 199 tests := []struct { 200 name string 201 orgPlan OrganizationPlan 202 err error 203 }{ 204 { 205 name: "enterprise active org plan", 206 orgPlan: OrganizationPlan{ 207 TestkubeMode: OrganizationPlanTestkubeModeEnterprise, 208 IsTrial: false, 209 PlanStatus: PlanStatusActive, 210 }, 211 err: nil, 212 }, 213 { 214 name: "no org plan", 215 err: fmt.Errorf("%s is a commercial feature: organization plan is not set", featureName), 216 }, 217 { 218 name: "enterprise inactive org plan", 219 orgPlan: OrganizationPlan{ 220 TestkubeMode: OrganizationPlanTestkubeModeEnterprise, 221 IsTrial: false, 222 PlanStatus: PlanStatusUnpaid, 223 }, 224 err: fmt.Errorf("%s is not available: inactive subscription plan", featureName), 225 }, 226 { 227 name: "non enterprise actibe org plan", 228 orgPlan: OrganizationPlan{ 229 TestkubeMode: OrganizationPlanTestkubeModePro, 230 IsTrial: false, 231 PlanStatus: PlanStatusActive, 232 }, 233 err: fmt.Errorf("%s is not allowed: wrong subscription plan", featureName), 234 }, 235 } 236 237 for _, tt := range tests { 238 t.Run(tt.name, func(t *testing.T) { 239 c := &SubscriptionChecker{ 240 orgPlan: tt.orgPlan, 241 } 242 243 err := c.IsActiveOrgPlanEnterpriseForFeature(featureName) 244 if tt.err != nil { 245 assert.EqualError(t, err, tt.err.Error()) 246 } else { 247 assert.NoError(t, err) 248 } 249 }) 250 } 251 }