ComputerTest.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package cz.davza.studentadventure.items;
  2. import cz.davza.studentadventure.Items.Computer;
  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 org.junit.jupiter.api.Assertions.*;
  10. class ComputerTest {
  11. private Computer computer;
  12. private GameData context;
  13. private static final String PASSWORD = "java123";
  14. @BeforeEach
  15. void setUp() {
  16. context = TestHelpers.buildGameData();
  17. computer = new Computer(PASSWORD);
  18. // Navigate to computer lab where study is allowed
  19. context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("hallway"));
  20. context.getMap().commitRoomChange();
  21. context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("studyroom"));
  22. context.getMap().commitRoomChange();
  23. context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("computerlab"));
  24. context.getMap().commitRoomChange();
  25. }
  26. @Test
  27. void interactWhileLockedRequestsPassword() {
  28. CommandResult result = computer.Interact(context);
  29. assertEquals(CommandState.ACTION_PENDING, result.getResultState());
  30. assertTrue(result.getResultMessage().contains("locked"));
  31. }
  32. @Test
  33. void exitWhileAtPasswordPromptResumesGame() {
  34. computer.Interact(context);
  35. CommandResult result = computer.handleCommand("exit", context);
  36. assertEquals(CommandState.ACTION_RESUMED, result.getResultState());
  37. }
  38. @Test
  39. void wrongPasswordReturnsFailed() {
  40. computer.Interact(context);
  41. CommandResult result = computer.handleCommand("wrongpass", context);
  42. assertEquals(CommandState.FAILED, result.getResultState());
  43. }
  44. @Test
  45. void wrongPasswordKeepsComputerLocked() {
  46. computer.Interact(context);
  47. computer.handleCommand("wrongpass", context);
  48. // Should still be locked — interacting again should ask for password
  49. CommandResult result = computer.Interact(context);
  50. assertTrue(result.getResultMessage().contains("locked"));
  51. }
  52. @Test
  53. void correctPasswordUnlocksComputer() {
  54. computer.Interact(context);
  55. CommandResult result = computer.handleCommand(PASSWORD, context);
  56. // Should return success (handler already on computer)
  57. assertEquals(CommandState.SUCCESS, result.getResultState());
  58. }
  59. @Test
  60. void afterUnlockInteractGoesActiveNotPassword() {
  61. computer.Interact(context);
  62. computer.handleCommand(PASSWORD, context);
  63. // Next interact should go straight to active state
  64. CommandResult result = computer.Interact(context);
  65. assertEquals(CommandState.ACTION_PENDING, result.getResultState());
  66. assertFalse(result.getResultMessage().contains("locked"));
  67. }
  68. @Test
  69. void exitWhileActiveResumesGame() {
  70. computer.Interact(context);
  71. computer.handleCommand(PASSWORD, context);
  72. CommandResult result = computer.handleCommand("exit", context);
  73. assertEquals(CommandState.ACTION_RESUMED, result.getResultState());
  74. }
  75. @Test
  76. void studyCommandWorksWhileActiveOnComputer() {
  77. computer.Interact(context);
  78. computer.handleCommand(PASSWORD, context);
  79. int intBefore = context.getPlayer().getIntelligence().getValue();
  80. computer.handleCommand("study 1", context);
  81. assertEquals(intBefore + 5, context.getPlayer().getIntelligence().getValue());
  82. }
  83. @Test
  84. void unknownCommandWhileActiveReturnsFailed() {
  85. computer.Interact(context);
  86. computer.handleCommand(PASSWORD, context);
  87. CommandResult result = computer.handleCommand("sleep", context);
  88. assertEquals(CommandState.FAILED, result.getResultState());
  89. }
  90. }