@@ -209,22 +209,53 @@ def test_over_plan_seats_limit__no_subscription_metadata__returns_true( # type:
209209
210210
211211@pytest .mark .saas_mode
212- def test_is_auto_seat_upgrade_available__scale_up_plan__returns_true (
212+ @pytest .mark .parametrize (
213+ "plan, num_seats, expected" ,
214+ [
215+ ("scale-up-v2" , 19 , True ),
216+ ("scale-up-v2" , 20 , False ),
217+ ("scale-up-v2" , 21 , False ),
218+ ("startup-v2" , 1 , False ),
219+ ],
220+ )
221+ def test_is_auto_seat_upgrade_available__given_plan_and_seat_count__returns_expected (
213222 organisation : Organisation ,
223+ plan : str ,
224+ num_seats : int ,
225+ expected : bool ,
214226) -> None :
215227 # Given
216- plan = "Scale-Up"
217- subscription_id = "subscription-id"
228+ subscription = organisation .subscription
229+ subscription .plan = plan
230+ subscription .subscription_id = "subscription-id"
231+ subscription .save ()
218232
219- Subscription .objects .filter (organisation = organisation ).update (
220- subscription_id = subscription_id , plan = plan
221- )
233+ organisation .users .all ().delete ()
234+ for i in range (num_seats ):
235+ user = FFAdminUser .objects .create (email = f"seat-{ i } @test.com" )
236+ user .add_organisation (organisation )
222237
223238 # When
224- organisation .refresh_from_db ()
239+ result = organisation .is_auto_seat_upgrade_available ()
240+
241+ # Then
242+ assert result is expected
243+
244+
245+ def test_is_auto_seat_upgrade_available__not_saas__returns_false (
246+ organisation : Organisation ,
247+ ) -> None :
248+ # Given
249+ subscription = organisation .subscription
250+ subscription .plan = "scale-up-v2"
251+ subscription .subscription_id = "subscription-id"
252+ subscription .save ()
253+
254+ # When
255+ result = organisation .is_auto_seat_upgrade_available ()
225256
226257 # Then
227- assert organisation . is_auto_seat_upgrade_available () is True
258+ assert result is False
228259
229260
230261def test_subscription__default_for_new_organisation__has_one_max_seat (
@@ -458,16 +489,16 @@ def test_get_subscription_metadata__self_hosted_open_source__returns_free_plan_m
458489
459490
460491@pytest .mark .saas_mode
461- def test_add_single_seat__upgradable_plan__calls_chargebee_add_seat (
492+ def test_add_single_seat__upgradable_plan__calls_chargebee_add_single_seat (
493+ organisation : Organisation ,
462494 mocker : MockerFixture ,
463495) -> None :
464496 # Given
465497 subscription_id = "subscription-id"
466498 subscription = Subscription (subscription_id = subscription_id , plan = "scale-up" )
499+ mocker .patch .object (Subscription , "can_auto_upgrade_seats" , new = True )
500+ mocked_add_single_seat = mocker .patch ("organisations.models.add_single_seat" )
467501
468- mocked_add_single_seat = mocker .patch (
469- "organisations.models.add_single_seat" , autospec = True
470- )
471502 # When
472503 subscription .add_single_seat () # type: ignore[no-untyped-call]
473504
0 commit comments