Skip to content

Commit 59fb0f1

Browse files
CopilotbedaHovorka
andcommitted
test: Add unit tests for SimulationProcessFactory
Add test coverage for factory pattern: - Test factory is injectable from Koin - Test createMainProcess returns Generator - Test createInOutWorker returns InOutWorker - Use KoinTestBase for DI testing Tests verify: ✓ Factory correctly wired in DI container ✓ Factory creates expected process types ✓ Factory integration with contexts works Co-authored-by: bedaHovorka <5263405+bedaHovorka@users.noreply.github.com>
1 parent 2126aeb commit 59fb0f1

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/* Brno University of Technology
2+
* Faculty of Information Technology
3+
*
4+
* BSc Thesis 2006/2007
5+
*
6+
* Railway Interlocking Simulator
7+
*
8+
* Bedrich Hovorka
9+
*/
10+
package cz.vutbr.fit.interlockSim.context
11+
12+
import assertk.assertThat
13+
import assertk.assertions.isInstanceOf
14+
import assertk.assertions.isNotNull
15+
import cz.vutbr.fit.interlockSim.objects.cells.InOut
16+
import cz.vutbr.fit.interlockSim.sim.DefaultSimulationProcessFactory
17+
import cz.vutbr.fit.interlockSim.sim.Generator
18+
import cz.vutbr.fit.interlockSim.sim.InOutWorker
19+
import cz.vutbr.fit.interlockSim.testutil.KoinTestBase
20+
import cz.vutbr.fit.interlockSim.testutil.createMockSimulationContext
21+
import org.junit.jupiter.api.DisplayName
22+
import org.junit.jupiter.api.Test
23+
import org.koin.test.inject
24+
25+
/**
26+
* Tests for SimulationProcessFactory pattern implementation.
27+
*
28+
* Verifies that:
29+
* - Factory creates correct process types
30+
* - Factory is injectable from Koin
31+
* - Contexts use factory for process creation
32+
*/
33+
@DisplayName("SimulationProcessFactory")
34+
class SimulationProcessFactoryTest : KoinTestBase() {
35+
private val processFactory: SimulationProcessFactory by inject()
36+
37+
@Test
38+
@DisplayName("factory is injectable from Koin")
39+
fun factoryIsInjectable() {
40+
// Assert
41+
assertThat(processFactory).isNotNull()
42+
assertThat(processFactory).isInstanceOf<DefaultSimulationProcessFactory>()
43+
}
44+
45+
@Test
46+
@DisplayName("createMainProcess returns Generator")
47+
fun createMainProcessReturnsGenerator() {
48+
// Arrange
49+
val mockContext = createMockSimulationContext()
50+
51+
// Act
52+
val mainProcess = processFactory.createMainProcess(mockContext)
53+
54+
// Assert
55+
assertThat(mainProcess).isNotNull()
56+
assertThat(mainProcess).isInstanceOf<Generator>()
57+
}
58+
59+
@Test
60+
@DisplayName("createInOutWorker returns InOutWorker")
61+
fun createInOutWorkerReturnsInOutWorker() {
62+
// Arrange
63+
val mockContext = createMockSimulationContext()
64+
val inOut =
65+
InOut(
66+
"TestInOut",
67+
false,
68+
cz.vutbr.fit.interlockSim.objects.cells.Cell.SpatialType.HORIZONTAL
69+
)
70+
71+
// Act
72+
val worker = processFactory.createInOutWorker(mockContext, inOut)
73+
74+
// Assert
75+
assertThat(worker).isNotNull()
76+
assertThat(worker).isInstanceOf<InOutWorker>()
77+
}
78+
}

0 commit comments

Comments
 (0)