diff --git a/bluebottle/time_based/tests/test_triggers.py b/bluebottle/time_based/tests/test_triggers.py index 17f8aad08e..b45dd39a7f 100644 --- a/bluebottle/time_based/tests/test_triggers.py +++ b/bluebottle/time_based/tests/test_triggers.py @@ -2130,6 +2130,36 @@ def test_unfill_slot(self): self.assertStatus(self.slot2, 'open') self.assertStatus(self.activity, 'open') + def test_extend_slot_unfills(self): + self.assertStatus(self.activity, 'open') + SlotParticipantFactory.create(slot=self.slot1, participant=self.participant) + participant2 = DateParticipantFactory.create(activity=self.activity) + SlotParticipantFactory.create(slot=self.slot1, participant=participant2) + participant2 = DateParticipantFactory.create(activity=self.activity) + SlotParticipantFactory.create(slot=self.slot2, participant=participant2) + self.assertStatus(self.slot1, 'full') + self.assertStatus(self.slot2, 'full') + self.assertStatus(self.activity, 'full') + + self.slot1.capacity = 10 + self.slot1.save() + self.assertStatus(self.slot1, 'open') + self.assertStatus(self.activity, 'open') + + def test_cancel_open_slot_fills(self): + self.assertStatus(self.activity, 'open') + self.assertStatus(self.slot1, 'open') + SlotParticipantFactory.create(slot=self.slot2, participant=self.participant) + self.assertStatus(self.slot1, 'open') + self.assertStatus(self.slot2, 'full') + self.assertStatus(self.activity, 'open') + self.slot1.states.cancel(save=True) + self.assertStatus(self.activity, 'full') + self.slot3 = DateActivitySlotFactory.create(activity=self.activity) + self.assertStatus(self.activity, 'open') + self.slot3.delete() + self.assertStatus(self.activity, 'full') + def test_fill_new_slot(self): self.slot_part = SlotParticipantFactory.create(slot=self.slot2, participant=self.participant) self.assertStatus(self.slot2, 'full') diff --git a/bluebottle/time_based/triggers.py b/bluebottle/time_based/triggers.py index e1137ce175..eccc27b9d4 100644 --- a/bluebottle/time_based/triggers.py +++ b/bluebottle/time_based/triggers.py @@ -663,6 +663,15 @@ class DateActivitySlotTriggers(ActivitySlotTriggers): activity_has_accepted_participants ] ), + RelatedTransitionEffect( + 'activity', + TimeBasedStateMachine.lock, + conditions=[ + not_all_slots_finished, + all_slots_will_be_full, + slot_selection_is_free + ] + ), ActiveTimeContributionsTransitionEffect(TimeContributionStateMachine.fail) ] ),