diff --git a/Semesterprojekt/src/main/java/thb/jeanluc/adventure/game/QuestEngine.java b/Semesterprojekt/src/main/java/thb/jeanluc/adventure/game/QuestEngine.java index 7054116..46fc4cc 100644 --- a/Semesterprojekt/src/main/java/thb/jeanluc/adventure/game/QuestEngine.java +++ b/Semesterprojekt/src/main/java/thb/jeanluc/adventure/game/QuestEngine.java @@ -62,6 +62,7 @@ public final class QuestEngine { ctx.getQuestLog().complete(q.id()); ctx.getIo().print(StyledText.builder() .heading("★ Quest complete: ").plain(q.title()).build()); + ctx.save(); } public static QuestView viewOf(GameContext ctx) { diff --git a/Semesterprojekt/src/test/java/thb/jeanluc/adventure/game/QuestAutosaveTest.java b/Semesterprojekt/src/test/java/thb/jeanluc/adventure/game/QuestAutosaveTest.java new file mode 100644 index 0000000..d3a94e2 --- /dev/null +++ b/Semesterprojekt/src/test/java/thb/jeanluc/adventure/game/QuestAutosaveTest.java @@ -0,0 +1,37 @@ +package thb.jeanluc.adventure.game; + +import org.junit.jupiter.api.Test; +import thb.jeanluc.adventure.io.TestIO; +import thb.jeanluc.adventure.model.Condition; +import thb.jeanluc.adventure.model.Player; +import thb.jeanluc.adventure.model.Quest; +import thb.jeanluc.adventure.model.QuestStage; +import thb.jeanluc.adventure.model.Room; +import thb.jeanluc.adventure.model.World; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +import static org.assertj.core.api.Assertions.assertThat; + +class QuestAutosaveTest { + + @Test + void questCompletionTriggersSaveCallback() { + Quest q = new Quest("q", "Quest", true, List.of( + new QuestStage("Do it", List.of(new Condition(Condition.Type.FLAG, "a")), List.of())), + List.of()); + Room k = new Room("k", "K", "d"); + World w = new World(Map.of("k", k), Map.of(), Map.of(), "t", "w", Map.of("q", q)); + GameContext ctx = new GameContext(new GameSession(w, new Player(k, 0), "slot"), new TestIO()); + AtomicInteger saves = new AtomicInteger(); + ctx.setSaveCallback(saves::incrementAndGet); + + QuestEngine.tick(ctx); // starts quest; not complete yet + assertThat(saves.get()).isZero(); + ctx.getState().set("a"); + QuestEngine.tick(ctx); // completes quest → autosave + assertThat(saves.get()).isEqualTo(1); + } +}