Skip to content

Commit

Permalink
feat: Add has-seats-left to plan query (#528)
Browse files Browse the repository at this point in the history
* Add has-seats-left to plan query

* more tests
  • Loading branch information
RulaKhaled committed May 2, 2024
1 parent 03b5754 commit 5208a04
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 0 deletions.
22 changes: 22 additions & 0 deletions graphql_api/tests/test_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,25 @@ def test_owner_plan_data_when_trialing(self):
"pretrialUsersCount": 234,
"planUserCount": 123,
}

def test_owner_plan_data_has_seats_left(self):
current_org = OwnerFactory(
username="random-plan-user",
service="github",
plan=PlanName.TRIAL_PLAN_NAME.value,
trial_status=TrialStatus.ONGOING.value,
plan_user_count=2,
plan_activated_users=[],
)
query = """{
owner(username: "%s") {
plan {
hasSeatsLeft
}
}
}
""" % (
current_org.username
)
data = self.gql_request(query, owner=current_org)
assert data["owner"]["plan"] == {"hasSeatsLeft": True}
1 change: 1 addition & 0 deletions graphql_api/types/plan/plan.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ type Plan {
benefits: [String!]!
monthlyUploadLimit: Int
planUserCount: Int
hasSeatsLeft: Boolean!
}
6 changes: 6 additions & 0 deletions graphql_api/types/plan/plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,9 @@ def resolve_monthly_uploads_limit(plan_service: PlanService, info) -> Optional[i
@convert_kwargs_to_snake_case
def resolve_plan_user_count(plan_service: PlanService, info) -> int:
return plan_service.plan_user_count


@plan_bindable.field("hasSeatsLeft")
@convert_kwargs_to_snake_case
def resolve_has_seats_left(plan_service: PlanService, info) -> bool:
return plan_service.has_seats_left
7 changes: 7 additions & 0 deletions plan/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,3 +258,10 @@ def is_org_trialing(self) -> bool:
@property
def has_trial_dates(self) -> bool:
return bool(self.trial_start_date and self.trial_end_date)

@property
def has_seats_left(self) -> bool:
return (
self.plan_activated_users is None
or len(self.plan_activated_users) < self.plan_user_count
)
20 changes: 20 additions & 0 deletions plan/test_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,26 @@ def test_plan_service_returns_if_owner_has_trial_dates(self):

assert plan_service.has_trial_dates == True

def test_plan_service_has_seats_left(self):
current_org = OwnerFactory(
plan=PlanName.TRIAL_PLAN_NAME.value,
plan_user_count=6,
plan_activated_users=[i for i in range(5)],
)
plan_service = PlanService(current_org=current_org)

assert plan_service.has_seats_left == True

def test_plan_service_has_no_seats_left(self):
current_org = OwnerFactory(
plan=PlanName.TRIAL_PLAN_NAME.value,
plan_user_count=5,
plan_activated_users=[i for i in range(5)],
)
plan_service = PlanService(current_org=current_org)

assert plan_service.has_seats_left == False


class AvailablePlansBeforeTrial(TestCase):
"""
Expand Down

0 comments on commit 5208a04

Please sign in to comment.