Skip to content

Commit 90c46c2

Browse files
committed
LIBMOBILE-1116
- added test cases in BugsnagDestinationTests - updated library versions in build.gradle - fixed issue in README.md
1 parent 6866c5a commit 90c46c2

File tree

3 files changed

+139
-17
lines changed

3 files changed

+139
-17
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Or the following for Kotlin DSL
1313
implementation("com.segment.analytics.kotlin.destinations:bugsnag:<latest_version>")
1414
```
1515

16-
Also add the BugSnag Gradle plugin dependency to your Project project level build.gradle.
16+
Also add the BugSnag Gradle plugin dependency to your project level build.gradle.
1717
```
1818
buildscript {
1919
dependencies {

lib/build.gradle.kts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ plugins {
99
val VERSION_NAME: String by project
1010

1111
android {
12-
compileSdk = 31
12+
compileSdk = 33
1313
buildToolsVersion = "31.0.0"
1414

1515
defaultConfig {
1616
multiDexEnabled = true
1717
minSdk = 21
18-
targetSdk = 31
18+
targetSdk = 33
1919

2020
testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
2121
consumerProguardFiles("proguard-consumer-rules.pro")
@@ -40,14 +40,14 @@ android {
4040
}
4141

4242
dependencies {
43-
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5")
43+
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.2")
4444

4545
implementation("com.segment.analytics.kotlin:android:1.6.2")
4646
implementation("androidx.multidex:multidex:2.0.1")
47-
implementation("androidx.core:core-ktx:1.7.0")
47+
implementation("androidx.core:core-ktx:1.9.0")
4848

49-
implementation("androidx.lifecycle:lifecycle-process:2.4.1")
50-
implementation("androidx.lifecycle:lifecycle-common-java8:2.4.1")
49+
implementation("androidx.lifecycle:lifecycle-process:2.5.1")
50+
implementation("androidx.lifecycle:lifecycle-common-java8:2.5.1")
5151
}
5252

5353
// Partner Dependencies
@@ -63,7 +63,7 @@ dependencies {
6363

6464
// Add Roboelectric dependencies.
6565
testImplementation("org.robolectric:robolectric:4.7.3")
66-
testImplementation("androidx.test:core:1.4.0")
66+
testImplementation("androidx.test:core:1.5.0")
6767

6868
// Add JUnit4 legacy dependencies.
6969
testRuntimeOnly("org.junit.vintage:junit-vintage-engine:5.8.2")
@@ -77,8 +77,8 @@ dependencies {
7777

7878
// Android Test Deps
7979
dependencies {
80-
androidTestImplementation("androidx.test.ext:junit:1.1.3")
81-
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
80+
androidTestImplementation("androidx.test.ext:junit:1.1.5")
81+
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
8282
}
8383

8484
tasks.withType<Test> {
Lines changed: 129 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,149 @@
11
package com.segment.analytics.kotlin.destinations.bugsnag
22

3-
import android.os.Bundle
4-
import io.mockk.every
5-
import io.mockk.mockk
3+
import android.app.Activity
4+
import android.app.Application
5+
import android.content.Context
6+
import android.content.Intent
7+
import com.bugsnag.android.Client
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 kotlinx.serialization.json.put
16+
import org.junit.Assert.assertEquals
617
import org.junit.Before
718
import org.junit.Test
19+
import org.junit.jupiter.api.Assertions
820
import org.junit.runner.RunWith
921
import org.robolectric.RobolectricTestRunner
1022
import org.robolectric.annotation.Config
1123

1224
@RunWith(RobolectricTestRunner::class)
1325
@Config(manifest = Config.NONE)
14-
1526
class BugsnagDestinationTests {
27+
28+
@MockK(relaxUnitFun = true)
29+
lateinit var mockApplication: Application
30+
@MockK(relaxUnitFun = true)
31+
lateinit var mockedClient: Client
32+
@MockK(relaxUnitFun = true)
33+
lateinit var mockedContext: Context
34+
@MockK(relaxUnitFun = true)
35+
lateinit var mockedAnalytics: Analytics
36+
lateinit var mockedBugsnagDestination: BugsnagDestination
37+
init {
38+
MockKAnnotations.init(this)
39+
}
40+
1641
@Before
1742
fun setUp() {
43+
mockedBugsnagDestination = BugsnagDestination()
44+
mockedBugsnagDestination.analytics = mockedAnalytics
45+
mockedBugsnagDestination.client = mockedClient
46+
every { mockedAnalytics.configuration.application } returns mockedContext
47+
every { mockApplication.applicationContext } returns mockedContext
48+
}
1849

50+
@Test
51+
fun `settings are updated correctly`() {
52+
// An Bugsnag example settings
53+
val sampleBugsnagSettings: Settings = LenientJson.decodeFromString(
54+
"""
55+
{
56+
"integrations": {
57+
"Bugsnag": {
58+
"apiKey": "APIKEY1234567890",
59+
"releaseStage": "",
60+
"useSSL": true
61+
}
62+
}
63+
}
64+
""".trimIndent()
65+
)
66+
val bugsnagSettings: Settings = sampleBugsnagSettings
67+
mockedBugsnagDestination.update(bugsnagSettings, Plugin.UpdateType.Initial)
68+
69+
/* assertions Bugsnag config */
70+
Assertions.assertNotNull(mockedBugsnagDestination.bugsnagSettings)
71+
with(mockedBugsnagDestination.bugsnagSettings!!) {
72+
assertEquals(apiKey, "APIKEY1234567890")
73+
assertEquals(releaseStage, "")
74+
assertEquals(useSSL, true)
75+
}
76+
}
77+
78+
@Test
79+
fun `activity created handled correctly`() {
80+
val activity: Activity = mockkClass(Activity::class)
81+
every { activity.localClassName } returns "MockActivity"
82+
val intent: Intent = mockkClass(Intent::class)
83+
every { activity.intent } returns intent
84+
mockedBugsnagDestination.onActivityCreated(activity, null)
85+
verify { mockedClient.context = "MockActivity" }
86+
}
87+
88+
@Test
89+
fun `identify is handled correctly`() {
90+
val sampleEvent = IdentifyEvent(
91+
userId = "User-Id-123",
92+
traits = buildJsonObject {
93+
put("email", "[email protected]")
94+
put("name", "First Last")
95+
}
96+
).apply { context = emptyJsonObject }
97+
mockedBugsnagDestination.identify(sampleEvent)
98+
verify { mockedClient.setUser("User-Id-123", "[email protected]", "First Last") }
99+
verify { mockedClient.addMetadata("User", "email", "[email protected]") }
100+
verify { mockedClient.addMetadata("User", "name", "First Last") }
101+
}
102+
103+
@Test
104+
fun `identify with traits is handled correctly`() {
105+
val sampleEvent = IdentifyEvent(
106+
userId = "User-Id-123",
107+
traits = buildJsonObject {
108+
put("email", "[email protected]")
109+
put("name", "First Last")
110+
put("key1", "Value 1")
111+
put("key2", "Value 2")
112+
}
113+
).apply { context = emptyJsonObject }
114+
mockedBugsnagDestination.identify(sampleEvent)
115+
verify { mockedClient.setUser("User-Id-123", "[email protected]", "First Last") }
116+
verify { mockedClient.addMetadata("User", "email", "[email protected]") }
117+
verify { mockedClient.addMetadata("User", "name", "First Last") }
118+
verify { mockedClient.addMetadata("User", "key1", "Value 1") }
119+
verify { mockedClient.addMetadata("User", "key2", "Value 2") }
120+
}
121+
122+
@Test
123+
fun `screen is handled correctly`() {
124+
val sampleEvent = ScreenEvent(
125+
name = "Screen 1",
126+
properties = buildJsonObject {
127+
},
128+
category = ""
129+
).apply {
130+
context = emptyJsonObject
131+
}
132+
mockedBugsnagDestination.screen(sampleEvent)
133+
verify { mockedClient.leaveBreadcrumb("Viewed Screen 1 Screen") }
19134
}
20135

21136
@Test
22-
fun `sample mock test`() {
23-
val bundle = mockk<Bundle>()
24-
every { bundle.get("key") }.returns("value")
137+
fun `track is handled correctly`() {
138+
val sampleEvent = TrackEvent(
139+
event = "Track 1",
140+
properties = buildJsonObject {
141+
}
142+
).apply {
143+
context = emptyJsonObject
144+
}
145+
mockedBugsnagDestination.track(sampleEvent)
146+
verify { mockedClient.leaveBreadcrumb("Track 1") }
25147
}
26148

27149
}

0 commit comments

Comments
 (0)