Skip to content

Commit 0517b5d

Browse files
committed
test: verify MainGameActions save flow events (showSaveUI vs performSave)
1 parent 89b2bf1 commit 0517b5d

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.csse3200.game.components.maingame;
2+
3+
import com.csse3200.game.GdxGame;
4+
import com.csse3200.game.entities.Entity;
5+
import com.csse3200.game.entities.EntityService;
6+
import com.csse3200.game.events.EventHandler;
7+
import com.csse3200.game.extensions.GameExtension;
8+
import com.csse3200.game.services.ServiceLocator;
9+
import org.junit.jupiter.api.AfterEach;
10+
import org.junit.jupiter.api.BeforeEach;
11+
import org.junit.jupiter.api.Test;
12+
import org.junit.jupiter.api.extension.ExtendWith;
13+
14+
import static org.junit.jupiter.api.Assertions.*;
15+
16+
@ExtendWith(GameExtension.class)
17+
class MainGameActionsSaveFlowTest {
18+
19+
private Entity ui;
20+
private boolean showSaveUITriggered;
21+
private boolean showPauseUITriggered;
22+
private boolean saveFeedbackTriggered;
23+
24+
@BeforeEach
25+
void setup() {
26+
// Minimal services required by MainGameActions save path
27+
ServiceLocator.registerEntityService(new EntityService());
28+
29+
ui = new Entity();
30+
// Provide a lightweight GdxGame; MainGameActions only uses it to set screens for
31+
// other events, not in the paths we test here.
32+
GdxGame dummyGame = new GdxGame();
33+
ui.addComponent(new MainGameActions(dummyGame));
34+
35+
// Observe events
36+
EventHandler events = ui.getEvents();
37+
events.addListener("showSaveUI", () -> showSaveUITriggered = true);
38+
events.addListener("showPauseUI", () -> showPauseUITriggered = true);
39+
events.addListener("showSaveSuccess", () -> saveFeedbackTriggered = true);
40+
events.addListener("showSaveError", () -> saveFeedbackTriggered = true);
41+
42+
// Complete entity creation to wire listeners
43+
ServiceLocator.getEntityService().register(ui);
44+
}
45+
46+
@AfterEach
47+
void cleanup() {
48+
ServiceLocator.clear();
49+
showSaveUITriggered = false;
50+
showPauseUITriggered = false;
51+
saveFeedbackTriggered = false;
52+
}
53+
54+
@Test
55+
void saveEvent_shouldOnlyShowSaveUI_andNotPause() {
56+
// When
57+
ui.getEvents().trigger("save");
58+
59+
// Then
60+
assertTrue(showSaveUITriggered, "save should trigger showSaveUI");
61+
assertFalse(showPauseUITriggered, "save should not trigger showPauseUI (no implicit pause)");
62+
}
63+
64+
@Test
65+
void performSave_shouldGiveFeedback_andNotPause() {
66+
// When
67+
ui.getEvents().trigger("performSave");
68+
69+
// Then: one of success/error feedback must be fired, but never pause UI
70+
assertTrue(saveFeedbackTriggered, "performSave should emit save feedback event");
71+
assertFalse(showPauseUITriggered, "performSave should not trigger showPauseUI");
72+
}
73+
}
74+
75+

0 commit comments

Comments
 (0)