Skip to content

Commit

Permalink
Add regression tests for #2816
Browse files Browse the repository at this point in the history
closes #2816
  • Loading branch information
rrousselGit committed Mar 9, 2024
1 parent 1ff2870 commit ea91d6d
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
2 changes: 2 additions & 0 deletions packages/riverpod/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
with the provider if the provider is no-longer used.
- Fix `selectAsync` sometimes never resolving.
- Fix `ProviderSubscription.read` returned by `ref.listen(provider.future)` not throwing if used after the subscription has been closed.
- Fix `ref.onAddListener` and other life-cycles not being triggered when
listening to `provider.future`/`provider.notifier`.

## 2.5.0 - 2024-02-03

Expand Down
54 changes: 54 additions & 0 deletions packages/riverpod/test/framework/modifiers_test.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// ignore_for_file: prefer_const_constructors
import 'package:mockito/mockito.dart';
import 'package:riverpod/riverpod.dart';
import 'package:riverpod/src/builders.dart';
import 'package:test/test.dart';
Expand All @@ -23,6 +24,59 @@ void main() {
});
});

test('Listening to a modifier correctly fires ref life-cycles', () async {
final container = createContainer();
final onDispose = OnDisposeMock();
final onAddListener = OnAddListener();
final onRemoveListener = OnRemoveListener();
final onResume = OnResume();
final onCancel = OnCancelMock();

final provider = FutureProvider((ref) {
ref.onDispose(onDispose.call);
ref.onAddListener(onAddListener.call);
ref.onRemoveListener(onRemoveListener.call);
ref.onCancel(onCancel.call);
ref.onResume(onResume.call);
return 0;
});

final sub = container.listen(provider.future, (prev, value) {});

verifyOnly(onAddListener, onAddListener());

final sub2 = container.listen(provider.future, (prev, value) {});

verifyOnly(onAddListener, onAddListener());

sub.close();

verifyOnly(onRemoveListener, onRemoveListener());
verifyZeroInteractions(onCancel);

sub2.close();

verifyOnly(onRemoveListener, onRemoveListener());
verifyZeroInteractions(onResume);
verifyOnly(onCancel, onCancel());

container.listen(provider.future, (prev, value) {});

verifyOnly(onAddListener, onAddListener());
verifyOnly(onResume, onResume());

container.listen(provider.future, (prev, value) {});

verifyOnly(onAddListener, onAddListener());
verifyNoMoreInteractions(onCancel);
verifyNoMoreInteractions(onResume);
verifyZeroInteractions(onDispose);

container.invalidate(provider);

verifyOnly(onDispose, onDispose());
});

test('builders', () {
expect(Provider.autoDispose.family, Provider.family.autoDispose);
expect(
Expand Down

0 comments on commit ea91d6d

Please sign in to comment.