From 5765e68b306665cbc6805996ce8fcbd750769d38 Mon Sep 17 00:00:00 2001 From: Petr Nymsa Date: Mon, 9 Jun 2025 09:35:41 +0200 Subject: [PATCH 1/3] Add a few mocking utils --- packages/netglade_utils/CHANGELOG.md | 2 ++ .../lib/src/testing/mock_extensions.dart | 29 ++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/packages/netglade_utils/CHANGELOG.md b/packages/netglade_utils/CHANGELOG.md index a91f1b3..dfdc893 100644 --- a/packages/netglade_utils/CHANGELOG.md +++ b/packages/netglade_utils/CHANGELOG.md @@ -1,5 +1,7 @@ ## Unreleased - Require Dart SDK 3.8.0 or later. +- Add `verifyOnlyOneCallAndNothingElse` +- Add shortcut calls for stubbing When with Option result. ## 2.5.0 - Dependencies update. diff --git a/packages/netglade_utils/lib/src/testing/mock_extensions.dart b/packages/netglade_utils/lib/src/testing/mock_extensions.dart index dc2aa06..21f1b4c 100644 --- a/packages/netglade_utils/lib/src/testing/mock_extensions.dart +++ b/packages/netglade_utils/lib/src/testing/mock_extensions.dart @@ -25,22 +25,43 @@ extension StreamedAnswer on When> { extension VerificationResultEx on VerificationResult { void calledOnce() => called(1); + + void calledOnlyThisAndNothingElse() { + called(1); + } +} + +/// Verifies that the given mock was called exactly once with the provided function. +/// +/// Also verifies that no other interactions with the mock occurred. +// ignore: prefer-static-class, prefer-typedefs-for-callbacks, avoid-dynamic, keep it. +void verifyOnlyOneCallAndNothingElse(dynamic mock, T Function() verifyCall) { + verify(verifyCall).calledOnce(); + verifyNoMoreInteractions(mock); } extension SuccessAnswer on When>> { void thenAnswerWithSuccess(T value) => thenAnswer((_) async => Success(value)); + + void thenAnswerWithError(E error) => thenAnswer((_) async => Error(error)); } extension SuccessAnswerOr on When>> { void thenAnswerWithSuccess(T value) => thenAnswer((_) => Success(value)); + + void thenAnswerWithError(E error) => thenAnswer((_) => Error(error)); } -extension ErrorAnswer on When>> { - void thenAnswerWithError(E error) => thenAnswer((_) async => Error(error)); +extension OptionAnswer on When>> { + void thenAnswerWithNone() => thenAnswer((_) async => const None()); + + void thenAnswerWithSome(T value) => thenAnswer((_) async => Some(value)); } -extension ErrorAnswerOr on When>> { - void thenAnswerWithError(E error) => thenAnswer((_) => Error(error)); +extension OptionAnswerOr on When>> { + void thenAnswerWithNone() => thenAnswer((_) async => const None()); + + void thenAnswerWithSome(T value) => thenAnswer((_) async => Some(value)); } extension StreamSubscriptionAnswer on When> { From 71083a0a66a37afbc03fb5e0e54dd4af5c443f7d Mon Sep 17 00:00:00 2001 From: Petr Nymsa Date: Mon, 9 Jun 2025 09:45:06 +0200 Subject: [PATCH 2/3] Code cleanup --- packages/netglade_utils/lib/src/testing/mock_extensions.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/netglade_utils/lib/src/testing/mock_extensions.dart b/packages/netglade_utils/lib/src/testing/mock_extensions.dart index 21f1b4c..c622a75 100644 --- a/packages/netglade_utils/lib/src/testing/mock_extensions.dart +++ b/packages/netglade_utils/lib/src/testing/mock_extensions.dart @@ -25,10 +25,6 @@ extension StreamedAnswer on When> { extension VerificationResultEx on VerificationResult { void calledOnce() => called(1); - - void calledOnlyThisAndNothingElse() { - called(1); - } } /// Verifies that the given mock was called exactly once with the provided function. From a92b8885e8ab5d40930ea2d33d80e8452a88e578 Mon Sep 17 00:00:00 2001 From: Petr Nymsa Date: Mon, 9 Jun 2025 12:09:02 +0200 Subject: [PATCH 3/3] Rename to better reflect intention --- packages/netglade_utils/CHANGELOG.md | 2 +- packages/netglade_utils/lib/src/testing/mock_extensions.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/netglade_utils/CHANGELOG.md b/packages/netglade_utils/CHANGELOG.md index dfdc893..12f79f9 100644 --- a/packages/netglade_utils/CHANGELOG.md +++ b/packages/netglade_utils/CHANGELOG.md @@ -1,6 +1,6 @@ ## Unreleased - Require Dart SDK 3.8.0 or later. -- Add `verifyOnlyOneCallAndNothingElse` +- Add `verifyCalledOnceAndNoMoreInteractions` - Add shortcut calls for stubbing When with Option result. ## 2.5.0 diff --git a/packages/netglade_utils/lib/src/testing/mock_extensions.dart b/packages/netglade_utils/lib/src/testing/mock_extensions.dart index c622a75..3dd8156 100644 --- a/packages/netglade_utils/lib/src/testing/mock_extensions.dart +++ b/packages/netglade_utils/lib/src/testing/mock_extensions.dart @@ -31,7 +31,7 @@ extension VerificationResultEx on VerificationResult { /// /// Also verifies that no other interactions with the mock occurred. // ignore: prefer-static-class, prefer-typedefs-for-callbacks, avoid-dynamic, keep it. -void verifyOnlyOneCallAndNothingElse(dynamic mock, T Function() verifyCall) { +void verifyCalledOnceAndNoMoreInteractions(dynamic mock, T Function() verifyCall) { verify(verifyCall).calledOnce(); verifyNoMoreInteractions(mock); }