Skip to content

Commit 9e874d5

Browse files
authored
Merge pull request #2 from RawatRaveena/testing/unit-cases
testing/unit-cases to main
2 parents 793cc42 + d4ce9a5 commit 9e874d5

File tree

2 files changed

+239
-1
lines changed

2 files changed

+239
-1
lines changed

lib/src/main/java/com/segment/analytics/kotlin/destinations/adjust/AdjustDestination.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class AdjustDestination(
2727
private var adjustInstance: AdjustInstance = Adjust.getDefaultInstance()
2828
) : DestinationPlugin(), AndroidLifecycle {
2929

30-
private var settings: AdjustSettings? = null
30+
internal var settings: AdjustSettings? = null
3131

3232
private val REVENUE_KEY = "revenue"
3333
private val CURRENCY_KEY = "currency"
Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,242 @@
11
package com.segment.analytics.kotlin.destinations.adjust
22

3+
import android.app.Activity
4+
import android.app.Application
5+
import android.content.Context
6+
import android.os.Build
7+
import com.adjust.sdk.Adjust
8+
import com.adjust.sdk.AdjustAttribution
9+
import com.adjust.sdk.AdjustInstance
10+
import com.segment.analytics.kotlin.core.*
11+
import com.segment.analytics.kotlin.core.platform.Plugin
12+
import com.segment.analytics.kotlin.core.utilities.LenientJson
13+
import com.segment.analytics.kotlin.core.utilities.getString
14+
import io.mockk.*
15+
import io.mockk.impl.annotations.MockK
16+
import kotlinx.serialization.decodeFromString
17+
import kotlinx.serialization.json.buildJsonObject
18+
import kotlinx.serialization.json.put
19+
import org.junit.Before
20+
import org.junit.Test
21+
import org.junit.jupiter.api.Assertions.*
22+
import org.junit.runner.RunWith
23+
import org.robolectric.RobolectricTestRunner
24+
import org.robolectric.annotation.Config
25+
26+
@RunWith(RobolectricTestRunner::class)
27+
@Config(sdk = [Build.VERSION_CODES.O_MR1])
328
class AdjustDestinationTests {
29+
@MockK
30+
lateinit var mockApplication: Application
31+
32+
@MockK
33+
lateinit var mockedContext: Context
34+
35+
@MockK(relaxUnitFun = true)
36+
lateinit var mockedAnalytics: Analytics
37+
38+
@MockK(relaxUnitFun = true)
39+
lateinit var mockedAdjustInstance: AdjustInstance
40+
41+
private lateinit var adjustDestination: AdjustDestination
42+
43+
private val sampleAdjustSettings: Settings = LenientJson.decodeFromString(
44+
"""
45+
{
46+
"integrations": {
47+
"Adjust": {
48+
"appToken": "xyz1234",
49+
"setEnvironmentProduction": true,
50+
"setEventBufferingEnabled": true,
51+
"trackAttributionData": true,
52+
"customEvents": {
53+
"foo": "bar"
54+
}
55+
}
56+
}
57+
}
58+
""".trimIndent()
59+
)
60+
61+
init {
62+
MockKAnnotations.init(this)
63+
}
64+
65+
@Before
66+
fun setUp() {
67+
mockkStatic(Adjust::class)
68+
every { Adjust.getDefaultInstance() } answers { mockedAdjustInstance }
69+
adjustDestination = AdjustDestination()
70+
every { mockedAnalytics.configuration.application } returns mockApplication
71+
every { mockApplication.applicationContext } returns mockedContext
72+
mockedAnalytics.configuration.application = mockedContext
73+
74+
adjustDestination.analytics = mockedAnalytics
75+
76+
mockkStatic(Adjust::class)
77+
}
78+
79+
80+
@Test
81+
fun `settings are updated correctly`() {
82+
// An adjust example settings
83+
val adjustSettings: Settings = sampleAdjustSettings
84+
85+
adjustDestination.update(adjustSettings, Plugin.UpdateType.Initial)
86+
87+
/* assertions Adjust config */
88+
assertNotNull(adjustDestination.settings)
89+
with(adjustDestination.settings!!) {
90+
assertTrue(adjustDestination.settings!!.setEnvironmentProduction)
91+
assertTrue(adjustDestination.settings!!.setEventBufferingEnabled)
92+
assertTrue(adjustDestination.settings!!.trackAttributionData)
93+
assertEquals(adjustDestination.settings!!.appToken, "xyz1234")
94+
assertNotNull(adjustDestination.settings!!.customEvents)
95+
}
96+
}
97+
98+
@Test
99+
fun `identify is handled correctly`() {
100+
val sampleIdentifyEvent = IdentifyEvent(
101+
userId = "adjust-UserID-123",
102+
traits = buildJsonObject {
103+
put("email", "adjustUserID@abc.com")
104+
put("firstName", "adjust")
105+
put("lastName", "user")
106+
}
107+
).apply {
108+
messageId = "abc-message-1234"
109+
anonymousId = "adjust-anonId-123"
110+
integrations = emptyJsonObject
111+
context = emptyJsonObject
112+
timestamp = "2022-11-22T11:16:09"
113+
}
114+
115+
val identifyEvent = adjustDestination.identify(sampleIdentifyEvent)
116+
assertNotNull(identifyEvent)
117+
118+
with(identifyEvent as IdentifyEvent) {
119+
assertEquals("adjust-UserID-123", userId)
120+
with(traits) {
121+
assertEquals("adjust", getString("firstName"))
122+
assertEquals("user", getString("lastName"))
123+
assertEquals("adjustUserID@abc.com", getString("email"))
124+
}
125+
}
126+
}
127+
128+
@Test
129+
fun `identify is handled correctly with userId`() {
130+
val sampleIdentifyEvent = IdentifyEvent(
131+
userId = "adjust-UserID-123",
132+
traits = buildJsonObject {
133+
put("email", "adjustUserID@abc.com")
134+
put("firstName", "adjust")
135+
put("lastName", "user")
136+
}
137+
).apply {
138+
messageId = "abc-message-1234"
139+
anonymousId = "adjust-anonId-123"
140+
integrations = emptyJsonObject
141+
context = emptyJsonObject
142+
timestamp = "2022-11-22T11:16:09"
143+
}
144+
val identifyEvent = adjustDestination.identify(sampleIdentifyEvent)
145+
assertNotNull(identifyEvent)
146+
verify { mockedAdjustInstance.addSessionPartnerParameter("userId", "adjust-UserID-123") }
147+
}
148+
149+
@Test
150+
fun `identify is handled correctly with anonymousId`() {
151+
val sampleIdentifyEvent = IdentifyEvent(
152+
userId = "adjust-UserID-123",
153+
traits = buildJsonObject {
154+
put("email", "adjustUserID@abc.com")
155+
put("firstName", "adjust")
156+
put("lastName", "user")
157+
}
158+
).apply {
159+
messageId = "abc-message-1234"
160+
anonymousId = "adjust-anonId-123"
161+
integrations = emptyJsonObject
162+
context = emptyJsonObject
163+
timestamp = "2022-11-22T11:16:09"
164+
}
165+
166+
val identifyEvent = adjustDestination.identify(sampleIdentifyEvent)
167+
assertNotNull(identifyEvent)
168+
verify {
169+
mockedAdjustInstance.addSessionPartnerParameter(
170+
"anonymousId",
171+
"adjust-anonId-123"
172+
)
173+
}
174+
}
175+
176+
@Test
177+
fun `reset is handled correctly`() {
178+
adjustDestination.reset()
179+
verify { mockedAdjustInstance.resetSessionPartnerParameters() }
180+
}
181+
182+
@Test
183+
fun `track is handled correctly`() {
184+
adjustDestination.update(sampleAdjustSettings, Plugin.UpdateType.Initial)
185+
186+
val sampleTrackEvent = TrackEvent(
187+
event = "foo",
188+
properties = buildJsonObject {
189+
put("revenue", 200.0f)
190+
put("currency", "USD")
191+
}
192+
).apply {
193+
messageId = "abc-message-1234"
194+
anonymousId = "adjust-anonId-123"
195+
integrations = emptyJsonObject
196+
context = emptyJsonObject
197+
timestamp = "2022-11-22T11:16:09"
198+
}
199+
val trackEvent = adjustDestination.track(sampleTrackEvent)
200+
assertNotNull(trackEvent)
201+
// verify { mockedAdjustInstance.trackEvent(AdjustEvent("foo")) }
202+
}
203+
204+
@Test
205+
fun `trackAttribution data sent correctly to analytics`() {
206+
val segmentAttributionChangedListener = AdjustDestination.AdjustSegmentAttributionChangedListener(mockedAnalytics)
207+
val attributionData = AdjustAttribution().apply {
208+
network = "Adjust Network"
209+
campaign = "Adjust Campaign Name"
210+
clickLabel = "Adjust Click Label"
211+
creative = "Adjust creative"
212+
adgroup = "Adjust Ad group"
213+
trackerToken = "foo"
214+
trackerName = "bar"
215+
}
216+
segmentAttributionChangedListener.onAttributionChanged(attributionData)
217+
verify { mockedAnalytics.track("Install Attributed", buildJsonObject {
218+
put("provider", "Adjust")
219+
put("trackerToken", "foo")
220+
put("trackerName", "bar")
221+
put("campaign", buildJsonObject {
222+
put("source", "Adjust Network")
223+
put("name", "Adjust Campaign Name")
224+
put("content", "Adjust Click Label")
225+
put("adCreative", "Adjust creative")
226+
put("adGroup", "Adjust Ad group")
227+
})
228+
}) }
229+
}
230+
231+
@Test
232+
fun `onActivityResumed() handled correctly`() {
233+
adjustDestination.onActivityResumed(mockkClass(Activity::class))
234+
verify { mockedAdjustInstance.onResume() }
235+
}
236+
237+
@Test
238+
fun `onActivityPaused() handled correctly`() {
239+
adjustDestination.onActivityPaused(mockkClass(Activity::class))
240+
verify { mockedAdjustInstance.onPause() }
241+
}
4242
}

0 commit comments

Comments
 (0)