| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- 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 org.junit.jupiter.api.BeforeEach;
- import org.junit.jupiter.api.Test;
- import static cz.davza.studentadventure.TestHelpers.execute;
- import static org.junit.jupiter.api.Assertions.*;
- class TakeExamCommandTest {
- private GameData context;
- private Player player;
- @BeforeEach
- void setUp() {
- context = TestHelpers.buildGameData();
- player = context.getPlayer();
- }
- @Test
- void examPassesWhenIntelligenceHighEnough() {
- // Need effectiveScore >= 50. intelligence - stress/10 >= 50
- // Set intelligence to 50, stress to 0 → score = 50
- player.getIntelligence().increase(100); // clamps to 100
- CommandResult result = execute("takeexam", context);
- assertEquals(CommandState.GAME_WIN, result.getResultState());
- }
- @Test
- void examFailsWhenIntelligenceTooLow() {
- // Default intelligence = 5, stress = 0 → score = 5, need 50 → fail
- CommandResult result = execute("takeexam", context);
- assertEquals(CommandState.GAME_OVER, result.getResultState());
- }
- @Test
- void examStressPenaltyReducesScore() {
- // intelligence 60, stress 100 → penalty 10 → score 50 → just passes
- player.getIntelligence().increase(100); // 100
- player.getStress().increase(100); // 100 → penalty 10
- // effectiveScore = 100 - 10 = 90 → passes
- CommandResult result = execute("takeexam", context);
- assertEquals(CommandState.GAME_WIN, result.getResultState());
- }
- @Test
- void examFailsWhenStressPenaltyPullsScoreBelow50() {
- // intelligence = 55, stress = 100 → penalty 10 → score 45 → fail
- player.getIntelligence().increase(50); // starts at 5, becomes 55
- player.getStress().increase(100);
- CommandResult result = execute("takeexam", context);
- assertEquals(CommandState.GAME_OVER, result.getResultState());
- }
- @Test
- void examPassMessageContainsDistinctionWhenScoreAbove80() {
- player.getIntelligence().increase(100); // 100
- // stress = 0 → score = 100 → distinction
- CommandResult result = execute("takeexam", context);
- assertTrue(result.getResultMessage().contains("DISTINCTION"));
- }
- @Test
- void examPassMessageContainsMeritWhenScoreBetween65And80() {
- // Need score 65-79: intelligence 70, stress 0 → score 70
- player.getIntelligence().increase(65); // 5 + 65 = 70
- CommandResult result = execute("takeexam", context);
- assertTrue(result.getResultMessage().contains("MERIT"));
- }
- @Test
- void examPassMessageContainsPassWhenScoreBetween50And64() {
- // Need score 50-64: intelligence 55, stress 0 → score 55
- player.getIntelligence().increase(50); // 5 + 50 = 55
- CommandResult result = execute("takeexam", context);
- assertTrue(result.getResultMessage().contains("RESULT: PASS\n"));
- }
- @Test
- void examScoreExactlyAtThresholdPasses() {
- // intelligence = 50, stress 0 → score exactly 50 → pass
- player.getIntelligence().increase(45); // 5 + 45 = 50
- CommandResult result = execute("takeexam", context);
- assertEquals(CommandState.GAME_WIN, result.getResultState());
- }
- @Test
- void examScoreOneBelowThresholdFails() {
- // intelligence = 49, stress 0 → score 49 → fail
- player.getIntelligence().increase(44); // 5 + 44 = 49
- CommandResult result = execute("takeexam", context);
- assertEquals(CommandState.GAME_OVER, result.getResultState());
- }
- }
|