Skip to content

Commit 728e7b1

Browse files
authored
fix: beforeSend overriding default release even if it was not set (#376)
* Update * Update SentryBridgeTest.apple.kt * Update CHANGELOG * Update * Update * Podspec * Fix syncing between kmp event and native event * Revert open * Formatting * Remove print * Update CHANGELOG * Update * Update * Update * Update * Update * Update * Update * Update CHANGELOG.md * Update dist impl as well * Update CHANGELOG * Remove old dist * Formatting
1 parent 0e9c2c5 commit 728e7b1

File tree

4 files changed

+103
-4
lines changed

4 files changed

+103
-4
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66

77
- Add `sendDefaultPii` option ([#377](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/377))
88

9+
### Fixes
10+
11+
- `beforeSend` overriding default release and dist even if it was not set explicitly ([#376](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/376))
12+
913
### Dependencies
1014

1115
- Bump Java SDK from v8.8.0 to v8.14.0 ([#375](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/375), [#382](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/382), [#387](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/387), [#402](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/402))

sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryEventExtensions.apple.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,23 @@ import io.sentry.kotlin.multiplatform.CocoaSentryEvent
55
import io.sentry.kotlin.multiplatform.SentryEvent
66

77
internal fun CocoaSentryEvent.applyKmpEvent(kmpEvent: SentryEvent): CocoaSentryEvent {
8+
// Native SDKs may have a default behaviour if no release/dist is set.
9+
// Setting a release/dist (even if it's null) will remove this behaviour,
10+
// so we have to check if the values differ first before setting.
11+
if (releaseName != kmpEvent.release) {
12+
releaseName = kmpEvent.release
13+
}
14+
if (dist != kmpEvent.dist) {
15+
dist = kmpEvent.dist
16+
}
817
kmpEvent.level?.let { level = it.toCocoaSentryLevel() }
918
kmpEvent.platform?.let { platform = it }
1019
message = kmpEvent.message?.toCocoaMessage()
1120
logger = kmpEvent.logger
1221
fingerprint = kmpEvent.fingerprint
13-
releaseName = kmpEvent.release
1422
environment = kmpEvent.environment
1523
user = kmpEvent.user?.toCocoaUser()
1624
serverName = kmpEvent.serverName
17-
dist = kmpEvent.dist
1825
breadcrumbs = kmpEvent.breadcrumbs.map { it.toCocoaBreadcrumb() }.toMutableList()
1926
tags = kmpEvent.tags.toMutableMap()
2027
eventId = SentryId(kmpEvent.eventId.toString())
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package io.sentry.kotlin.multiplatform
2+
3+
import io.sentry.kotlin.multiplatform.extensions.applyKmpEvent
4+
import kotlin.test.Test
5+
import kotlin.test.assertEquals
6+
7+
class ApplyKmpEventTest {
8+
@Test
9+
fun `native release is not set if kmp release has same value`() {
10+
val nativeEvent = FakeSentryEvent().apply {
11+
releaseName = "1.0.0"
12+
}
13+
val kmpEvent = SentryEvent().apply {
14+
release = "1.0.0"
15+
}
16+
17+
nativeEvent.applyKmpEvent(kmpEvent)
18+
19+
assertEquals(1, nativeEvent.releaseSetCount)
20+
}
21+
22+
@Test
23+
fun `native dist is not set if kmp dist has same value`() {
24+
val nativeEvent = FakeSentryEvent().apply {
25+
dist = "randomDist"
26+
}
27+
val kmpEvent = SentryEvent().apply {
28+
dist = "randomDist"
29+
}
30+
31+
nativeEvent.applyKmpEvent(kmpEvent)
32+
33+
assertEquals(1, nativeEvent.distSetCount)
34+
}
35+
36+
@Test
37+
fun `native release is set if kmp release has different value`() {
38+
val nativeEvent = FakeSentryEvent().apply {
39+
releaseName = "1.0.0"
40+
}
41+
val kmpEvent = SentryEvent().apply {
42+
release = "7.0.0"
43+
}
44+
45+
nativeEvent.applyKmpEvent(kmpEvent)
46+
47+
assertEquals(2, nativeEvent.releaseSetCount)
48+
}
49+
50+
@Test
51+
fun `native dist is set if kmp dist has different value`() {
52+
val nativeEvent = FakeSentryEvent().apply {
53+
dist = "randomDist"
54+
}
55+
val kmpEvent = SentryEvent().apply {
56+
dist = "differentDist"
57+
}
58+
59+
nativeEvent.applyKmpEvent(kmpEvent)
60+
61+
assertEquals(2, nativeEvent.distSetCount)
62+
}
63+
}
64+
65+
// init with a SentryLevel as a workaround for:
66+
// Unable to call non-designated initializer as super constructor
67+
private class FakeSentryEvent : CocoaSentryEvent(Internal.Sentry.kSentryLevelFatal) {
68+
var releaseSetCount = 0
69+
var distSetCount = 0
70+
71+
override fun setReleaseName(releaseName: String?) {
72+
super.setReleaseName(releaseName)
73+
releaseSetCount += 1
74+
}
75+
76+
override fun setDist(dist: String?) {
77+
super.setDist(dist)
78+
distSetCount += 1
79+
}
80+
}

sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryEventExtensions.jvm.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,25 @@ import io.sentry.kotlin.multiplatform.JvmSentryEvent
44
import io.sentry.kotlin.multiplatform.JvmSentryId
55
import io.sentry.kotlin.multiplatform.SentryEvent
66

7+
// TODO(buenaflor): properly test this once we introduce a mocking framework
78
internal fun JvmSentryEvent.applyKmpEvent(kmpEvent: SentryEvent): JvmSentryEvent {
9+
// Native SDKs may have a default behaviour if no release/dist is set.
10+
// Setting a release/dist (even if it's null) will remove this behaviour,
11+
// so we have to check if the values differ first before setting.
12+
if (release != kmpEvent.release) {
13+
release = kmpEvent.release
14+
}
15+
if (dist != kmpEvent.dist) {
16+
dist = kmpEvent.dist
17+
}
818
level = kmpEvent.level?.toJvmSentryLevel()
919
message = kmpEvent.message?.toJvmMessage()
1020
logger = kmpEvent.logger
1121
fingerprints = kmpEvent.fingerprint
12-
release = kmpEvent.release
1322
environment = kmpEvent.environment
1423
platform = kmpEvent.platform
1524
user = kmpEvent.user?.toJvmUser()
1625
serverName = kmpEvent.serverName
17-
dist = kmpEvent.dist
1826
breadcrumbs = kmpEvent.breadcrumbs?.map { it.toJvmBreadcrumb() }
1927
eventId = JvmSentryId(kmpEvent.eventId.toString())
2028
tags = kmpEvent.tags

0 commit comments

Comments
 (0)