From a878fb9b5ff748cb4aa3fd6d49cafd57e759a97e Mon Sep 17 00:00:00 2001 From: Alexander Thomas Date: Mon, 24 Nov 2025 13:36:02 +0100 Subject: [PATCH 1/2] Always fetch initial results with a valid filter --- .../data/results_repository.dart | 3 +- .../data/try_results_repository.dart | 4 +- current_results_ui/test/routing_test.dart | 75 ++++++++++++------- 3 files changed, 50 insertions(+), 32 deletions(-) diff --git a/current_results_ui/lib/src/features/results_overview/data/results_repository.dart b/current_results_ui/lib/src/features/results_overview/data/results_repository.dart index 3ede4e0..5080de0 100644 --- a/current_results_ui/lib/src/features/results_overview/data/results_repository.dart +++ b/current_results_ui/lib/src/features/results_overview/data/results_repository.dart @@ -34,10 +34,9 @@ abstract class QueryResultsBase extends ChangeNotifier { QueryResultsBase( this._filter, { - bool fetchInitialResults = false, this.supportsEmptyQuery = false, }) { - if (fetchInitialResults) { + if (_filter.terms.isNotEmpty || supportsEmptyQuery) { _fetchResults(); } } diff --git a/current_results_ui/lib/src/features/try_results/data/try_results_repository.dart b/current_results_ui/lib/src/features/try_results/data/try_results_repository.dart index 2a9780f..b3bf50d 100644 --- a/current_results_ui/lib/src/features/try_results/data/try_results_repository.dart +++ b/current_results_ui/lib/src/features/try_results/data/try_results_repository.dart @@ -20,8 +20,8 @@ class TryQueryResults extends QueryResultsBase { required this.patchset, required Filter filter, ResultsService? resultsService, - }) : _resultsService = resultsService ?? ResultsService(), - super(filter, fetchInitialResults: true, supportsEmptyQuery: true); + }) : _resultsService = resultsService ?? ResultsService(), + super(filter, supportsEmptyQuery: true); @override Stream> createResultsStream() async* { diff --git a/current_results_ui/test/routing_test.dart b/current_results_ui/test/routing_test.dart index 40cad01..e95cefb 100644 --- a/current_results_ui/test/routing_test.dart +++ b/current_results_ui/test/routing_test.dart @@ -23,20 +23,30 @@ import 'package:provider/provider.dart'; import 'routing_test.mocks.dart'; -class FakeQueryResults extends TryQueryResults { - FakeQueryResults({ - super.cl = 0, - super.patchset = 0, - required super.filter, - super.resultsService, - }); +mixin FakeCreateResultsStreamMixin on QueryResultsBase { + bool createResultsStreamCalled = false; @override Stream> createResultsStream() async* { + createResultsStreamCalled = true; yield []; } } +class FakeQueryResults extends QueryResults with FakeCreateResultsStreamMixin { + FakeQueryResults(super.filter); +} + +class FakeTryQueryResults extends TryQueryResults + with FakeCreateResultsStreamMixin { + FakeTryQueryResults({ + required super.cl, + required super.patchset, + required super.filter, + super.resultsService, + }); +} + @GenerateNiceMocks([ MockSpec(), MockSpec(), @@ -45,7 +55,8 @@ class FakeQueryResults extends TryQueryResults { void main() { late MockAuthService mockAuthService; late GoRouter router; - late TryQueryResults queryResults; + late FakeQueryResults queryResults; + late FakeTryQueryResults tryQueryResults; late MockResultsService mockResultsService; setUp(() { @@ -56,17 +67,16 @@ void main() { ); router = createRouter( queryResultsProvider: (filter) => queryResults = FakeQueryResults( - filter: filter, - resultsService: mockResultsService, + filter, ), tryQueryResultsProvider: ({required cl, required patchset, required filter}) => - queryResults = FakeQueryResults( - cl: cl, - patchset: patchset, - filter: filter, - resultsService: mockResultsService, - ), + tryQueryResults = FakeTryQueryResults( + cl: cl, + patchset: patchset, + filter: filter, + resultsService: mockResultsService, + ), ); }); @@ -92,6 +102,7 @@ void main() { final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(0)); expect(find.byType(Instructions), findsNothing); + expect(queryResults.createResultsStreamCalled, isTrue); }); testWidgets('Routing works for flaky parameter', (WidgetTester tester) async { @@ -104,6 +115,7 @@ void main() { expect(resultsScreen.filter.terms, isEmpty); final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(1)); + expect(queryResults.createResultsStreamCalled, isFalse); }); testWidgets('Routing works for showAll parameter', ( @@ -118,6 +130,7 @@ void main() { expect(resultsScreen.filter.terms, isEmpty); final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(2)); + expect(queryResults.createResultsStreamCalled, isFalse); }); testWidgets('Routing works for combined parameters', ( @@ -132,6 +145,7 @@ void main() { expect(resultsScreen.filter.terms, equals(['test-filter'])); final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(2)); + expect(queryResults.createResultsStreamCalled, isTrue); }); testWidgets('Routing works for default route', (WidgetTester tester) async { @@ -145,6 +159,7 @@ void main() { final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(0)); expect(find.byType(Instructions), findsOneWidget); + expect(queryResults.createResultsStreamCalled, isFalse); }); testWidgets('Routing works for cl route', (WidgetTester tester) async { @@ -155,9 +170,10 @@ void main() { final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(0)); - expect(queryResults.cl, equals(1234)); - expect(queryResults.patchset, equals(5)); - expect(queryResults.filter.terms, isEmpty); + expect(tryQueryResults.cl, equals(1234)); + expect(tryQueryResults.patchset, equals(5)); + expect(tryQueryResults.filter.terms, isEmpty); + expect(tryQueryResults.createResultsStreamCalled, isTrue); }); testWidgets('Routing works for cl route with filter', ( @@ -170,9 +186,10 @@ void main() { final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(0)); - expect(queryResults.cl, equals(1234)); - expect(queryResults.patchset, equals(5)); - expect(queryResults.filter.terms, equals(['my-filter'])); + expect(tryQueryResults.cl, equals(1234)); + expect(tryQueryResults.patchset, equals(5)); + expect(tryQueryResults.filter.terms, equals(['my-filter'])); + expect(tryQueryResults.createResultsStreamCalled, isTrue); }); testWidgets('Routing works for cl route with flaky', ( @@ -185,9 +202,10 @@ void main() { final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(1)); - expect(queryResults.cl, equals(1234)); - expect(queryResults.patchset, equals(5)); - expect(queryResults.filter.terms, isEmpty); + expect(tryQueryResults.cl, equals(1234)); + expect(tryQueryResults.patchset, equals(5)); + expect(tryQueryResults.filter.terms, isEmpty); + expect(tryQueryResults.createResultsStreamCalled, isTrue); }); testWidgets('Routing works for cl route with showAll', ( @@ -200,8 +218,9 @@ void main() { final tabBar = tester.widget(find.byType(TabBar)); expect(tabBar.controller?.index, equals(2)); - expect(queryResults.cl, equals(1234)); - expect(queryResults.patchset, equals(5)); - expect(queryResults.filter.terms, isEmpty); + expect(tryQueryResults.cl, equals(1234)); + expect(tryQueryResults.patchset, equals(5)); + expect(tryQueryResults.filter.terms, isEmpty); + expect(tryQueryResults.createResultsStreamCalled, isTrue); }); } From 6fdc9ce4e2e443d62e5e34d84cbede2f578b0ebd Mon Sep 17 00:00:00 2001 From: Alexander Thomas Date: Mon, 24 Nov 2025 13:44:21 +0100 Subject: [PATCH 2/2] format --- .../results_overview/data/results_repository.dart | 5 +---- .../try_results/data/try_results_repository.dart | 4 ++-- current_results_ui/test/routing_test.dart | 14 ++++++-------- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/current_results_ui/lib/src/features/results_overview/data/results_repository.dart b/current_results_ui/lib/src/features/results_overview/data/results_repository.dart index 5080de0..2b558e5 100644 --- a/current_results_ui/lib/src/features/results_overview/data/results_repository.dart +++ b/current_results_ui/lib/src/features/results_overview/data/results_repository.dart @@ -32,10 +32,7 @@ abstract class QueryResultsBase extends ChangeNotifier { Counts resultCounts = Counts(); int fetchedResultsCount = 0; - QueryResultsBase( - this._filter, { - this.supportsEmptyQuery = false, - }) { + QueryResultsBase(this._filter, {this.supportsEmptyQuery = false}) { if (_filter.terms.isNotEmpty || supportsEmptyQuery) { _fetchResults(); } diff --git a/current_results_ui/lib/src/features/try_results/data/try_results_repository.dart b/current_results_ui/lib/src/features/try_results/data/try_results_repository.dart index b3bf50d..f4f0167 100644 --- a/current_results_ui/lib/src/features/try_results/data/try_results_repository.dart +++ b/current_results_ui/lib/src/features/try_results/data/try_results_repository.dart @@ -20,8 +20,8 @@ class TryQueryResults extends QueryResultsBase { required this.patchset, required Filter filter, ResultsService? resultsService, - }) : _resultsService = resultsService ?? ResultsService(), - super(filter, supportsEmptyQuery: true); + }) : _resultsService = resultsService ?? ResultsService(), + super(filter, supportsEmptyQuery: true); @override Stream> createResultsStream() async* { diff --git a/current_results_ui/test/routing_test.dart b/current_results_ui/test/routing_test.dart index e95cefb..69b6a19 100644 --- a/current_results_ui/test/routing_test.dart +++ b/current_results_ui/test/routing_test.dart @@ -66,17 +66,15 @@ void main() { (_) async => Review(id: '123', subject: 'Test Subject', patchsets: []), ); router = createRouter( - queryResultsProvider: (filter) => queryResults = FakeQueryResults( - filter, - ), + queryResultsProvider: (filter) => queryResults = FakeQueryResults(filter), tryQueryResultsProvider: ({required cl, required patchset, required filter}) => tryQueryResults = FakeTryQueryResults( - cl: cl, - patchset: patchset, - filter: filter, - resultsService: mockResultsService, - ), + cl: cl, + patchset: patchset, + filter: filter, + resultsService: mockResultsService, + ), ); });