From ae2737b7f9abc2eba131dc70e30d9a7c6d680429 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A1n=20Dovjak?= <xdovjak@fi.muni.cz>
Date: Fri, 28 May 2021 16:57:29 +0200
Subject: [PATCH] feat: firePlayer - API and changes to facade and tests

---
 .../facades/TeamManagerFacade.java            |  3 +--
 .../rest/controller/IceHockeyManagerApi.java  |  8 +++++--
 .../facades/TeamManagerFacadeImpl.java        | 11 +++++----
 .../facades/TeamManagerFacadeImplTest.java    | 23 ++++++++++++-------
 4 files changed, 29 insertions(+), 16 deletions(-)

diff --git a/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacade.java b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacade.java
index 12e72db..2333273 100644
--- a/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacade.java
+++ b/api/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacade.java
@@ -39,9 +39,8 @@ public interface TeamManagerFacade {
      * Delete player with playerId from team with teamId
      *
      * @param playerId Identifier of player
-     * @param teamId Identifier of team
      * @throws UnknownPlayerException If playerId does not match any player
      * @throws UnknownTeamException If teamId does not match any team
      */
-    void firePlayer(long playerId, long teamId);
+    void firePlayer(long playerId);
 }
diff --git a/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/rest/controller/IceHockeyManagerApi.java b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/rest/controller/IceHockeyManagerApi.java
index 66edff1..461ee56 100644
--- a/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/rest/controller/IceHockeyManagerApi.java
+++ b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/rest/controller/IceHockeyManagerApi.java
@@ -42,6 +42,11 @@ public class IceHockeyManagerApi {
         return userFacade.getPlayersInTeam(id);
     }
 
+    @DeleteMapping("/player/fire/{id}")
+    public final void firePlayer(@PathVariable Long id) {
+        teamManagerFacade.firePlayer(id);
+    }
+
     @PostMapping("/player/recruitNew")
     public final void recruitNewPlayer(@Valid @RequestBody PlayerCreateDTO player) {
         teamManagerFacade.recruitNewPlayer(player);
@@ -58,8 +63,7 @@ public class IceHockeyManagerApi {
         return userFacade.getTeamsInLeague();
     }
 
-    @PostMapping("/team/create")
-    public final void createTeam(@Valid @RequestBody TeamCreateDTO team) {
+    @PostMapping("/team/create")    public final void createTeam(@Valid @RequestBody TeamCreateDTO team) {
         leagueManagerFacade.createNewTeam(team);
     }
 
diff --git a/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java b/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
index ebef3d8..5d1230b 100644
--- a/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
+++ b/service/src/main/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImpl.java
@@ -59,13 +59,16 @@ public class TeamManagerFacadeImpl implements TeamManagerFacade{
     }
 
     @Override
-    public void firePlayer(long playerId, long teamId) {
-        Team team = teamService.findTeam(teamId).orElseThrow(
-                () -> new UnknownTeamException("Team not found")
-        );
+    public void firePlayer(long playerId) {
         Player player = playerService.findPlayer(playerId).orElseThrow(
                 () -> new UnknownPlayerException("Player not found")
         );
+        Team playerTeam = player.getTeam().orElseThrow(
+                () -> new UnknownTeamException("Player not in the team")
+        );
+        Team team = teamService.findTeam(playerTeam.getId()).orElseThrow(
+                () -> new UnknownTeamException("Team not found")
+        );
         teamService.removePlayerFromTeam(team, player);
         playerService.removeTeamFromPlayer(player, team);
     }
diff --git a/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImplTest.java b/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImplTest.java
index 1fdb2bb..233e5e7 100644
--- a/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImplTest.java
+++ b/service/src/test/java/cz/muni/fi/pa165/icehockeymanager/facades/TeamManagerFacadeImplTest.java
@@ -70,12 +70,12 @@ public class TeamManagerFacadeImplTest {
     }
 
     @Test
-    public void firePlayerNonexistentTeam() {
-        when(teamService.findTeam(1L)).thenReturn(Optional.empty());
+    public void firePlayerNotInTeam() {
+        Player player = buildPlayerMock(1L, "Andrej Sekera");
+        when(playerService.findPlayer(1L)).thenReturn(Optional.of(player));
         assertThatExceptionOfType(UnknownTeamException.class).isThrownBy(
-                () -> teamManagerFacade.firePlayer(1L, 1L)
+                () -> teamManagerFacade.firePlayer(1L)
         );
-        verify(teamService).findTeam(1L);
     }
 
     @Test
@@ -84,9 +84,8 @@ public class TeamManagerFacadeImplTest {
         when(teamService.findTeam(1L)).thenReturn(Optional.ofNullable(team));
         when(playerService.findPlayer(1L)).thenReturn(Optional.empty());
         assertThatExceptionOfType(UnknownPlayerException.class).isThrownBy(
-                () -> teamManagerFacade.firePlayer(1L, 1L)
+                () -> teamManagerFacade.firePlayer(1L)
         );
-        verify(teamService).findTeam(1L);
         verify(playerService).findPlayer(1L);
     }
 
@@ -94,9 +93,9 @@ public class TeamManagerFacadeImplTest {
     public void firePlayer() {
         Team team = buildTeamMock(1L, "Boston Bruins");
         when(teamService.findTeam(1L)).thenReturn(Optional.ofNullable(team));
-        Player player = buildPlayerMock(1L, "David Pastrnak");
+        Player player = buildPlayerMock(1L, "David Pastrnak", team);
         when(playerService.findPlayer(1L)).thenReturn(Optional.ofNullable(player));
-        teamManagerFacade.firePlayer(1L, 1L);
+        teamManagerFacade.firePlayer(1L);
         verify(teamService).removePlayerFromTeam(team, player);
         verify(playerService).removeTeamFromPlayer(player, team);
     }
@@ -145,6 +144,14 @@ public class TeamManagerFacadeImplTest {
         return player;
     }
 
+    private Player buildPlayerMock(Long id, String name, Team team) {
+        var player = mock(Player.class);
+        when(player.getId()).thenReturn(id);
+        when(player.getName()).thenReturn(name);
+        when(player.getTeam()).thenReturn(Optional.ofNullable(team));
+        return player;
+    }
+
     private PlayerCreateDTO buildPlayerCreateDtoMock(String name) {
         var player = new PlayerCreateDTO();
         player.setName(name);
-- 
GitLab