TakeExamCommandTest.java 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package cz.davza.studentadventure.commands;
  2. import cz.davza.studentadventure.TestHelpers;
  3. import cz.davza.studentadventure.enums.CommandState;
  4. import cz.davza.studentadventure.objects.CommandResult;
  5. import cz.davza.studentadventure.objects.GameData;
  6. import cz.davza.studentadventure.objects.Player;
  7. import org.junit.jupiter.api.BeforeEach;
  8. import org.junit.jupiter.api.Test;
  9. import static cz.davza.studentadventure.TestHelpers.execute;
  10. import static org.junit.jupiter.api.Assertions.*;
  11. class TakeExamCommandTest {
  12. private GameData context;
  13. private Player player;
  14. @BeforeEach
  15. void setUp() {
  16. context = TestHelpers.buildGameData();
  17. player = context.getPlayer();
  18. }
  19. @Test
  20. void examPassesWhenIntelligenceHighEnough() {
  21. // Need effectiveScore >= 50. intelligence - stress/10 >= 50
  22. // Set intelligence to 50, stress to 0 → score = 50
  23. player.getIntelligence().increase(100); // clamps to 100
  24. CommandResult result = execute("takeexam", context);
  25. assertEquals(CommandState.GAME_WIN, result.getResultState());
  26. }
  27. @Test
  28. void examFailsWhenIntelligenceTooLow() {
  29. // Default intelligence = 5, stress = 0 → score = 5, need 50 → fail
  30. CommandResult result = execute("takeexam", context);
  31. assertEquals(CommandState.GAME_OVER, result.getResultState());
  32. }
  33. @Test
  34. void examStressPenaltyReducesScore() {
  35. // intelligence 60, stress 100 → penalty 10 → score 50 → just passes
  36. player.getIntelligence().increase(100); // 100
  37. player.getStress().increase(100); // 100 → penalty 10
  38. // effectiveScore = 100 - 10 = 90 → passes
  39. CommandResult result = execute("takeexam", context);
  40. assertEquals(CommandState.GAME_WIN, result.getResultState());
  41. }
  42. @Test
  43. void examFailsWhenStressPenaltyPullsScoreBelow50() {
  44. // intelligence = 55, stress = 100 → penalty 10 → score 45 → fail
  45. player.getIntelligence().increase(50); // starts at 5, becomes 55
  46. player.getStress().increase(100);
  47. CommandResult result = execute("takeexam", context);
  48. assertEquals(CommandState.GAME_OVER, result.getResultState());
  49. }
  50. @Test
  51. void examPassMessageContainsDistinctionWhenScoreAbove80() {
  52. player.getIntelligence().increase(100); // 100
  53. // stress = 0 → score = 100 → distinction
  54. CommandResult result = execute("takeexam", context);
  55. assertTrue(result.getResultMessage().contains("DISTINCTION"));
  56. }
  57. @Test
  58. void examPassMessageContainsMeritWhenScoreBetween65And80() {
  59. // Need score 65-79: intelligence 70, stress 0 → score 70
  60. player.getIntelligence().increase(65); // 5 + 65 = 70
  61. CommandResult result = execute("takeexam", context);
  62. assertTrue(result.getResultMessage().contains("MERIT"));
  63. }
  64. @Test
  65. void examPassMessageContainsPassWhenScoreBetween50And64() {
  66. // Need score 50-64: intelligence 55, stress 0 → score 55
  67. player.getIntelligence().increase(50); // 5 + 50 = 55
  68. CommandResult result = execute("takeexam", context);
  69. assertTrue(result.getResultMessage().contains("RESULT: PASS\n"));
  70. }
  71. @Test
  72. void examScoreExactlyAtThresholdPasses() {
  73. // intelligence = 50, stress 0 → score exactly 50 → pass
  74. player.getIntelligence().increase(45); // 5 + 45 = 50
  75. CommandResult result = execute("takeexam", context);
  76. assertEquals(CommandState.GAME_WIN, result.getResultState());
  77. }
  78. @Test
  79. void examScoreOneBelowThresholdFails() {
  80. // intelligence = 49, stress 0 → score 49 → fail
  81. player.getIntelligence().increase(44); // 5 + 44 = 49
  82. CommandResult result = execute("takeexam", context);
  83. assertEquals(CommandState.GAME_OVER, result.getResultState());
  84. }
  85. }