@@ -851,24 +851,77 @@ def test_delete_raises_forbidden_if_not_allowed(self):
851851
852852 def test_can_delete_returns_true_for_current_user (self ):
853853 self .login (self .regular_user )
854+
855+ center = notification_center ()
856+ center .add_watcher_to_resource (self .task , self .regular_user .getId (), WATCHER_ROLE )
857+
858+ self .assertTrue (WatcherDeleter (self .task ).can_delete (self .regular_user .getId ()))
859+
860+ def test_can_delete_returns_true_if_actor_has_watcher_role (self ):
861+ self .login (self .regular_user )
862+ center = notification_center ()
863+
864+ # No one is watching with the WATCHER_ROLE
865+ self .assertItemsEqual (
866+ [],
867+ [watcher .actorid for watcher in center .get_watchers (self .task , WATCHER_ROLE )]
868+ )
869+
870+ # But with other roles
871+ self .assertItemsEqual (
872+ [self .regular_user .getId (), self .dossier_responsible .getId ()],
873+ [watcher .actorid for watcher in center .get_watchers (self .task )]
874+ )
875+
876+ # Delete should not be possible because the WATCHER_ROLE is missing for the user
877+ self .assertFalse (WatcherDeleter (self .task ).can_delete (self .regular_user .getId ()))
878+
879+ center .add_watcher_to_resource (self .task , self .regular_user .getId (), WATCHER_ROLE )
880+
881+ self .assertItemsEqual (
882+ [self .regular_user .getId ()],
883+ [watcher .actorid for watcher in center .get_watchers (self .task , WATCHER_ROLE )]
884+ )
885+
886+ # Now it's possible because the user is watching with the required role
854887 self .assertTrue (WatcherDeleter (self .task ).can_delete (self .regular_user .getId ()))
855888
856889 def test_can_delete_returns_true_for_groups (self ):
857890 self .login (self .regular_user )
891+
892+ center = notification_center ()
893+ center .add_watcher_to_resource (self .task , 'fa_users' , WATCHER_ROLE )
894+
858895 self .assertTrue (WatcherDeleter (self .task ).can_delete ('fa_users' ))
859896
860897 def test_can_delete_returns_false_for_foreign_actors_as_editor (self ):
861898 self .login (self .regular_user )
899+
900+ center = notification_center ()
901+ center .add_watcher_to_resource (self .task , self .dossier_responsible .getId (), WATCHER_ROLE )
902+
862903 self .assertFalse (WatcherDeleter (self .task ).can_delete (self .dossier_responsible .getId ()))
863904
864- def test_can_delete_returns_false_for_foreign_actors_as_limited_admin (self ):
905+ def test_can_delete_returns_true_for_foreign_actors_as_limited_admin (self ):
865906 self .login (self .limited_admin )
866- self .assertFalse (WatcherDeleter (self .task ).can_delete (self .dossier_responsible .getId ()))
867907
868- def test_can_delete_returns_false_for_foreign_actors_as_administrator (self ):
908+ center = notification_center ()
909+ center .add_watcher_to_resource (self .task , self .dossier_responsible .getId (), WATCHER_ROLE )
910+
911+ self .assertTrue (WatcherDeleter (self .task ).can_delete (self .dossier_responsible .getId ()))
912+
913+ def test_can_delete_returns_true_for_foreign_actors_as_administrator (self ):
869914 self .login (self .administrator )
870- self .assertFalse (WatcherDeleter (self .task ).can_delete (self .dossier_responsible .getId ()))
871915
872- def test_can_delete_returns_false_for_foreign_actors_as_manager (self ):
916+ center = notification_center ()
917+ center .add_watcher_to_resource (self .task , self .dossier_responsible .getId (), WATCHER_ROLE )
918+
919+ self .assertTrue (WatcherDeleter (self .task ).can_delete (self .dossier_responsible .getId ()))
920+
921+ def test_can_delete_returns_true_for_foreign_actors_as_manager (self ):
873922 self .login (self .manager )
874- self .assertFalse (WatcherDeleter (self .task ).can_delete (self .dossier_responsible .getId ()))
923+
924+ center = notification_center ()
925+ center .add_watcher_to_resource (self .task , self .dossier_responsible .getId (), WATCHER_ROLE )
926+
927+ self .assertTrue (WatcherDeleter (self .task ).can_delete (self .dossier_responsible .getId ()))
0 commit comments