@@ -4,14 +4,15 @@ import com.onesignal.common.services.ServiceBuilder
44import com.onesignal.common.services.ServiceProvider
55import com.onesignal.debug.LogLevel
66import com.onesignal.debug.internal.logging.Logging
7+ import com.onesignal.mocks.IOMockHelper
78import io.kotest.assertions.throwables.shouldThrowUnit
89import io.kotest.core.spec.style.FunSpec
910import io.kotest.matchers.shouldBe
10- import io.mockk.coVerifyOrder
1111import io.mockk.every
1212import io.mockk.mockk
1313import io.mockk.spyk
1414import io.mockk.verify
15+ import kotlinx.coroutines.CompletableDeferred
1516
1617class StartupServiceTests : FunSpec ({
1718 fun setupServiceProvider(
@@ -26,6 +27,8 @@ class StartupServiceTests : FunSpec({
2627 return serviceBuilder.build()
2728 }
2829
30+ listener(IOMockHelper )
31+
2932 beforeAny {
3033 Logging .logLevel = LogLevel .NONE
3134 }
@@ -97,21 +100,22 @@ class StartupServiceTests : FunSpec({
97100 // Given
98101 val mockStartableService1 = spyk<IStartableService >()
99102 val mockStartableService2 = spyk<IStartableService >()
100- val mockStartableService3 = spyk< IStartableService >( )
103+ val startupService = StartupService (setupServiceProvider(listOf(), listOf(mockStartableService1)) )
101104
102- val startupService = StartupService (setupServiceProvider(listOf(), listOf(mockStartableService1, mockStartableService2)))
105+ // Block the scheduled services until we're ready
106+ val blockTrigger = CompletableDeferred <Unit >()
107+ every { mockStartableService1.start() } coAnswers {
108+ blockTrigger.await() // Block until released
109+ }
103110
104111 // When
105112 startupService.scheduleStart()
106- mockStartableService3 .start()
113+ mockStartableService2 .start()
107114
108115 // Then
109- Thread .sleep(10)
110- coVerifyOrder {
111- // service3 will call start() first even though service1 and service2 are scheduled first
112- mockStartableService3.start()
113- mockStartableService1.start()
114- mockStartableService2.start()
115- }
116+ // service2 does not block even though service1 is blocked
117+ verify(exactly = 1) { mockStartableService2.start() }
118+ blockTrigger.complete(Unit )
119+ verify { mockStartableService1.start() }
116120 }
117121})
0 commit comments