Skip to content

Commit 4007ff7

Browse files
committed
Add unit tests for extracted Manager classes
- EventRulesManagerTest: 18 tests for CRUD, state, import/export - DashboardManagerTest: 9 tests for visibility, callbacks, data - NavigationManagerTest: 8 tests for visibility and state - MelodyManagerTest: 2 tests (audio tests need instrumented tests) All 161 tests pass.
1 parent 751c261 commit 4007ff7

4 files changed

Lines changed: 624 additions & 0 deletions

File tree

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
package ch.fhnw.pepper_realtime.manager
2+
3+
import ch.fhnw.pepper_realtime.data.PerceptionData
4+
import ch.fhnw.pepper_realtime.ui.DashboardState
5+
import org.junit.Assert.assertEquals
6+
import org.junit.Assert.assertFalse
7+
import org.junit.Assert.assertTrue
8+
import org.junit.Before
9+
import org.junit.Test
10+
11+
/**
12+
* Unit tests for DashboardManager.
13+
* Tests visibility toggling, callback invocation, and state updates.
14+
*/
15+
class DashboardManagerTest {
16+
17+
private lateinit var manager: DashboardManager
18+
private var callbackInvoked = false
19+
20+
@Before
21+
fun setUp() {
22+
manager = DashboardManager()
23+
callbackInvoked = false
24+
}
25+
26+
// ==================== Visibility Tests ====================
27+
28+
@Test
29+
fun `initial state is not visible`() {
30+
assertFalse(manager.state.value.isVisible)
31+
assertFalse(manager.state.value.isMonitoring)
32+
}
33+
34+
@Test
35+
fun `showDashboard sets visible and monitoring to true`() {
36+
// Act
37+
manager.showDashboard()
38+
39+
// Assert
40+
assertTrue(manager.state.value.isVisible)
41+
assertTrue(manager.state.value.isMonitoring)
42+
}
43+
44+
@Test
45+
fun `hideDashboard sets visible and monitoring to false`() {
46+
// Arrange
47+
manager.showDashboard()
48+
assertTrue(manager.state.value.isVisible)
49+
50+
// Act
51+
manager.hideDashboard()
52+
53+
// Assert
54+
assertFalse(manager.state.value.isVisible)
55+
assertFalse(manager.state.value.isMonitoring)
56+
}
57+
58+
@Test
59+
fun `toggleDashboard flips visibility`() {
60+
// Initial: not visible
61+
assertFalse(manager.state.value.isVisible)
62+
63+
// First toggle -> visible
64+
manager.toggleDashboard()
65+
assertTrue(manager.state.value.isVisible)
66+
67+
// Second toggle -> not visible
68+
manager.toggleDashboard()
69+
assertFalse(manager.state.value.isVisible)
70+
}
71+
72+
// ==================== Callback Tests ====================
73+
74+
@Test
75+
fun `showDashboard invokes callback`() {
76+
// Arrange
77+
manager.setOnDashboardOpenedCallback { callbackInvoked = true }
78+
79+
// Act
80+
manager.showDashboard()
81+
82+
// Assert
83+
assertTrue(callbackInvoked)
84+
}
85+
86+
@Test
87+
fun `toggleDashboard invokes callback when opening`() {
88+
// Arrange
89+
manager.setOnDashboardOpenedCallback { callbackInvoked = true }
90+
91+
// Act - toggle to open
92+
manager.toggleDashboard()
93+
94+
// Assert
95+
assertTrue(callbackInvoked)
96+
}
97+
98+
@Test
99+
fun `toggleDashboard does not invoke callback when closing`() {
100+
// Arrange
101+
manager.showDashboard()
102+
manager.setOnDashboardOpenedCallback { callbackInvoked = true }
103+
callbackInvoked = false // Reset after showDashboard
104+
105+
// Act - toggle to close
106+
manager.toggleDashboard()
107+
108+
// Assert
109+
assertFalse(callbackInvoked)
110+
}
111+
112+
// ==================== Data Update Tests ====================
113+
114+
@Test
115+
fun `updateDashboardHumans updates state`() {
116+
// Arrange
117+
val human = PerceptionData.HumanInfo().apply {
118+
trackId = 1
119+
recognizedName = "John"
120+
positionX = 1.5
121+
positionY = 0.5
122+
distanceMeters = 1.58
123+
lookingAtRobot = true
124+
gazeDurationMs = 2000L
125+
trackAgeMs = 5000L
126+
}
127+
val humans = listOf(human)
128+
val timestamp = "12:34:56"
129+
130+
// Act
131+
manager.updateDashboardHumans(humans, timestamp)
132+
133+
// Assert
134+
assertEquals(1, manager.state.value.humans.size)
135+
assertEquals("John", manager.state.value.humans[0].recognizedName)
136+
assertEquals(timestamp, manager.state.value.lastUpdate)
137+
}
138+
139+
@Test
140+
fun `resetDashboard clears all state`() {
141+
// Arrange
142+
manager.showDashboard()
143+
val human = PerceptionData.HumanInfo().apply { trackId = 1 }
144+
manager.updateDashboardHumans(listOf(human), "12:00:00")
145+
146+
// Act
147+
manager.resetDashboard()
148+
149+
// Assert
150+
val state = manager.state.value
151+
assertFalse(state.isVisible)
152+
assertFalse(state.isMonitoring)
153+
assertTrue(state.humans.isEmpty())
154+
assertEquals("", state.lastUpdate)
155+
}
156+
}

0 commit comments

Comments
 (0)