| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- package cz.davza.studentadventure.commands;
- import cz.davza.studentadventure.TestHelpers;
- import cz.davza.studentadventure.enums.CommandState;
- import cz.davza.studentadventure.objects.CommandResult;
- import cz.davza.studentadventure.objects.GameData;
- import cz.davza.studentadventure.objects.Player;
- import cz.davza.studentadventure.rooms.BedroomRoom;
- import cz.davza.studentadventure.rooms.ClassroomRoom;
- import org.junit.jupiter.api.BeforeEach;
- import org.junit.jupiter.api.Test;
- import java.util.ArrayList;
- import java.util.List;
- import static cz.davza.studentadventure.TestHelpers.execute;
- import static org.junit.jupiter.api.Assertions.*;
- class SleepCommandTest {
- private GameData context;
- private Player player;
- @BeforeEach
- void setUp() {
- context = TestHelpers.buildGameData();
- player = context.getPlayer();
- // Starting room is Bedroom — sleep is valid here immediately
- }
- @Test
- void sleepInBedroomReturnsSuccess() {
- CommandResult result = execute("sleep", context);
- assertEquals(CommandState.SUCCESS, result.getResultState());
- }
- @Test
- void sleepInBedroomRestoresEnergy() {
- player.getEnergy().decrease(50);
- execute("sleep", context);
- assertEquals(100, player.getEnergy().getValue());
- }
- @Test
- void sleepInBedroomReducesStress() {
- player.getStress().increase(60);
- execute("sleep", context);
- assertEquals(0, player.getStress().getValue());
- }
- @Test
- void sleepInBedroomResetsHoursAwake() {
- player.addHoursAwake(20);
- execute("sleep", context);
- assertEquals(cz.davza.studentadventure.enums.DeprivationState.NORMAL,
- player.getDeprivationState());
- }
- @Test
- void sleepInBedroomAdvancesToNextMorning() {
- execute("sleep", context);
- assertEquals(2, context.getTime().getDay());
- assertEquals(8, context.getTime().getHour());
- }
- @Test
- void sleepOutsideBedroomAndClassroomFails() {
- // Walk to hallway first
- context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("hallway"));
- context.getMap().commitRoomChange();
- CommandResult result = execute("sleep", context);
- assertEquals(CommandState.FAILED, result.getResultState());
- }
- @Test
- void sleepInClassroomAdvancesTimeBy2Hours() {
- // Move player to classroom — need book to enter
- context.getPlayer().getInventory().Add(new cz.davza.studentadventure.Items.Book(), 1);
- context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("hallway"));
- context.getMap().commitRoomChange();
- context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("classroom"));
- context.getMap().commitRoomChange();
- int hourBefore = context.getTime().getHour();
- // Run many times to guarantee we hit the success path at least once
- // (30% catch chance means ~99.9% chance of success in 20 attempts)
- boolean succeeded = false;
- for (int i = 0; i < 20; i++) {
- context = TestHelpers.buildGameData();
- player = context.getPlayer();
- player.getInventory().Add(new cz.davza.studentadventure.Items.Book(), 1);
- context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("hallway"));
- context.getMap().commitRoomChange();
- context.getMap().setNextRoom(context.getMap().getCurrentRoom().getExit("classroom"));
- context.getMap().commitRoomChange();
- int before = context.getTime().getHour();
- CommandResult result = execute("sleep", context);
- if (result.getResultState() == CommandState.SUCCESS) {
- assertEquals(before + 2, context.getTime().getHour());
- succeeded = true;
- break;
- }
- }
- assertTrue(succeeded, "Expected at least one successful classroom sleep in 20 attempts");
- }
- @Test
- void sleepInClassroomCanReturnGameOver() {
- // Run many times to guarantee we hit the caught path
- boolean caughtOnce = false;
- for (int i = 0; i < 50; i++) {
- GameData ctx = TestHelpers.buildGameData();
- ctx.getPlayer().getInventory().Add(new cz.davza.studentadventure.Items.Book(), 1);
- ctx.getMap().setNextRoom(ctx.getMap().getCurrentRoom().getExit("hallway"));
- ctx.getMap().commitRoomChange();
- ctx.getMap().setNextRoom(ctx.getMap().getCurrentRoom().getExit("classroom"));
- ctx.getMap().commitRoomChange();
- CommandResult result = execute("sleep", ctx);
- if (result.getResultState() == CommandState.GAME_OVER) {
- caughtOnce = true;
- break;
- }
- }
- assertTrue(caughtOnce, "Expected to be caught sleeping at least once in 50 attempts");
- }
- }
|