77import java .util .Collections ;
88import java .util .List ;
99import javax .naming .NoPermissionException ;
10+
11+ import de .bogenliga .application .springconfiguration .security .types .UserPermission ;
1012import org .assertj .core .api .Java6Assertions ;
1113import org .junit .Before ;
1214import org .junit .Rule ;
@@ -760,6 +762,60 @@ public void delete() {
760762 }catch (BusinessException e ) { }
761763 }
762764
765+ @ Test
766+ public void delete_meldedeadline_ueberschritten_exception () {
767+ // prepare test data
768+ final DsbMannschaftDO expected = getDsbMannschaftDO ();
769+
770+ final VeranstaltungDO veranstaltungDO = getVeranstaltungDO ();
771+ veranstaltungDO .setVeranstaltungPhase ("Geplant" );
772+ veranstaltungDO .setVeranstaltungMeldeDeadline (
773+ new Date (System .currentTimeMillis () - 24L * 60L * 60L * 1000L )
774+ ); // gestern
775+
776+ // configure mocks
777+ when (requiresOnePermissionAspect .hasPermission (any ())).thenReturn (true );
778+ when (dsbMannschaftComponent .findById (anyLong ())).thenReturn (expected );
779+ when (veranstaltungComponent .findById (anyLong ())).thenReturn (veranstaltungDO );
780+
781+ // assert
782+ assertThatExceptionOfType (BusinessException .class )
783+ .isThrownBy (() -> underTest .delete (ID , principal ))
784+ .withMessageContaining ("Meldedeadline" );
785+
786+ // verify
787+ verify (dsbMannschaftComponent ).findById (ID );
788+ verify (veranstaltungComponent ).findById (VERANSTALTUNG_ID );
789+ verify (dsbMannschaftComponent , never ()).delete (any (), anyLong ());
790+ }
791+
792+ @ Test
793+ public void delete_vor_meldedeadline_erlaubt () {
794+ // prepare test data
795+ final DsbMannschaftDO expected = getDsbMannschaftDO ();
796+
797+ final VeranstaltungDO veranstaltungDO = getVeranstaltungDO ();
798+ veranstaltungDO .setVeranstaltungPhase ("Geplant" );
799+ veranstaltungDO .setVeranstaltungMeldeDeadline (
800+ new Date (System .currentTimeMillis () + 24L * 60L * 60L * 1000L )
801+ ); // morgen
802+
803+ // configure mocks
804+ when (requiresOnePermissionAspect .hasPermission (any ())).thenReturn (true );
805+ when (dsbMannschaftComponent .findById (anyLong ())).thenReturn (expected );
806+ when (veranstaltungComponent .findById (anyLong ())).thenReturn (veranstaltungDO );
807+
808+ // act
809+ underTest .delete (ID , principal );
810+
811+ // verify
812+ verify (dsbMannschaftComponent ).delete (dsbMannschaftVOArgumentCaptor .capture (), anyLong ());
813+
814+ final DsbMannschaftDO deletedDsbMannschaft = dsbMannschaftVOArgumentCaptor .getValue ();
815+ assertThat (deletedDsbMannschaft ).isNotNull ();
816+ assertThat (deletedDsbMannschaft .getId ()).isEqualTo (expected .getId ());
817+ }
818+
763819 @ Test
764820 public void delete_nicht_geplant_exception () {
765821 // prepare test data
@@ -778,6 +834,89 @@ public void delete_nicht_geplant_exception() {
778834 .isThrownBy (()-> underTest .delete (ID , principal ));
779835 }
780836
837+ @ Test
838+ public void delete_no_permission_exception () {
839+ // prepare test data
840+ final DsbMannschaftDO expected = getDsbMannschaftDO ();
841+
842+ // configure mocks
843+ when (dsbMannschaftComponent .findById (anyLong ())).thenReturn (expected );
844+ when (requiresOnePermissionAspect .hasPermission (UserPermission .CAN_DELETE_STAMMDATEN )).thenReturn (false );
845+ when (requiresOnePermissionAspect .hasSpecificPermissionLigaLeiterID (
846+ UserPermission .CAN_MODIFY_MY_VERANSTALTUNG , VERANSTALTUNG_ID )).thenReturn (false );
847+ when (requiresOnePermissionAspect .hasSpecificPermissionSportleiter (
848+ UserPermission .CAN_MODIFY_MY_VEREIN , VEREIN_ID )).thenReturn (false );
849+
850+ // assert
851+ assertThatExceptionOfType (BusinessException .class )
852+ .isThrownBy (() -> underTest .delete (ID , principal ));
853+
854+ // verify
855+ verify (dsbMannschaftComponent , never ()).delete (any (), anyLong ());
856+ }
857+
858+ @ Test
859+ public void delete_erlaubt_fuer_sportleiter_des_eigenen_vereins () {
860+ // prepare test data
861+ final DsbMannschaftDO expected = getDsbMannschaftDO ();
862+ final VeranstaltungDO veranstaltungDO = getVeranstaltungDO ();
863+ veranstaltungDO .setVeranstaltungPhase ("Geplant" );
864+ veranstaltungDO .setVeranstaltungMeldeDeadline (
865+ new Date (System .currentTimeMillis () + 24L * 60L * 60L * 1000L )
866+ ); // morgen
867+
868+ // configure mocks
869+ when (requiresOnePermissionAspect .hasPermission (UserPermission .CAN_DELETE_STAMMDATEN )).thenReturn (false );
870+ when (requiresOnePermissionAspect .hasSpecificPermissionLigaLeiterID (
871+ UserPermission .CAN_MODIFY_MY_VERANSTALTUNG , VERANSTALTUNG_ID )).thenReturn (false );
872+ when (requiresOnePermissionAspect .hasSpecificPermissionSportleiter (
873+ UserPermission .CAN_MODIFY_MY_VEREIN , VEREIN_ID )).thenReturn (true );
874+
875+ when (dsbMannschaftComponent .findById (anyLong ())).thenReturn (expected );
876+ when (veranstaltungComponent .findById (anyLong ())).thenReturn (veranstaltungDO );
877+
878+ // act
879+ underTest .delete (ID , principal );
880+
881+ // verify
882+ verify (dsbMannschaftComponent ).delete (dsbMannschaftVOArgumentCaptor .capture (), anyLong ());
883+
884+ final DsbMannschaftDO deletedDsbMannschaft = dsbMannschaftVOArgumentCaptor .getValue ();
885+ assertThat (deletedDsbMannschaft ).isNotNull ();
886+ assertThat (deletedDsbMannschaft .getId ()).isEqualTo (expected .getId ());
887+ }
888+
889+ @ Test
890+ public void delete_erlaubt_fuer_ligaleiter () {
891+ // prepare test data
892+ final DsbMannschaftDO expected = getDsbMannschaftDO ();
893+ final VeranstaltungDO veranstaltungDO = getVeranstaltungDO ();
894+ veranstaltungDO .setVeranstaltungPhase ("Geplant" );
895+ veranstaltungDO .setVeranstaltungMeldeDeadline (
896+ new Date (System .currentTimeMillis () + 24L * 60L * 60L * 1000L )
897+ ); // morgen
898+
899+ // configure mocks
900+ when (requiresOnePermissionAspect .hasPermission (UserPermission .CAN_DELETE_STAMMDATEN )).thenReturn (false );
901+ when (requiresOnePermissionAspect .hasSpecificPermissionLigaLeiterID (
902+ UserPermission .CAN_MODIFY_MY_VERANSTALTUNG , VERANSTALTUNG_ID )).thenReturn (true );
903+ when (requiresOnePermissionAspect .hasSpecificPermissionSportleiter (
904+ UserPermission .CAN_MODIFY_MY_VEREIN , VEREIN_ID )).thenReturn (false );
905+
906+ when (dsbMannschaftComponent .findById (anyLong ())).thenReturn (expected );
907+ when (veranstaltungComponent .findById (anyLong ())).thenReturn (veranstaltungDO );
908+
909+ // act
910+ underTest .delete (ID , principal );
911+
912+ // verify
913+ verify (dsbMannschaftComponent ).delete (dsbMannschaftVOArgumentCaptor .capture (), anyLong ());
914+
915+ final DsbMannschaftDO deletedDsbMannschaft = dsbMannschaftVOArgumentCaptor .getValue ();
916+ assertThat (deletedDsbMannschaft ).isNotNull ();
917+ assertThat (deletedDsbMannschaft .getId ()).isEqualTo (expected .getId ());
918+ }
919+
781920 @ Test
782921 public void assignMannschaftToVeranstaltung () {
783922
0 commit comments