WalkCommandTest.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package cz.davza.studentadventure.commands;
  2. import cz.davza.studentadventure.Items.Book;
  3. import cz.davza.studentadventure.TestHelpers;
  4. import cz.davza.studentadventure.enums.CommandState;
  5. import cz.davza.studentadventure.objects.CommandResult;
  6. import cz.davza.studentadventure.objects.GameData;
  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 WalkCommandTest {
  12. private GameData context;
  13. @BeforeEach
  14. void setUp() {
  15. context = TestHelpers.buildGameData();
  16. // starts in Bedroom
  17. }
  18. @Test
  19. void walkToValidExitSetsNextRoom() {
  20. execute("walk hallway", context);
  21. assertTrue(context.getMap().hasPendingRoomChange());
  22. }
  23. @Test
  24. void walkToValidExitReturnsRoomChanged() {
  25. CommandResult result = execute("walk hallway", context);
  26. assertEquals(CommandState.ROOM_CHANGED, result.getResultState());
  27. }
  28. @Test
  29. void walkAdvancesTimeByTwoHours() {
  30. int before = context.getTime().getHour();
  31. execute("walk hallway", context);
  32. assertEquals(before + 2, context.getTime().getHour());
  33. }
  34. @Test
  35. void walkAdvancesHoursAwake() {
  36. execute("walk hallway", context);
  37. // 1 hour awake — still NORMAL
  38. assertEquals(cz.davza.studentadventure.enums.DeprivationState.NORMAL,
  39. context.getPlayer().getDeprivationState());
  40. }
  41. @Test
  42. void walkToInvalidExitReturnsFailed() {
  43. CommandResult result = execute("walk narnia", context);
  44. assertEquals(CommandState.FAILED, result.getResultState());
  45. }
  46. @Test
  47. void walkWithNoParamsReturnsInvalidParams() {
  48. CommandResult result = execute("walk", context);
  49. assertEquals(CommandState.INVALID_PARAMS, result.getResultState());
  50. }
  51. @Test
  52. void walkToClassroomWithoutBookReturnsFailed() {
  53. // Bedroom → hallway (commit) → classroom (no book)
  54. execute("walk hallway", context);
  55. context.getMap().commitRoomChange();
  56. CommandResult result = execute("walk classroom", context);
  57. assertEquals(CommandState.FAILED, result.getResultState());
  58. }
  59. @Test
  60. void walkToClassroomWithoutBookAppliesStressPenalty() {
  61. execute("walk hallway", context);
  62. context.getMap().commitRoomChange();
  63. int stressBefore = context.getPlayer().getStress().getValue();
  64. execute("walk classroom", context);
  65. assertTrue(context.getPlayer().getStress().getValue() > stressBefore);
  66. }
  67. @Test
  68. void walkToClassroomWithBookReturnsRoomChanged() {
  69. context.getPlayer().getInventory().Add(new Book(), 1);
  70. execute("walk hallway", context);
  71. context.getMap().commitRoomChange();
  72. CommandResult result = execute("walk classroom", context);
  73. assertEquals(CommandState.ROOM_CHANGED, result.getResultState());
  74. }
  75. @Test
  76. void walkToExamRoomReturnsActionPending() {
  77. // Bedroom → hallway → classroom (with book) → examroom
  78. context.getPlayer().getInventory().Add(new Book(), 1);
  79. execute("walk hallway", context);
  80. context.getMap().commitRoomChange();
  81. execute("walk classroom", context);
  82. context.getMap().commitRoomChange();
  83. CommandResult result = execute("walk examroom", context);
  84. assertEquals(CommandState.ACTION_PENDING, result.getResultState());
  85. }
  86. }