Skip to content

Commit 6385c06

Browse files
authored
Merge pull request #3 from segment-integrations/unit_test_cases
LIBMOBILE-1157 - unit_test_cases to main
2 parents 8c10036 + c058df2 commit 6385c06

File tree

2 files changed

+131
-2
lines changed

2 files changed

+131
-2
lines changed

lib/src/main/java/com/segment/analytics/kotlin/destinations/quantcast/QuantcastDestination.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ class QuantcastDestination : DestinationPlugin(), AndroidLifecycle {
6868

6969
private fun quantcastLogEvent(event: String) {
7070
analytics.log("QuantcastClient.logEvent($event)")
71-
QuantcastClient.logEvent("Viewed $event Screen")
72-
71+
QuantcastClient.logEvent(event)
7372
}
7473
}
7574

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,145 @@
11
package com.segment.analytics.kotlin.destinations.quantcast
22

3+
import android.app.Activity
4+
import android.app.Application
5+
import android.content.Context
6+
import android.content.Intent
7+
import com.quantcast.measurement.service.QuantcastClient
8+
import com.segment.analytics.kotlin.core.*
9+
import com.segment.analytics.kotlin.core.platform.Plugin
10+
import com.segment.analytics.kotlin.core.utilities.LenientJson
11+
import io.mockk.*
12+
import io.mockk.impl.annotations.MockK
13+
import kotlinx.serialization.decodeFromString
14+
import kotlinx.serialization.json.buildJsonObject
15+
import org.junit.Assert.assertEquals
316
import org.junit.Before
17+
import org.junit.Test
18+
import org.junit.jupiter.api.Assertions
419
import org.junit.runner.RunWith
520
import org.robolectric.RobolectricTestRunner
621
import org.robolectric.annotation.Config
722

823
@RunWith(RobolectricTestRunner::class)
924
@Config(manifest = Config.NONE)
1025
class QuantcastDestinationTests {
26+
@MockK
27+
lateinit var mockApplication: Application
28+
29+
@MockK
30+
lateinit var mockedContext: Context
31+
32+
@MockK(relaxUnitFun = true)
33+
lateinit var mockedAnalytics: Analytics
34+
35+
lateinit var mockedQuantcastDestination: QuantcastDestination
36+
37+
private val sampleQuantcastSettings: Settings = LenientJson.decodeFromString(
38+
"""
39+
{
40+
"integrations": {
41+
"Quantcast": {
42+
"apiKey": "APIKEY1234567890",
43+
"advertiseProducts": false,
44+
"advertise": false,
45+
"pCode": ""
46+
}
47+
}
48+
}
49+
""".trimIndent()
50+
)
51+
52+
init {
53+
MockKAnnotations.init(this)
54+
}
55+
1156
@Before
1257
fun setUp() {
58+
mockkStatic(QuantcastClient::class)
59+
mockedQuantcastDestination = QuantcastDestination()
60+
every { mockedAnalytics.configuration.application } returns mockApplication
61+
every { mockApplication.applicationContext } returns mockedContext
62+
mockedAnalytics.configuration.application = mockedContext
63+
mockedQuantcastDestination.analytics = mockedAnalytics
64+
}
65+
66+
@Test
67+
fun `settings are updated correctly`() {
68+
// An Quantcast example settings
69+
val quantcastSettings: Settings = sampleQuantcastSettings
70+
mockedQuantcastDestination.update(quantcastSettings, Plugin.UpdateType.Initial)
71+
72+
/* assertions Quantcast config */
73+
Assertions.assertNotNull(mockedQuantcastDestination.quantcastSettings)
74+
with(mockedQuantcastDestination.quantcastSettings!!) {
75+
assertEquals(apiKey, "APIKEY1234567890")
76+
assertEquals(advertiseProducts, false)
77+
assertEquals(advertise, false)
78+
assertEquals(pCode, "")
79+
}
80+
verify { QuantcastClient.enableLogging(true) }
81+
}
82+
83+
@Test
84+
fun `activity started handled correctly`() {
85+
val quantcastSettings: Settings = sampleQuantcastSettings
86+
mockedQuantcastDestination.update(quantcastSettings, Plugin.UpdateType.Initial)
87+
val activity: Activity = mockkClass(Activity::class)
88+
val intent: Intent = mockkClass(Intent::class)
89+
every { activity.intent } returns intent
90+
every { activity.applicationContext } returns mockedContext
91+
every { mockedContext.checkCallingOrSelfPermission("android.permission.WAKE_LOCK") } returns -1
92+
93+
mockedQuantcastDestination.onActivityStarted(activity)
94+
verify {
95+
QuantcastClient.activityStart(activity, "APIKEY1234567890", null, null)
96+
}
97+
}
98+
99+
@Test
100+
fun `activity stopped handled correctly`() {
101+
val activity: Activity = mockkClass(Activity::class)
102+
val intent: Intent = mockkClass(Intent::class)
103+
every { activity.intent } returns intent
104+
mockedQuantcastDestination.onActivityStopped(activity)
105+
verify { QuantcastClient.activityStop() }
106+
}
107+
108+
@Test
109+
fun `identify handled correctly`() {
110+
val sampleEvent = IdentifyEvent(
111+
userId = "User-Id-123",
112+
traits = buildJsonObject {
113+
}
114+
).apply { context = emptyJsonObject }
115+
mockedQuantcastDestination.identify(sampleEvent)
116+
verify { QuantcastClient.recordUserIdentifier("User-Id-123") }
117+
}
118+
119+
@Test
120+
fun `screen handled correctly`() {
121+
val sampleEvent = ScreenEvent(
122+
name = "Screen 1",
123+
category = "Category 1",
124+
properties = emptyJsonObject
125+
).apply {
126+
context = emptyJsonObject
127+
}
128+
mockedQuantcastDestination.screen(sampleEvent)
129+
verify { QuantcastClient.logEvent("Viewed Screen 1 Screen") }
130+
}
131+
13132

133+
@Test
134+
fun `track handled correctly`() {
135+
val sampleEvent = TrackEvent(
136+
event = "Track 1",
137+
properties = buildJsonObject {
138+
}
139+
).apply {
140+
context = emptyJsonObject
141+
}
142+
mockedQuantcastDestination.track(sampleEvent)
143+
verify { QuantcastClient.logEvent("Track 1") }
14144
}
15145
}

0 commit comments

Comments
 (0)