StudyCommandTest.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package cz.davza.studentadventure.commands;
  2. import cz.davza.studentadventure.TestHelpers;
  3. import cz.davza.studentadventure.enums.CommandState;
  4. import cz.davza.studentadventure.enums.DeprivationState;
  5. import cz.davza.studentadventure.objects.CommandResult;
  6. import cz.davza.studentadventure.objects.GameData;
  7. import cz.davza.studentadventure.objects.Player;
  8. import org.junit.jupiter.api.BeforeEach;
  9. import org.junit.jupiter.api.Test;
  10. import static cz.davza.studentadventure.TestHelpers.execute;
  11. import static org.junit.jupiter.api.Assertions.*;
  12. class StudyCommandTest {
  13. private GameData context;
  14. private Player player;
  15. @BeforeEach
  16. void setUp() {
  17. context = TestHelpers.buildGameData();
  18. player = context.getPlayer();
  19. }
  20. @Test
  21. void studyOneHourIncreasesIntelligenceBy5() {
  22. execute("study 1", context);
  23. assertEquals(10, player.getIntelligence().getValue());
  24. }
  25. @Test
  26. void studyOneHourCostsEnergy() {
  27. int before = player.getEnergy().getValue();
  28. execute("study 1", context);
  29. assertTrue(player.getEnergy().getValue() < before);
  30. }
  31. @Test
  32. void studyOneHourIncreasesStress() {
  33. execute("study 1", context);
  34. assertTrue(player.getStress().getValue() > 0);
  35. }
  36. @Test
  37. void studyOneHourAdvancesTimeByOneHour() {
  38. int before = context.getTime().getHour();
  39. execute("study 1", context);
  40. assertEquals(before + 1, context.getTime().getHour());
  41. }
  42. @Test
  43. void studyMultipleHoursStacksGains() {
  44. execute("study 3", context);
  45. assertEquals(5 + 15, player.getIntelligence().getValue());
  46. }
  47. @Test
  48. void studyMultipleHoursAdvancesTimeByThatMany() {
  49. int before = context.getTime().getHour();
  50. execute("study 3", context);
  51. assertEquals(before + 3, context.getTime().getHour());
  52. }
  53. @Test
  54. void studyWithNoParamsReturnsInvalidParams() {
  55. CommandResult result = execute("study", context);
  56. assertEquals(CommandState.INVALID_PARAMS, result.getResultState());
  57. }
  58. @Test
  59. void studyWithZeroHoursReturnsInvalidParams() {
  60. CommandResult result = execute("study 0", context);
  61. assertEquals(CommandState.INVALID_PARAMS, result.getResultState());
  62. }
  63. @Test
  64. void studyWithNegativeHoursReturnsInvalidParams() {
  65. CommandResult result = execute("study -1", context);
  66. assertEquals(CommandState.INVALID_PARAMS, result.getResultState());
  67. }
  68. @Test
  69. void studyWithNonNumberReturnsInvalidParams() {
  70. CommandResult result = execute("study abc", context);
  71. assertEquals(CommandState.INVALID_PARAMS, result.getResultState());
  72. }
  73. @Test
  74. void studyWhenEnergyZeroReturnsFailed() {
  75. player.getEnergy().decrease(100);
  76. CommandResult result = execute("study 1", context);
  77. assertEquals(CommandState.FAILED, result.getResultState());
  78. }
  79. @Test
  80. void studyStopsEarlyWhenEnergyRunsOut() {
  81. player.getEnergy().decrease(85); // 15 energy left, first hour costs ~10, second ~13 → stops at 1
  82. CommandResult result = execute("study 2", context);
  83. assertEquals(CommandState.SUCCESS, result.getResultState());
  84. assertTrue(result.getResultMessage().contains("run out of energy"));
  85. }
  86. @Test
  87. void studyAddsToHoursAwakeCounter() {
  88. execute("study 3", context);
  89. // 3 hours awake is still NORMAL (threshold is 14)
  90. assertEquals(DeprivationState.NORMAL, player.getDeprivationState());
  91. }
  92. @Test
  93. void studyReturnsSuccessState() {
  94. CommandResult result = execute("study 1", context);
  95. assertEquals(CommandState.SUCCESS, result.getResultState());
  96. }
  97. @Test
  98. void studyCostsMoreEnergyWithDeprivation() {
  99. // Push player to deprived state
  100. player.addHoursAwake(25);
  101. int energyBefore = player.getEnergy().getValue();
  102. execute("study 1", context);
  103. int energyCostDeprived = energyBefore - player.getEnergy().getValue();
  104. // Reset and do the same at normal state
  105. context = TestHelpers.buildGameData();
  106. player = context.getPlayer();
  107. int energyBefore2 = player.getEnergy().getValue();
  108. execute("study 1", context);
  109. int energyCostNormal = energyBefore2 - player.getEnergy().getValue();
  110. assertTrue(energyCostDeprived > energyCostNormal);
  111. }
  112. }