Skip to content

Commit 571f7ec

Browse files
committed
added NotificationLifecycleServiceTests
1 parent bc876fc commit 571f7ec

File tree

2 files changed

+99
-3
lines changed

2 files changed

+99
-3
lines changed

OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/lifecycle/impl/NotificationLifecycleService.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@ import org.json.JSONException
3737
import org.json.JSONObject
3838

3939
internal class NotificationLifecycleService(
40-
applicationService: IApplicationService,
41-
private val _time: ITime,
4240
private val _applicationService: IApplicationService,
41+
private val _time: ITime,
4342
private val _configModelStore: ConfigModelStore,
4443
private val _influenceManager: IInfluenceManager,
4544
private val _subscriptionManager: ISubscriptionManager,
@@ -83,7 +82,7 @@ internal class NotificationLifecycleService(
8382
override fun removeExternalClickListener(listener: INotificationClickListener) = extOpenedCallback.unsubscribe(listener)
8483

8584
init {
86-
setupNotificationServiceExtension(applicationService.appContext)
85+
setupNotificationServiceExtension(_applicationService.appContext)
8786
}
8887

8988
override suspend fun canReceiveNotification(jsonPayload: JSONObject): Boolean {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.onesignal.notifications.internal.lifecycle
2+
3+
import android.app.Activity
4+
import android.content.Context
5+
import androidx.test.core.app.ApplicationProvider
6+
import br.com.colman.kotest.android.extensions.robolectric.RobolectricTest
7+
import com.onesignal.core.internal.application.impl.ApplicationService
8+
import com.onesignal.core.internal.device.IDeviceService
9+
import com.onesignal.debug.LogLevel
10+
import com.onesignal.debug.internal.logging.Logging
11+
import com.onesignal.mocks.MockHelper
12+
import com.onesignal.notifications.internal.analytics.IAnalyticsTracker
13+
import com.onesignal.notifications.internal.backend.INotificationBackendService
14+
import com.onesignal.notifications.internal.lifecycle.impl.NotificationLifecycleService
15+
import com.onesignal.notifications.internal.receivereceipt.IReceiveReceiptWorkManager
16+
import com.onesignal.notifications.shadows.ShadowRoboNotificationManager
17+
import com.onesignal.session.internal.influence.IInfluenceManager
18+
import com.onesignal.user.internal.subscriptions.ISubscriptionManager
19+
import com.onesignal.user.subscriptions.IPushSubscription
20+
import io.kotest.core.spec.style.FunSpec
21+
import io.mockk.coEvery
22+
import io.mockk.coVerify
23+
import io.mockk.every
24+
import io.mockk.mockk
25+
import io.mockk.spyk
26+
import org.json.JSONArray
27+
import org.json.JSONObject
28+
import org.robolectric.Robolectric
29+
30+
@RobolectricTest
31+
class NotificationLifecycleServiceTests : FunSpec({
32+
beforeAny {
33+
Logging.logLevel = LogLevel.NONE
34+
ShadowRoboNotificationManager.reset()
35+
}
36+
37+
test("Fires openDestinationActivity") {
38+
// Given
39+
val context = ApplicationProvider.getApplicationContext<Context>()
40+
val applicationService = ApplicationService()
41+
applicationService.start(context)
42+
43+
val mockSubscriptionManager = mockk<ISubscriptionManager>()
44+
every { mockSubscriptionManager.subscriptions.push } returns
45+
mockk<IPushSubscription>().apply { every { id } returns "UUID1" }
46+
47+
val notificationLifecycleService =
48+
spyk(
49+
NotificationLifecycleService(
50+
applicationService,
51+
MockHelper.time(0),
52+
MockHelper.configModelStore(),
53+
mockk<IInfluenceManager>().apply {
54+
every { onDirectInfluenceFromNotification(any()) } returns Unit
55+
},
56+
mockSubscriptionManager,
57+
mockk<IDeviceService>().apply {
58+
every { deviceType } returns IDeviceService.DeviceType.Android
59+
},
60+
mockk<INotificationBackendService>().apply {
61+
coEvery { updateNotificationAsOpened(any(), any(), any(), any()) } returns Unit
62+
},
63+
mockk<IReceiveReceiptWorkManager>(),
64+
mockk<IAnalyticsTracker>().apply {
65+
every { trackOpenedEvent(any(), any()) } returns Unit
66+
},
67+
),
68+
)
69+
val activity: Activity
70+
Robolectric.buildActivity(Activity::class.java).use { controller ->
71+
controller.setup() // Moves Activity to RESUMED state
72+
activity = controller.get()
73+
}
74+
75+
// When
76+
val payload =
77+
JSONArray()
78+
.put(
79+
JSONObject()
80+
.put("alert", "test message")
81+
.put(
82+
"custom",
83+
JSONObject()
84+
.put("i", "UUID1"),
85+
),
86+
)
87+
notificationLifecycleService.notificationOpened(activity, payload)
88+
89+
// Then
90+
coVerify(exactly = 1) {
91+
notificationLifecycleService.openDestinationActivity(
92+
withArg { Any() },
93+
withArg { Any() },
94+
)
95+
}
96+
}
97+
})

0 commit comments

Comments
 (0)