diff --git a/shared/django_apps/codecov_auth/models.py b/shared/django_apps/codecov_auth/models.py index 17d80cf80..4431bbeb0 100644 --- a/shared/django_apps/codecov_auth/models.py +++ b/shared/django_apps/codecov_auth/models.py @@ -29,7 +29,7 @@ from shared.django_apps.codecov_auth.managers import OwnerManager from shared.django_apps.core.managers import RepositoryManager from shared.django_apps.core.models import DateTimeWithoutTZField, Repository -from shared.plan.constants import PlanName, TrialDaysAmount +from shared.plan.constants import PlanName, TierName, TrialDaysAmount # Added to avoid 'doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS' error\ # Needs to be called the same as the API app @@ -1045,6 +1045,33 @@ class Meta: def __str__(self): return self.name + @property + def is_free_plan(self): + return not self.paid_plan + + @property + def is_pro_plan(self): + return ( + self.tier.tier_name == TierName.PRO.value + or self.tier.tier_name == TierName.SENTRY.value + ) + + @property + def is_team_plan(self): + return self.tier.tier_name == TierName.TEAM.value + + @property + def is_enterprise_plan(self): + return self.tier.tier_name == TierName.ENTERPRISE.value + + @property + def is_sentry_plan(self): + return self.tier.tier_name == TierName.SENTRY.value + + @property + def is_trial_plan(self): + return self.tier.tier_name == TierName.TRIAL.value + class Tier(BaseModel): tier_name = models.CharField(max_length=255, unique=True) diff --git a/shared/plan/constants.py b/shared/plan/constants.py index 25b354d54..c533641f3 100644 --- a/shared/plan/constants.py +++ b/shared/plan/constants.py @@ -1,6 +1,4 @@ import enum -from dataclasses import dataclass -from typing import List, Optional from shared.django_apps.utils.config import RUN_ENV @@ -83,343 +81,5 @@ class TierName(enum.Enum): TRIAL = "trial" -def convert_to_DTO(plan) -> dict: - return { - "marketing_name": plan.marketing_name, - "value": plan.name, - "billing_rate": plan.billing_rate, - "base_unit_price": plan.base_unit_price, - "benefits": plan.benefits, - "tier_name": plan.tier.tier_name, - "monthly_uploads_limit": plan.monthly_uploads_limit, - "is_free_plan": not plan.paid_plan, - "is_pro_plan": plan.tier.tier_name == TierName.PRO.value, - "is_team_plan": plan.tier.tier_name == TierName.TEAM.value, - "is_enterprise_plan": plan.tier.tier_name == TierName.ENTERPRISE.value, - "is_trial_plan": plan.tier.tier_name == TierName.TRIAL.value, - "is_sentry_plan": plan.tier.tier_name == TierName.SENTRY.value, - } - - -@dataclass(repr=False) -class PlanData: - """ - Dataclass that represents plan related information - """ - - marketing_name: PlanMarketingName - value: PlanName - billing_rate: Optional[PlanBillingRate] - base_unit_price: PlanPrice - benefits: List[str] - tier_name: TierName - monthly_uploads_limit: Optional[MonthlyUploadLimits] - trial_days: Optional[TrialDaysAmount] - - def convert_to_DTO(self) -> dict: - return { - "marketing_name": self.marketing_name, - "value": self.value, - "billing_rate": self.billing_rate, - "base_unit_price": self.base_unit_price, - "benefits": self.benefits, - "tier_name": self.tier_name, - "monthly_uploads_limit": self.monthly_uploads_limit, - "is_free_plan": self.tier_name == TierName.BASIC.value, - "is_pro_plan": self.tier_name == TierName.PRO.value, - "is_team_plan": self.tier_name == TierName.TEAM.value, - "is_enterprise_plan": self.tier_name == TierName.ENTERPRISE.value, - "is_trial_plan": self.value == PlanName.TRIAL_PLAN_NAME.value, - "is_sentry_plan": self.value in SENTRY_PAID_USER_PLAN_REPRESENTATIONS, - } - - -NON_PR_AUTHOR_PAID_USER_PLAN_REPRESENTATIONS = { - PlanName.CODECOV_PRO_MONTHLY_LEGACY.value: PlanData( - marketing_name=PlanMarketingName.CODECOV_PRO.value, - value=PlanName.CODECOV_PRO_MONTHLY_LEGACY.value, - billing_rate=PlanBillingRate.MONTHLY.value, - base_unit_price=PlanPrice.MONTHLY.value, - benefits=[ - "Configurable # of users", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.PRO.value, - monthly_uploads_limit=None, - trial_days=None, - ), - PlanName.CODECOV_PRO_YEARLY_LEGACY.value: PlanData( - marketing_name=PlanMarketingName.CODECOV_PRO.value, - value=PlanName.CODECOV_PRO_YEARLY_LEGACY.value, - billing_rate=PlanBillingRate.YEARLY.value, - base_unit_price=PlanPrice.YEARLY.value, - benefits=[ - "Configurable # of users", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.PRO.value, - monthly_uploads_limit=None, - trial_days=None, - ), -} - - -PR_AUTHOR_PAID_USER_PLAN_REPRESENTATIONS = { - PlanName.CODECOV_PRO_MONTHLY.value: PlanData( - marketing_name=PlanMarketingName.CODECOV_PRO.value, - value=PlanName.CODECOV_PRO_MONTHLY.value, - billing_rate=PlanBillingRate.MONTHLY.value, - base_unit_price=PlanPrice.MONTHLY.value, - benefits=[ - "Configurable # of users", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.PRO.value, - monthly_uploads_limit=None, - trial_days=None, - ), - PlanName.CODECOV_PRO_YEARLY.value: PlanData( - marketing_name=PlanMarketingName.CODECOV_PRO.value, - value=PlanName.CODECOV_PRO_YEARLY.value, - billing_rate=PlanBillingRate.YEARLY.value, - base_unit_price=PlanPrice.YEARLY.value, - benefits=[ - "Configurable # of users", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.PRO.value, - monthly_uploads_limit=None, - trial_days=None, - ), -} - -SENTRY_PAID_USER_PLAN_REPRESENTATIONS = { - PlanName.SENTRY_MONTHLY.value: PlanData( - marketing_name=PlanMarketingName.SENTRY_PRO.value, - value=PlanName.SENTRY_MONTHLY.value, - billing_rate=PlanBillingRate.MONTHLY.value, - base_unit_price=PlanPrice.MONTHLY.value, - benefits=[ - "Includes 5 seats", - "$12 per additional seat", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.SENTRY.value, - trial_days=TrialDaysAmount.CODECOV_SENTRY.value, - monthly_uploads_limit=None, - ), - PlanName.SENTRY_YEARLY.value: PlanData( - marketing_name=PlanMarketingName.SENTRY_PRO.value, - value=PlanName.SENTRY_YEARLY.value, - billing_rate=PlanBillingRate.YEARLY.value, - base_unit_price=PlanPrice.YEARLY.value, - benefits=[ - "Includes 5 seats", - "$10 per additional seat", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.SENTRY.value, - trial_days=TrialDaysAmount.CODECOV_SENTRY.value, - monthly_uploads_limit=None, - ), -} - -# TODO: Update these values -ENTERPRISE_CLOUD_USER_PLAN_REPRESENTATIONS = { - PlanName.ENTERPRISE_CLOUD_MONTHLY.value: PlanData( - marketing_name=PlanMarketingName.ENTERPRISE_CLOUD.value, - value=PlanName.ENTERPRISE_CLOUD_MONTHLY.value, - billing_rate=PlanBillingRate.MONTHLY.value, - base_unit_price=PlanPrice.MONTHLY.value, - benefits=[ - "Configurable # of users", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.ENTERPRISE.value, - trial_days=None, - monthly_uploads_limit=None, - ), - PlanName.ENTERPRISE_CLOUD_YEARLY.value: PlanData( - marketing_name=PlanMarketingName.ENTERPRISE_CLOUD.value, - value=PlanName.ENTERPRISE_CLOUD_YEARLY.value, - billing_rate=PlanBillingRate.YEARLY.value, - base_unit_price=PlanPrice.YEARLY.value, - benefits=[ - "Configurable # of users", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.ENTERPRISE.value, - trial_days=None, - monthly_uploads_limit=None, - ), -} - -GHM_PLAN_REPRESENTATION = { - PlanName.GHM_PLAN_NAME.value: PlanData( - marketing_name=PlanMarketingName.GITHUB_MARKETPLACE.value, - value=PlanName.GHM_PLAN_NAME.value, - billing_rate=None, - base_unit_price=PlanPrice.GHM_PRICE.value, - benefits=[ - "Configurable # of users", - "Unlimited public repositories", - "Unlimited private repositories", - ], - tier_name=TierName.PRO.value, - trial_days=None, - monthly_uploads_limit=None, - ) -} - -BASIC_PLAN = PlanData( - marketing_name=PlanMarketingName.BASIC.value, - value=PlanName.BASIC_PLAN_NAME.value, - billing_rate=None, - base_unit_price=PlanPrice.CODECOV_BASIC.value, - benefits=[ - "Up to 1 user", - "Unlimited public repositories", - "Unlimited private repositories", - ], - tier_name=TierName.BASIC.value, - monthly_uploads_limit=MonthlyUploadLimits.CODECOV_FREE_PLAN.value, - trial_days=None, -) - -FREE_PLAN = PlanData( - marketing_name=PlanMarketingName.FREE.value, - value=PlanName.FREE_PLAN_NAME.value, - billing_rate=None, - base_unit_price=PlanPrice.CODECOV_FREE.value, - benefits=[ - "Up to 1 user", - "Unlimited public repositories", - "Unlimited private repositories", - ], - tier_name=TierName.BASIC.value, - trial_days=None, - monthly_uploads_limit=None, -) - -DEVELOPER_PLAN = PlanData( - marketing_name=PlanMarketingName.FREE.value, - value=DEFAULT_FREE_PLAN, - billing_rate=None, - base_unit_price=PlanPrice.CODECOV_FREE.value, - benefits=[ - "Up to 1 user", - "Unlimited public repositories", - "Unlimited private repositories", - ], - tier_name=TierName.TEAM.value, - trial_days=None, - monthly_uploads_limit=250, -) - -FREE_PLAN_REPRESENTATIONS = { - PlanName.FREE_PLAN_NAME.value: FREE_PLAN, - PlanName.BASIC_PLAN_NAME.value: BASIC_PLAN, - DEFAULT_FREE_PLAN: DEVELOPER_PLAN, -} - -TEAM_PLAN_REPRESENTATIONS = { - PlanName.TEAM_MONTHLY.value: PlanData( - marketing_name=PlanMarketingName.TEAM.value, - value=PlanName.TEAM_MONTHLY.value, - billing_rate=PlanBillingRate.MONTHLY.value, - base_unit_price=PlanPrice.TEAM_MONTHLY.value, - benefits=[ - "Up to 10 users", - "Unlimited repositories", - "2500 private repo uploads", - "Patch coverage analysis", - ], - tier_name=TierName.TEAM.value, - trial_days=None, - monthly_uploads_limit=MonthlyUploadLimits.CODECOV_TEAM_PLAN.value, - ), - PlanName.TEAM_YEARLY.value: PlanData( - marketing_name=PlanMarketingName.TEAM.value, - value=PlanName.TEAM_YEARLY.value, - billing_rate=PlanBillingRate.YEARLY.value, - base_unit_price=PlanPrice.TEAM_YEARLY.value, - benefits=[ - "Up to 10 users", - "Unlimited repositories", - "2500 private repo uploads", - "Patch coverage analysis", - ], - tier_name=TierName.TEAM.value, - trial_days=None, - monthly_uploads_limit=MonthlyUploadLimits.CODECOV_TEAM_PLAN.value, - ), -} - -TRIAL_PLAN_REPRESENTATION = { - PlanName.TRIAL_PLAN_NAME.value: PlanData( - marketing_name=PlanMarketingName.TRIAL.value, - value=PlanName.TRIAL_PLAN_NAME.value, - billing_rate=None, - base_unit_price=PlanPrice.CODECOV_TRIAL.value, - benefits=[ - "Configurable # of users", - "Unlimited public repositories", - "Unlimited private repositories", - "Priority Support", - ], - tier_name=TierName.TRIAL.value, - trial_days=None, - monthly_uploads_limit=None, - ), -} - -PAID_PLANS = { - **PR_AUTHOR_PAID_USER_PLAN_REPRESENTATIONS, - **SENTRY_PAID_USER_PLAN_REPRESENTATIONS, - **ENTERPRISE_CLOUD_USER_PLAN_REPRESENTATIONS, - **TEAM_PLAN_REPRESENTATIONS, -} - -TRIAL_PLANS = {**TRIAL_PLAN_REPRESENTATION} - -TEAM_PLANS = {**TEAM_PLAN_REPRESENTATIONS} - - -USER_PLAN_REPRESENTATIONS = { - **FREE_PLAN_REPRESENTATIONS, - **NON_PR_AUTHOR_PAID_USER_PLAN_REPRESENTATIONS, - **GHM_PLAN_REPRESENTATION, - **PAID_PLANS, - **TRIAL_PLANS, - **TEAM_PLANS, -} - -PLANS_THAT_CAN_TRIAL = [ - DEFAULT_FREE_PLAN, - PlanName.FREE_PLAN_NAME.value, - PlanName.BASIC_PLAN_NAME.value, - PlanName.CODECOV_PRO_MONTHLY.value, - PlanName.CODECOV_PRO_YEARLY.value, - PlanName.SENTRY_MONTHLY.value, - PlanName.SENTRY_YEARLY.value, - PlanName.TRIAL_PLAN_NAME.value, -] - TRIAL_PLAN_SEATS = 1000 TEAM_PLAN_MAX_USERS = 10 diff --git a/shared/plan/service.py b/shared/plan/service.py index 8b754bbcd..bf2180ef6 100644 --- a/shared/plan/service.py +++ b/shared/plan/service.py @@ -16,7 +16,6 @@ TierName, TrialDaysAmount, TrialStatus, - convert_to_DTO, ) from shared.self_hosted.service import enterprise_has_seats_left, license_seats @@ -182,7 +181,7 @@ def available_plans(self, owner: Owner) -> List[Plan]: ) ) - return [convert_to_DTO(plan) for plan in available_plans] + return list(available_plans) def _start_trial_helper( self, @@ -325,30 +324,27 @@ def has_seats_left(self) -> bool: @property def is_enterprise_plan(self) -> bool: - return self.plan_data.tier.tier_name == TierName.ENTERPRISE.value + return self.plan_data.is_enterprise_plan @property def is_free_plan(self) -> bool: - return self.plan_data.paid_plan is False and not self.is_org_trialing + return self.plan_data.is_free_plan and not self.is_org_trialing @property def is_pro_plan(self) -> bool: - return ( - self.plan_data.tier.tier_name == TierName.PRO.value - or self.plan_data.tier.tier_name == TierName.SENTRY.value - ) + return self.plan_data.is_pro_plan @property def is_sentry_plan(self) -> bool: - return self.plan_data.tier.tier_name == TierName.SENTRY.value + return self.plan_data.is_sentry_plan @property def is_team_plan(self) -> bool: - return self.plan_data.tier.tier_name == TierName.TEAM.value + return self.plan_data.is_team_plan @property def is_trial_plan(self) -> bool: - return self.plan_data.tier.tier_name == TierName.TRIAL.value + return self.plan_data.is_trial_plan @property def is_pr_billing_plan(self) -> bool: diff --git a/tests/unit/django_apps/codecov_auth/test_codecov_auth_models.py b/tests/unit/django_apps/codecov_auth/test_codecov_auth_models.py index 1151fd8a7..028f4f37d 100644 --- a/tests/unit/django_apps/codecov_auth/test_codecov_auth_models.py +++ b/tests/unit/django_apps/codecov_auth/test_codecov_auth_models.py @@ -1,5 +1,4 @@ import logging -from dataclasses import asdict from unittest.mock import patch import pytest @@ -37,8 +36,6 @@ from shared.django_apps.core.tests.factories import RepositoryFactory from shared.plan.constants import ( DEFAULT_FREE_PLAN, - DEVELOPER_PLAN, - ENTERPRISE_CLOUD_USER_PLAN_REPRESENTATIONS, PlanName, ) from shared.utils.test_utils import mock_config_helper @@ -389,9 +386,9 @@ def test_fields_that_account_overrides(self): self.owner.plan_user_count = 1 self.owner.save() self.assertTrue(self.owner.can_activate_user(to_activate)) - org_pretty_plan = asdict(DEVELOPER_PLAN) - org_pretty_plan.update({"quantity": 1}) - self.assertEqual(self.owner.pretty_plan, org_pretty_plan) + # Pretty plan stuff that we care about + self.assertEqual(self.owner.pretty_plan["quantity"], 1) + self.assertEqual(self.owner.pretty_plan["value"], self.owner.plan) self.owner.account = AccountFactory( plan_seat_count=0, plan=PlanName.ENTERPRISE_CLOUD_YEARLY.value @@ -399,11 +396,9 @@ def test_fields_that_account_overrides(self): self.owner.save() self.owner.refresh_from_db() self.assertFalse(self.owner.can_activate_user(to_activate)) - account_pretty_plan = asdict( - ENTERPRISE_CLOUD_USER_PLAN_REPRESENTATIONS[self.owner.account.plan] - ) - account_pretty_plan.update({"quantity": 0}) - self.assertEqual(self.owner.pretty_plan, account_pretty_plan) + # Pretty plan stuff that we care about + self.assertEqual(self.owner.pretty_plan["quantity"], 0) + self.assertEqual(self.owner.pretty_plan["value"], self.owner.account.plan) def test_add_admin_adds_ownerid_to_admin_array(self): self.owner.admins = [] @@ -764,9 +759,9 @@ def test_account_with_users(self): self.assertEqual(account.activated_student_count, 0) self.assertEqual(account.total_seat_count, 1) self.assertEqual(account.available_seat_count, 0) - pretty_plan = asdict(DEVELOPER_PLAN) - pretty_plan.update({"quantity": 1}) - self.assertEqual(account.pretty_plan, pretty_plan) + # Pretty plan stuff that we care about + self.assertEqual(account.pretty_plan["quantity"], 1) + self.assertEqual(account.pretty_plan["value"], DEFAULT_FREE_PLAN) def test_create_account_for_enterprise_experience(self): mock_all_plans_and_tiers() @@ -935,9 +930,10 @@ def test_create_account_for_enterprise_experience(self): self.assertEqual(enterprise_account.activated_student_count, 0) self.assertEqual(enterprise_account.total_seat_count, 60) self.assertEqual(enterprise_account.available_seat_count, 57) - pretty_plan = asdict(DEVELOPER_PLAN) - pretty_plan.update({"quantity": 50}) - self.assertEqual(enterprise_account.pretty_plan, pretty_plan) + + # Pretty plan stuff that we care about + self.assertEqual(enterprise_account.pretty_plan["quantity"], 50) + self.assertEqual(enterprise_account.pretty_plan["value"], DEFAULT_FREE_PLAN) def test_activate_user_onto_account(self): user = UserFactory() diff --git a/tests/unit/plan/test_plan.py b/tests/unit/plan/test_plan.py index 8d64809ca..1dcc4edb9 100644 --- a/tests/unit/plan/test_plan.py +++ b/tests/unit/plan/test_plan.py @@ -5,7 +5,7 @@ from freezegun import freeze_time from shared.django_apps.codecov.commands.exceptions import ValidationError -from shared.django_apps.codecov_auth.models import Service +from shared.django_apps.codecov_auth.models import Plan, Service from shared.django_apps.codecov_auth.tests.factories import ( OwnerFactory, PlanFactory, @@ -13,8 +13,6 @@ ) from shared.plan.constants import ( DEFAULT_FREE_PLAN, - FREE_PLAN_REPRESENTATIONS, - TRIAL_PLAN_REPRESENTATION, TRIAL_PLAN_SEATS, PlanName, TierName, @@ -253,13 +251,12 @@ def test_plan_service_returns_plan_data_for_non_trial_developer_plan(self): trial_end_date=trial_end_date, ) plan_service = PlanService(current_org=current_org) - - developer_plan = FREE_PLAN_REPRESENTATIONS[DEFAULT_FREE_PLAN] + developer_plan = Plan.objects.get(name=DEFAULT_FREE_PLAN) assert plan_service.current_org == current_org assert plan_service.trial_status == TrialStatus.NOT_STARTED.value assert plan_service.marketing_name == developer_plan.marketing_name - assert plan_service.plan_name == developer_plan.value - assert plan_service.tier_name == developer_plan.tier_name + assert plan_service.plan_name == developer_plan.name + assert plan_service.tier_name == developer_plan.tier.tier_name assert plan_service.billing_rate == developer_plan.billing_rate assert plan_service.base_unit_price == developer_plan.base_unit_price assert plan_service.benefits == developer_plan.benefits @@ -281,11 +278,11 @@ def test_plan_service_returns_plan_data_for_trialing_user_trial_plan(self): ) plan_service = PlanService(current_org=current_org) - trial_plan = TRIAL_PLAN_REPRESENTATION[PlanName.TRIAL_PLAN_NAME.value] + trial_plan = Plan.objects.get(name=PlanName.TRIAL_PLAN_NAME.value) assert plan_service.trial_status == TrialStatus.ONGOING.value assert plan_service.marketing_name == trial_plan.marketing_name - assert plan_service.plan_name == trial_plan.value - assert plan_service.tier_name == trial_plan.tier_name + assert plan_service.plan_name == trial_plan.name + assert plan_service.tier_name == trial_plan.tier.tier_name assert plan_service.billing_rate == trial_plan.billing_rate assert plan_service.base_unit_price == trial_plan.base_unit_price assert plan_service.benefits == trial_plan.benefits @@ -428,9 +425,7 @@ def test_available_plans_for_developer_plan_non_trial( } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -452,9 +447,7 @@ def test_available_plans_for_free_plan_non_trial( } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -475,9 +468,7 @@ def test_available_plans_for_team_plan_non_trial( } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -496,9 +487,7 @@ def test_available_plans_for_pro_plan_non_trial(self): } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -523,9 +512,7 @@ def test_available_plans_for_sentry_customer_developer_plan_non_trial( } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -549,9 +536,7 @@ def test_available_plans_for_sentry_customer_team_plan_non_trial( PlanName.TEAM_YEARLY.value, } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -574,9 +559,7 @@ def test_available_plans_for_sentry_plan_non_trial(self, is_sentry_user): } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -622,9 +605,7 @@ def test_available_plans_for_developer_plan_expired_trial_less_than_10_users( PlanName.TEAM_YEARLY.value, } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -644,9 +625,7 @@ def test_available_plans_for_team_plan_expired_trial_less_than_10_users( PlanName.TEAM_YEARLY.value, } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -665,9 +644,7 @@ def test_available_plans_for_pro_plan_expired_trial_less_than_10_users(self): } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -692,9 +669,7 @@ def test_available_plans_for_sentry_customer_developer_plan_expired_trial_less_t } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -718,9 +693,7 @@ def test_available_plans_for_sentry_customer_team_plan_expired_trial_less_than_1 } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -745,9 +718,7 @@ def test_available_plans_for_sentry_plan_expired_trial_less_than_10_users( } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -788,9 +759,7 @@ def test_available_plans_for_pro_plan_expired_trial_more_than_10_users(self): } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -812,9 +781,7 @@ def test_available_plans_for_sentry_customer_developer_plan_expired_trial_more_t PlanName.SENTRY_YEARLY.value, } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -837,9 +804,7 @@ def test_available_plans_for_sentry_plan_expired_trial_more_than_10_users( } assert ( - set( - plan["value"] for plan in plan_service.available_plans(owner=self.owner) - ) + set(plan.name for plan in plan_service.available_plans(owner=self.owner)) == expected_result ) @@ -875,7 +840,7 @@ def test_currently_team_plan(self): assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == self.expected_result @@ -894,7 +859,7 @@ def test_trial_expired(self): assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == self.expected_result @@ -913,7 +878,7 @@ def test_trial_ongoing(self): assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == self.expected_result @@ -938,7 +903,7 @@ def test_trial_not_started(self): assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == self.expected_result @@ -986,7 +951,7 @@ def test_non_sentry_user(self): # Can do Team plan when plan_activated_users is null assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == expected_result @@ -998,7 +963,7 @@ def test_non_sentry_user(self): # Can do Team plan when at 10 activated users assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == expected_result @@ -1017,7 +982,7 @@ def test_non_sentry_user(self): # Can not do Team plan when at 11 activated users assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == expected_result @@ -1043,7 +1008,7 @@ def test_sentry_user(self, is_sentry_user): # Can do Team plan when plan_activated_users is null assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == expected_result @@ -1055,7 +1020,7 @@ def test_sentry_user(self, is_sentry_user): # Can do Team plan when at 10 activated users assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == expected_result @@ -1076,7 +1041,7 @@ def test_sentry_user(self, is_sentry_user): # Can not do Team plan when at 11 activated users assert ( set( - plan["value"] + plan.name for plan in self.plan_service.available_plans(owner=self.owner) ) == expected_result