11package 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
316import org.junit.Before
17+ import org.junit.Test
18+ import org.junit.jupiter.api.Assertions
419import org.junit.runner.RunWith
520import org.robolectric.RobolectricTestRunner
621import org.robolectric.annotation.Config
722
823@RunWith(RobolectricTestRunner ::class )
924@Config(manifest = Config .NONE )
1025class 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