From 69643a223d62bcb7b733cffa5f2b2efc5481df6b Mon Sep 17 00:00:00 2001 From: Loek van Gent Date: Thu, 4 Aug 2022 15:50:10 +0200 Subject: [PATCH] Reject team when captain is rejected --- bluebottle/activities/states.py | 5 ++- bluebottle/time_based/tests/test_triggers.py | 43 +++++++++++++++++++- bluebottle/time_based/triggers.py | 19 ++++++++- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/bluebottle/activities/states.py b/bluebottle/activities/states.py index c8a9462f79..765611436a 100644 --- a/bluebottle/activities/states.py +++ b/bluebottle/activities/states.py @@ -440,7 +440,10 @@ def is_activity_owner(self, user): ) cancel = Transition( - open, + [ + open, + new + ], cancelled, automatic=False, permission=is_activity_owner, diff --git a/bluebottle/time_based/tests/test_triggers.py b/bluebottle/time_based/tests/test_triggers.py index 4c290bacbd..168ab42a36 100644 --- a/bluebottle/time_based/tests/test_triggers.py +++ b/bluebottle/time_based/tests/test_triggers.py @@ -7,7 +7,8 @@ from django.utils.timezone import now, get_current_timezone from tenant_extras.utils import TenantLanguage -from bluebottle.activities.messages import TeamMemberRemovedMessage +from bluebottle.activities.messages import TeamMemberRemovedMessage, TeamCancelledTeamCaptainMessage, \ + TeamCancelledMessage from bluebottle.activities.models import Organizer, Activity from bluebottle.activities.tests.factories import TeamFactory from bluebottle.initiatives.tests.factories import InitiativeFactory, InitiativePlatformSettingsFactory @@ -17,7 +18,7 @@ ParticipantJoinedNotification, ParticipantChangedNotification, ParticipantAppliedNotification, ParticipantRemovedNotification, ParticipantRemovedOwnerNotification, NewParticipantNotification, TeamParticipantJoinedNotification, ParticipantAddedNotification, - ParticipantAddedOwnerNotification, TeamSlotChangedNotification + ParticipantAddedOwnerNotification, TeamSlotChangedNotification, ParticipantRejectedNotification ) from bluebottle.time_based.tests.factories import ( DateActivityFactory, PeriodActivityFactory, @@ -2307,3 +2308,41 @@ def test_change_date(self): self.assertNotificationEffect(TeamSlotChangedNotification) self.assertEqual(self.model.status, 'open') self.assertEqual(self.model.team.status, 'open') + + +class TeamReviewTriggerTestCase(TriggerTestCase): + + def setUp(self): + super().setUp() + self.initiator = BlueBottleUserFactory() + self.user = BlueBottleUserFactory() + self.initiative = InitiativeFactory(owner=self.initiator) + + self.activity = PeriodActivityFactory.create( + initiative=self.initiative, + team_activity='teams', + status='approved', + review=True + ) + self.model = PeriodParticipantFactory.create( + user=self.user, + activity=self.activity, + as_relation='user' + ) + + def assertStatus(self, obj, status): + obj.refresh_from_db() + self.assertEqual(obj.status, status) + + def test_reject(self): + self.assertTrue(self.model.team) + self.assertEqual( + self.model.team.owner, + self.user + ) + self.model.states.reject() + + with self.execute(): + self.assertNoNotificationEffect(ParticipantRejectedNotification) + self.assertNoNotificationEffect(TeamCancelledMessage) + self.assertNotificationEffect(TeamCancelledTeamCaptainMessage) diff --git a/bluebottle/time_based/triggers.py b/bluebottle/time_based/triggers.py index 1d2798b0ea..e44834199c 100644 --- a/bluebottle/time_based/triggers.py +++ b/bluebottle/time_based/triggers.py @@ -940,6 +940,13 @@ def not_team_captain(effect): return not effect.instance.team_id or effect.instance.team.owner != effect.instance.user +def is_team_captain(effect): + """ + is the team captain + """ + return effect.instance.team_id and effect.instance.team.owner == effect.instance.user + + def user_is_not_team_captain(effect): """ current user is not team captain @@ -1307,7 +1314,17 @@ class ParticipantTriggers(ContributorTriggers): ParticipantStateMachine.reject, effects=[ NotificationEffect( - ParticipantRejectedNotification + ParticipantRejectedNotification, + conditions=[ + not_team_captain + ] + ), + RelatedTransitionEffect( + 'team', + TeamStateMachine.cancel, + conditions=[ + is_team_captain + ] ), RelatedTransitionEffect( 'activity',