diff --git a/graphql_api/tests/test_plan.py b/graphql_api/tests/test_plan.py index ef9df4e389..e8c4767a43 100644 --- a/graphql_api/tests/test_plan.py +++ b/graphql_api/tests/test_plan.py @@ -58,6 +58,12 @@ def test_owner_plan_data_when_trialing(self): monthlyUploadLimit pretrialUsersCount planUserCount + isEnterprisePlan + isFreePlan + isProPlan + isSentryPlan + isTeamPlan + isTrialPlan } } } @@ -83,6 +89,12 @@ def test_owner_plan_data_when_trialing(self): "monthlyUploadLimit": None, "pretrialUsersCount": 234, "planUserCount": 123, + "isEnterprisePlan": False, + "isFreePlan": False, + "isProPlan": False, + "isSentryPlan": False, + "isTeamPlan": False, + "isTrialPlan": True, } def test_owner_plan_data_with_account(self): @@ -101,6 +113,12 @@ def test_owner_plan_data_with_account(self): billingRate baseUnitPrice planUserCount + isEnterprisePlan + isFreePlan + isProPlan + isSentryPlan + isTeamPlan + isTrialPlan } } } @@ -114,6 +132,12 @@ def test_owner_plan_data_with_account(self): "billingRate": "annually", "baseUnitPrice": 10, "planUserCount": 25, + "isEnterprisePlan": False, + "isFreePlan": False, + "isProPlan": True, + "isSentryPlan": False, + "isTeamPlan": False, + "isTrialPlan": False, } def test_owner_plan_data_has_seats_left(self): diff --git a/graphql_api/types/plan/plan.graphql b/graphql_api/types/plan/plan.graphql index d73ce00f2e..df832672de 100644 --- a/graphql_api/types/plan/plan.graphql +++ b/graphql_api/types/plan/plan.graphql @@ -1,20 +1,26 @@ type Plan { - trialStatus: TrialStatus! - trialStartDate: DateTime - trialEndDate: DateTime - trialTotalDays: Int - pretrialUsersCount: Int + baseUnitPrice: Int! + benefits: [String!]! + billingRate: String + hasSeatsLeft: Boolean! + isEnterprisePlan: Boolean! + isFreePlan: Boolean! + isProPlan: Boolean! + isSentryPlan: Boolean! + isTeamPlan: Boolean! + isTrialPlan: Boolean! marketingName: String! + monthlyUploadLimit: Int planName: String! @deprecated( reason: "Plan representations have used `value` for a while, making the frontend code hard to change" ) - value: String! - tierName: String! - billingRate: String - baseUnitPrice: Int! - benefits: [String!]! - monthlyUploadLimit: Int planUserCount: Int - hasSeatsLeft: Boolean! + pretrialUsersCount: Int + tierName: String! + trialEndDate: DateTime + trialStartDate: DateTime + trialStatus: TrialStatus! + trialTotalDays: Int + value: String! } diff --git a/graphql_api/types/plan/plan.py b/graphql_api/types/plan/plan.py index 189613f81e..ada836133e 100644 --- a/graphql_api/types/plan/plan.py +++ b/graphql_api/types/plan/plan.py @@ -2,9 +2,7 @@ from typing import List, Optional from ariadne import ObjectType -from shared.plan.constants import ( - TrialStatus, -) +from shared.plan.constants import PlanBillingRate, TrialStatus from shared.plan.service import PlanService from codecov.db import sync_to_async @@ -59,7 +57,7 @@ def resolve_tier_name(plan_service: PlanService, info) -> str: @plan_bindable.field("billingRate") @sync_to_async -def resolve_billing_rate(plan_service: PlanService, info) -> Optional[str]: +def resolve_billing_rate(plan_service: PlanService, info) -> Optional[PlanBillingRate]: return plan_service.billing_rate @@ -98,3 +96,39 @@ def resolve_plan_user_count(plan_service: PlanService, info) -> int: @sync_to_async def resolve_has_seats_left(plan_service: PlanService, info) -> bool: return plan_service.has_seats_left + + +@plan_bindable.field("isEnterprisePlan") +@sync_to_async +def resolve_is_enterprise_plan(plan_service: PlanService, info) -> bool: + return plan_service.is_enterprise_plan + + +@plan_bindable.field("isFreePlan") +@sync_to_async +def resolve_is_free_plan(plan_service: PlanService, info) -> bool: + return plan_service.is_free_plan + + +@plan_bindable.field("isProPlan") +@sync_to_async +def resolve_is_pro_plan(plan_service: PlanService, info) -> bool: + return plan_service.is_pro_plan + + +@plan_bindable.field("isSentryPlan") +@sync_to_async +def resolve_is_sentry_plan(plan_service: PlanService, info) -> bool: + return plan_service.is_sentry_plan + + +@plan_bindable.field("isTeamPlan") +@sync_to_async +def resolve_is_team_plan(plan_service: PlanService, info) -> bool: + return plan_service.is_team_plan + + +@plan_bindable.field("isTrialPlan") +@sync_to_async +def resolve_is_trial_plan(plan_service: PlanService, info) -> bool: + return plan_service.is_trial_plan diff --git a/requirements.in b/requirements.in index f1e0dc9dcb..695a4c4157 100644 --- a/requirements.in +++ b/requirements.in @@ -26,7 +26,7 @@ freezegun google-cloud-pubsub gunicorn>=22.0.0 https://github.com/codecov/opentelem-python/archive/refs/tags/v0.0.4a1.tar.gz#egg=codecovopentelem -https://github.com/codecov/shared/archive/22622868034aa8dbaad88901ba7156e3ae6b9539.tar.gz#egg=shared +https://github.com/codecov/shared/archive/1c4ca00e35d95d1281e0415ce1897f6dbbc6368a.tar.gz#egg=shared https://github.com/photocrowd/django-cursor-pagination/archive/f560902696b0c8509e4d95c10ba0d62700181d84.tar.gz idna>=3.7 minio diff --git a/requirements.txt b/requirements.txt index 54bee8e760..81d231ab4c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -414,7 +414,7 @@ sentry-sdk[celery]==2.13.0 # shared setproctitle==1.1.10 # via -r requirements.in -shared @ https://github.com/codecov/shared/archive/22622868034aa8dbaad88901ba7156e3ae6b9539.tar.gz +shared @ https://github.com/codecov/shared/archive/1c4ca00e35d95d1281e0415ce1897f6dbbc6368a.tar.gz # via -r requirements.in simplejson==3.17.2 # via -r requirements.in