Skip to content

Commit dbf89e5

Browse files
test(android): Give nav3 transaction mocks a span context
Scope.setTransaction now passes transaction.getSpanContext().withDefaultStatus() to scope observers (#6418 on 9.x.x). The nav3 tests from main (#6398) bind bare ITransaction mocks whose getSpanContext() returns null, so they hit an NPE. Co-Authored-By: Roman Zavarnitsyn <roman.zavarnitsyn@sentry.io>
1 parent 451a51c commit dbf89e5

3 files changed

Lines changed: 23 additions & 12 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.sentry.compose.navigation3.lifecycle
2+
3+
import io.sentry.ITransaction
4+
import io.sentry.SpanContext
5+
import org.mockito.kotlin.mock
6+
import org.mockito.kotlin.whenever
7+
8+
/**
9+
* Returns a transaction mock with a span context, which `Scope.setTransaction` passes to scope
10+
* observers.
11+
*/
12+
internal fun mockTransaction(): ITransaction =
13+
mock<ITransaction>().also { whenever(it.spanContext).thenReturn(SpanContext("navigation")) }

‎sentry-android-navigation3/src/test/kotlin/io/sentry/compose/navigation3/lifecycle/NavScopesTest.kt‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ class NavScopesTest {
254254
val navScopes = fixture.navScopes()
255255
navScopes.attach(fixture.lifecycle(Lifecycle.State.RESUMED))
256256
navScopes.applyFirstBackStackUpdate()
257-
fixture.scope.transaction = mock<ITransaction>()
257+
fixture.scope.transaction = mockTransaction()
258258

259259
navScopes.startNavTransaction("/Home")
260260

@@ -337,7 +337,7 @@ class NavScopesTest {
337337
val navScopes = fixture.navScopes()
338338
navScopes.attach(fixture.lifecycle(Lifecycle.State.RESUMED))
339339
navScopes.applyFirstBackStackUpdate()
340-
val hostTransaction = mock<ITransaction>()
340+
val hostTransaction = mockTransaction()
341341
fixture.scope.transaction = hostTransaction
342342

343343
navScopes.finishNavTransaction()
@@ -520,7 +520,7 @@ class NavScopesTest {
520520
val fixture = Fixture.create()
521521
val covered = fixture.coveredNavScopes()
522522
covered.startNavTransaction("/Result")
523-
val hostTransaction = mock<ITransaction>()
523+
val hostTransaction = mockTransaction()
524524
fixture.scope.transaction = hostTransaction
525525

526526
fixture.incoming.dispose()
@@ -534,7 +534,7 @@ class NavScopesTest {
534534
val fixture = Fixture.create()
535535
val covered = fixture.coveredNavScopes()
536536
covered.startNavTransaction("/Result")
537-
fixture.scope.transaction = mock<ITransaction>()
537+
fixture.scope.transaction = mockTransaction()
538538

539539
fixture.incoming.dispose()
540540

@@ -546,8 +546,7 @@ class NavScopesTest {
546546
val fixture = Fixture.create()
547547
val covered = fixture.coveredNavScopes()
548548
covered.startNavTransaction("/Result")
549-
fixture.scope.transaction =
550-
mock<ITransaction>().also { whenever(it.isFinished).thenReturn(true) }
549+
fixture.scope.transaction = mockTransaction().also { whenever(it.isFinished).thenReturn(true) }
551550

552551
fixture.incoming.dispose()
553552

@@ -558,8 +557,7 @@ class NavScopesTest {
558557
fun `a deferred transaction requested while a finished transaction is bound starts in its place`() {
559558
val fixture = Fixture.create()
560559
val covered = fixture.coveredNavScopes()
561-
fixture.scope.transaction =
562-
mock<ITransaction>().also { whenever(it.isFinished).thenReturn(true) }
560+
fixture.scope.transaction = mockTransaction().also { whenever(it.isFinished).thenReturn(true) }
563561
covered.startNavTransaction("/Result")
564562

565563
fixture.incoming.dispose()
@@ -707,7 +705,7 @@ class NavScopesTest {
707705
NoOpTransaction.getInstance()
708706
} else {
709707
val name = (it.arguments[0] as TransactionContext).name
710-
mock<ITransaction>()
708+
mockTransaction()
711709
.also { transaction -> whenever(transaction.name).thenReturn(name) }
712710
.also(startedTransactions::add)
713711
}

‎sentry-android-navigation3/src/test/kotlin/io/sentry/compose/navigation3/lifecycle/StagedNavTransactionTest.kt‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ class StagedNavTransactionTest {
2828
private val transactionOptions = TransactionOptions()
2929

3030
private val finishedTransaction =
31-
mock<ITransaction>().also { whenever(it.isFinished).thenReturn(true) }
32-
private val hostTransaction = mock<ITransaction>()
31+
mockTransaction().also { whenever(it.isFinished).thenReturn(true) }
32+
private val hostTransaction = mockTransaction()
3333

3434
@Test
3535
fun `start() - starts a nav transaction and binds it to a free scope`() {
@@ -511,7 +511,7 @@ class StagedNavTransactionTest {
511511
NoOpTransaction.getInstance()
512512
} else {
513513
val name = (it.arguments[0] as TransactionContext).name
514-
mock<ITransaction>()
514+
mockTransaction()
515515
.also { transaction -> whenever(transaction.name).thenReturn(name) }
516516
.also(startedTransactions::add)
517517
}

0 commit comments

Comments
 (0)