diff --git a/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/GameResult.java b/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/GameResult.java new file mode 100644 index 0000000..6432ebc --- /dev/null +++ b/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/GameResult.java @@ -0,0 +1,7 @@ +package fr.iut_fbleau.info.but3.automation.rock_paper_scissors.play.domain; + +public enum GameResult { + WIN, + LOOSE, + TIE, +} diff --git a/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/Move.java b/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/Move.java index 34c1f20..4da62cb 100644 --- a/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/Move.java +++ b/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/Move.java @@ -6,12 +6,15 @@ public enum Move { SCISSORS, WELL; - public boolean beats(Move other) { - return switch (this) { + public GameResult beats(Move other) { + if (this.equals(other)) + return GameResult.TIE; + boolean beats = switch (this) { case ROCK -> other == SCISSORS; case PAPER -> other == ROCK || other == WELL; case SCISSORS -> other == PAPER; case WELL -> other == ROCK || other == SCISSORS; }; + return beats ? GameResult.WIN : GameResult.LOOSE; } } diff --git a/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/RockPaperScissorsPlayer.java b/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/RockPaperScissorsPlayer.java index 90e7b79..0e69416 100644 --- a/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/RockPaperScissorsPlayer.java +++ b/src/main/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/RockPaperScissorsPlayer.java @@ -11,12 +11,14 @@ public record RockPaperScissorsPlayer(CpuPick cpuPick, StatSave statSave) implem public static final String WIN = "WIN"; public static final String LOOSE = "LOOSE"; + public static final String TIE = "TIE"; @Override public RoundResult playRound(String name, Move move) { var cpuPicked = this.cpuPick.pick(); - boolean beats = move.beats(cpuPicked); - String result = beats ? WIN : LOOSE; + GameResult beats = move.beats(cpuPicked); + String result = String.valueOf(beats); + if (result.equals(WIN)) { this.statSave.addWin(name); } diff --git a/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/PlayControllerTest.java b/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/PlayControllerTest.java index 1e0cd10..b914c8e 100644 --- a/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/PlayControllerTest.java +++ b/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/PlayControllerTest.java @@ -24,8 +24,7 @@ import org.springframework.test.web.servlet.MockMvc; import java.util.stream.Stream; -import static fr.iut_fbleau.info.but3.automation.rock_paper_scissors.play.domain.RockPaperScissorsPlayer.LOOSE; -import static fr.iut_fbleau.info.but3.automation.rock_paper_scissors.play.domain.RockPaperScissorsPlayer.WIN; +import static fr.iut_fbleau.info.but3.automation.rock_paper_scissors.play.domain.RockPaperScissorsPlayer.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -46,7 +45,8 @@ public class PlayControllerTest { public static Stream scenario() { return Stream.of( Arguments.of(Move.ROCK, Move.SCISSORS, WIN), - Arguments.of(Move.ROCK, Move.PAPER, LOOSE) + Arguments.of(Move.ROCK, Move.PAPER, LOOSE), + Arguments.of(Move.ROCK,Move.ROCK, TIE) ); } @@ -67,5 +67,4 @@ public class PlayControllerTest { .andExpect(jsonPath("$.result").value(expectedResult)) .andExpect(jsonPath("$.cpu").value(cpuMove.name())); } - } diff --git a/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/MoveTest.java b/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/MoveTest.java index 2fd5b03..5accea6 100644 --- a/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/MoveTest.java +++ b/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/MoveTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; import java.util.stream.Stream; @@ -17,6 +18,9 @@ class MoveTest { Assertions.assertEquals(4, Move.values().length); } + private void assertTrue(GameResult beats) {} + private void assertFalse(GameResult beats) {} + @ParameterizedTest(name = "{0} should beat {1}") @MethodSource("winnable") void should_win(Move move1, Move move2) { @@ -29,6 +33,12 @@ class MoveTest { assertFalse(move2.beats(move1)); } + @ParameterizedTest(name = "{1} should tie against {0}") + @EnumSource(Move.class) + void should_tie(Move move) { + assertFalse(move.beats(move)); + } + static Stream winnable(){ return Stream.of( Arguments.of(Move.ROCK,Move.SCISSORS), diff --git a/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/RockPaperScissorsPlayTest.java b/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/RockPaperScissorsPlayTest.java index 019b992..60f5c01 100644 --- a/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/RockPaperScissorsPlayTest.java +++ b/src/test/java/fr/iut_fbleau/info/but3/automation/rock_paper_scissors/play/domain/RockPaperScissorsPlayTest.java @@ -39,4 +39,12 @@ public class RockPaperScissorsPlayTest { assertEquals(Move.ROCK, roundResult.cpuChoice()); verify(statSaver, times(0)).addWin("joe"); } + + void should_tie_a_game(){ + cpuPick.setNextMove(Move.ROCK); + RoundResult roundResult = play.playRound("joe", Move.ROCK); + assertEquals("TIE", roundResult.result()); + assertEquals("joe", roundResult.opponent()); + } + }