diff --git a/CHANGELOG.md b/CHANGELOG.md index f22227c5fa..52e43fbb21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ### Fixes +- Pass processed Breadcrumb to scope observer ([#1298](https://github.com/getsentry/sentry-dart/pull/1298)) - Remove duplicated breadcrumbs when syncing with iOS/macOS ([#1283](https://github.com/getsentry/sentry-dart/pull/1283)) ## 6.20.1 diff --git a/dart/lib/src/scope.dart b/dart/lib/src/scope.dart index aca1ac7a14..f573316661 100644 --- a/dart/lib/src/scope.dart +++ b/dart/lib/src/scope.dart @@ -155,10 +155,10 @@ class Scope { Scope(this._options); - bool _addBreadCrumbSync(Breadcrumb breadcrumb, {dynamic hint}) { + Breadcrumb? _addBreadCrumbSync(Breadcrumb breadcrumb, {dynamic hint}) { // bail out if maxBreadcrumbs is zero if (_options.maxBreadcrumbs == 0) { - return false; + return null; } Breadcrumb? processedBreadcrumb = breadcrumb; @@ -174,7 +174,7 @@ class Scope { SentryLevel.info, 'Breadcrumb was dropped by beforeBreadcrumb', ); - return false; + return null; } } catch (exception, stackTrace) { _options.logger( @@ -193,14 +193,15 @@ class Scope { } _breadcrumbs.add(processedBreadcrumb); } - return true; + return processedBreadcrumb; } /// Adds a breadcrumb to the breadcrumbs queue Future addBreadcrumb(Breadcrumb breadcrumb, {dynamic hint}) async { - if (_addBreadCrumbSync(breadcrumb, hint: hint)) { + final addedBreadcrumb = _addBreadCrumbSync(breadcrumb, hint: hint); + if (addedBreadcrumb != null) { await _callScopeObservers((scopeObserver) async => - await scopeObserver.addBreadcrumb(breadcrumb)); + await scopeObserver.addBreadcrumb(addedBreadcrumb)); } } diff --git a/dart/test/mocks/mock_scope_observer.dart b/dart/test/mocks/mock_scope_observer.dart index e1bcca216d..d0d5d8c048 100644 --- a/dart/test/mocks/mock_scope_observer.dart +++ b/dart/test/mocks/mock_scope_observer.dart @@ -1,6 +1,7 @@ import 'package:sentry/sentry.dart'; class MockScopeObserver extends ScopeObserver { + List addedBreadcrumbs = []; bool calledAddBreadcrumb = false; bool calledClearBreadcrumbs = false; bool calledRemoveContexts = false; @@ -25,6 +26,7 @@ class MockScopeObserver extends ScopeObserver { Future addBreadcrumb(Breadcrumb breadcrumb) async { calledAddBreadcrumb = true; numberOfAddBreadcrumbCalls += 1; + addedBreadcrumbs.add(breadcrumb); } @override diff --git a/dart/test/scope_test.dart b/dart/test/scope_test.dart index 2e8b71b89e..296d3ea267 100644 --- a/dart/test/scope_test.dart +++ b/dart/test/scope_test.dart @@ -611,6 +611,22 @@ void main() { expect(true, fixture.mockScopeObserver.calledAddBreadcrumb); }); + test('addBreadcrumb passes processed breadcrumb to scope observers', + () async { + final sut = fixture.getSut( + scopeObserver: fixture.mockScopeObserver, + beforeBreadcrumbCallback: ( + Breadcrumb? breadcrumb, { + dynamic hint, + }) { + return breadcrumb?.copyWith(message: "modified"); + }, + ); + await sut.addBreadcrumb(Breadcrumb()); + + expect(fixture.mockScopeObserver.addedBreadcrumbs[0].message, "modified"); + }); + test('clearBreadcrumbs should call scope observers', () async { final sut = fixture.getSut(scopeObserver: fixture.mockScopeObserver); await sut.clearBreadcrumbs();