Skip to content

Commit ba68a8b

Browse files
committed
update logic a bit to work with new plan, and types as well, start fixing tests
1 parent 33d98f6 commit ba68a8b

File tree

4 files changed

+34
-30
lines changed

4 files changed

+34
-30
lines changed

shared/django_apps/codecov_auth/models.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -598,8 +598,9 @@ def pretty_plan(self):
598598
# by modifying the "plan", sidestepping
599599
# some iffy data modeling
600600

601-
plan_details.update({"quantity": self.plan_user_count})
602-
return plan_details
601+
if plan_details:
602+
plan_details.update({"quantity": self.plan_user_count})
603+
return plan_details
603604

604605
def can_activate_user(self, owner_user: Self) -> bool:
605606
owner_org = self

shared/django_apps/codecov_auth/tests/factories.py

+15-9
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
UserToken,
2424
)
2525
from shared.encryption.oauth import get_encryptor_from_configuration
26-
from shared.plan.constants import TrialStatus
26+
from shared.plan.constants import PlanName, TierName, TrialStatus
2727

2828
encryptor = get_encryptor_from_configuration()
2929

@@ -177,20 +177,26 @@ class TierFactory(DjangoModelFactory):
177177
class Meta:
178178
model = Tier
179179

180-
tier_name = factory.Faker("name")
180+
tier_name = TierName.BASIC.value
181+
bundle_analysis = False
182+
test_analytics = False
183+
flaky_test_detection = False
184+
project_coverage = False
185+
private_repo_support = False
181186

182187

183188
class PlanFactory(DjangoModelFactory):
184189
class Meta:
185190
model = Plan
186191

187-
base_unit_price = factory.Faker("pyint")
188-
benefits = []
192+
tier = factory.SubFactory(TierFactory)
193+
base_unit_price = 0
194+
benefits = factory.LazyFunction(lambda: ["Benefit 1", "Benefit 2", "Benefit 3"])
189195
billing_rate = None
190196
is_active = True
191-
marketing_name = factory.Faker("name")
192-
max_seats = None
197+
marketing_name = factory.Faker("catch_phrase")
198+
max_seats = 1
193199
monthly_uploads_limit = None
194-
paid_plan = True
195-
name = factory.Faker("name")
196-
tier = factory.SubFactory(TierFactory)
200+
name = PlanName.BASIC_PLAN_NAME.value
201+
paid_plan = False
202+
stripe_id = None

shared/plan/constants.py

+9-12
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
from dataclasses import dataclass
33
from typing import List, Optional
44

5-
from shared.django_apps.codecov_auth.models import Plan, Tier
6-
75

86
class MonthlyUploadLimits(enum.Enum):
97
CODECOV_BASIC_PLAN = 250
@@ -90,7 +88,7 @@ class PlanData:
9088
billing_rate: Optional[PlanBillingRate]
9189
base_unit_price: PlanPrice
9290
benefits: List[str]
93-
tier: Tier
91+
tier_name: TierName
9492
monthly_uploads_limit: Optional[MonthlyUploadLimits]
9593
trial_days: Optional[TrialDaysAmount]
9694

@@ -101,20 +99,19 @@ def convert_to_DTO(self) -> dict:
10199
"billing_rate": self.billing_rate,
102100
"base_unit_price": self.base_unit_price,
103101
"benefits": self.benefits,
104-
"tier_name": self.tier.tier_name,
102+
"tier_name": self.tier_name,
105103
"monthly_uploads_limit": self.monthly_uploads_limit,
106104
"trial_days": self.trial_days,
107-
"is_free_plan": not self.paid_plan,
108-
"is_pro_plan": self.tier.tier_name == TierName.PRO.value,
109-
"is_team_plan": self.tier.tier_name == TierName.TEAM.value,
110-
"is_enterprise_plan": self.tier.tier_name == TierName.ENTERPRISE.value,
111-
"is_trial_plan": self.value
112-
== PlanName.TRIAL_PLAN_NAME.value, # This could also use the trial "Tier" if we want to make one for that...
113-
"is_sentry_plan": self.tier.tier_name == TierName.SENTRY.value,
105+
"is_free_plan": self.tier_name == TierName.BASIC.value,
106+
"is_pro_plan": self.tier_name == TierName.PRO.value,
107+
"is_team_plan": self.tier_name == TierName.TEAM.value,
108+
"is_enterprise_plan": self.tier_name == TierName.ENTERPRISE.value,
109+
"is_trial_plan": self.value == PlanName.TRIAL_PLAN_NAME.value,
110+
"is_sentry_plan": self.value in SENTRY_PAID_USER_PLAN_REPRESENTATIONS,
114111
}
115112

116113

117-
def convert_to_DTO(plan: Plan) -> dict:
114+
def convert_to_DTO(plan) -> dict:
118115
return {
119116
"marketing_name": plan.marketing_name,
120117
"value": plan.name,

shared/plan/service.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def plan_data(self, plan_data: Optional[Plan]) -> None:
100100
@property
101101
def plan_name(self) -> str:
102102
"""Returns the name of the organization's current plan."""
103-
return self.plan_data.value
103+
return self.plan_data.name
104104

105105
@property
106106
def plan_user_count(self) -> int:
@@ -325,7 +325,7 @@ def has_seats_left(self) -> bool:
325325

326326
@property
327327
def is_enterprise_plan(self) -> bool:
328-
return self.plan_data.tier_name == TierName.ENTERPRISE.value
328+
return self.plan_data.tier.tier_name == TierName.ENTERPRISE.value
329329

330330
@property
331331
def is_free_plan(self) -> bool:
@@ -334,21 +334,21 @@ def is_free_plan(self) -> bool:
334334
@property
335335
def is_pro_plan(self) -> bool:
336336
return (
337-
self.plan_data.tier_name == TierName.PRO.value
338-
or self.plan_data.tier_name == TierName.SENTRY.value
337+
self.plan_data.tier.tier_name == TierName.PRO.value
338+
or self.plan_data.tier.tier_name == TierName.SENTRY.value
339339
)
340340

341341
@property
342342
def is_sentry_plan(self) -> bool:
343-
return self.plan_data.tier_name == TierName.SENTRY.value
343+
return self.plan_data.tier.tier_name == TierName.SENTRY.value
344344

345345
@property
346346
def is_team_plan(self) -> bool:
347-
return self.plan_data.tier_name == TierName.TEAM.value
347+
return self.plan_data.tier.tier_name == TierName.TEAM.value
348348

349349
@property
350350
def is_trial_plan(self) -> bool:
351-
return self.plan_data.tier_name == TierName.TRIAL.value
351+
return self.plan_data.tier.tier_name == TierName.TRIAL.value
352352

353353
@property
354354
def is_pr_billing_plan(self) -> bool:

0 commit comments

Comments
 (0)