@@ -3,6 +3,8 @@ package com.onesignal.core.internal.application
33import android.app.Activity
44import android.content.Context
55import androidx.test.core.app.ApplicationProvider
6+ import com.onesignal.common.threading.WaiterWithValue
7+ import com.onesignal.common.threading.suspendifyOnThread
68import com.onesignal.core.internal.application.impl.ApplicationService
79import com.onesignal.debug.LogLevel
810import com.onesignal.debug.internal.logging.Logging
@@ -12,6 +14,7 @@ import io.kotest.matchers.shouldBe
1214import io.kotest.runner.junit4.KotestTestRunner
1315import io.mockk.spyk
1416import io.mockk.verify
17+ import kotlinx.coroutines.delay
1518import org.junit.runner.RunWith
1619import org.robolectric.Robolectric
1720
@@ -189,6 +192,58 @@ class ApplicationServiceTests : FunSpec({
189192 response shouldBe false
190193 }
191194
195+ test("wait until system condition returns false if activity not started within 5 seconds") {
196+ // Given
197+ val activity : Activity
198+ Robolectric .buildActivity(Activity ::class.java).use { controller ->
199+ controller.setup() // Moves Activity to RESUMED state
200+ activity = controller.get()
201+ }
202+ val applicationService = ApplicationService ()
203+
204+ val waiter = WaiterWithValue <Boolean >()
205+
206+ // When
207+ suspendifyOnThread {
208+ val response = applicationService.waitUntilSystemConditionsAvailable()
209+ waiter.wake(response)
210+ }
211+
212+ delay(7000)
213+
214+ applicationService.onActivityStarted(activity)
215+ val response = waiter.waitForWake()
216+
217+ // Then
218+ response shouldBe false
219+ }
220+
221+ test("wait until system condition returns true when an activity is started within 5 seconds") {
222+ // Given
223+ val activity : Activity
224+ Robolectric .buildActivity(Activity ::class.java).use { controller ->
225+ controller.setup() // Moves Activity to RESUMED state
226+ activity = controller.get()
227+ }
228+ val applicationService = ApplicationService ()
229+
230+ val waiter = WaiterWithValue <Boolean >()
231+
232+ // When
233+ suspendifyOnThread {
234+ val response = applicationService.waitUntilSystemConditionsAvailable()
235+ waiter.wake(response)
236+ }
237+
238+ delay(3000)
239+
240+ applicationService.onActivityStarted(activity)
241+ val response = waiter.waitForWake()
242+
243+ // Then
244+ response shouldBe true
245+ }
246+
192247 test("wait until system condition returns true when there is no system condition") {
193248 // Given
194249 val activity : Activity
0 commit comments