Skip to content

Commit

Permalink
test that didPop does not call finsh transaction multiple times
Browse files Browse the repository at this point in the history
  • Loading branch information
denrase committed Feb 13, 2024
1 parent e4dc8d7 commit e992df5
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
6 changes: 3 additions & 3 deletions flutter/lib/src/navigation/sentry_navigator_observer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -243,12 +243,12 @@ class SentryNavigatorObserver extends RouteObserver<PageRoute<dynamic>> {

Future<void> _finishTransaction() async {
final transaction = _transaction;
_transaction = null;
if (transaction == null || transaction.finished) {
return;
}
_transaction?.status ??= SpanStatus.ok();
await _transaction?.finish();
_transaction = null;
transaction.status ??= SpanStatus.ok();
await transaction.finish();
}
}

Expand Down
18 changes: 18 additions & 0 deletions flutter/test/sentry_navigator_observer_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,24 @@ void main() {
verify(span.finish());
});

test('multiple didPop only finish transaction once', () {
final currentRoute = route(RouteSettings(name: 'Current Route'));

final hub = _MockHub();
final span = getMockSentryTracer(finished: false);
when(span.context).thenReturn(SentrySpanContext(operation: 'op'));
when(span.status).thenReturn(null);
_whenAnyStart(hub, span);

final sut = fixture.getSut(hub: hub);

sut.didPush(currentRoute, null);
sut.didPop(currentRoute, null);
sut.didPop(currentRoute, null);

verify(span.finish()).called(1);
});

test('didPop re-starts previous', () {
final previousRoute = route(RouteSettings(name: 'Previous Route'));
final currentRoute = route(RouteSettings(name: 'Current Route'));
Expand Down

0 comments on commit e992df5

Please sign in to comment.