Skip to content

Commit c89ccb6

Browse files
committed
Use max pagination size when loading data
This is a workaround for #867, but not a real solution
1 parent 4330e51 commit c89ccb6

File tree

8 files changed

+44
-27
lines changed

8 files changed

+44
-27
lines changed

lib/helpers/consts.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,5 @@ enum WeightUnitEnum { kg, lb }
135135

136136
/// TextInputType for decimal numbers
137137
const textInputTypeDecimal = TextInputType.numberWithOptions(decimal: true);
138+
139+
const String API_MAX_PAGE_SIZE = '999';

lib/providers/body_weight.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import 'package:flutter/material.dart';
2020
import 'package:logging/logging.dart';
2121
import 'package:wger/exceptions/http_exception.dart';
22+
import 'package:wger/helpers/consts.dart';
2223
import 'package:wger/models/body_weight/weight_entry.dart';
2324
import 'package:wger/providers/base_provider.dart';
2425

@@ -69,7 +70,7 @@ class BodyWeightProvider with ChangeNotifier {
6970
// Process the response
7071
final data = await baseProvider.fetchPaginated(baseProvider.makeUrl(
7172
BODY_WEIGHT_URL,
72-
query: {'ordering': '-date', 'limit': '100'},
73+
query: {'ordering': '-date', 'limit': API_MAX_PAGE_SIZE},
7374
));
7475
_entries = [];
7576
for (final entry in data) {

lib/providers/exercises.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ class ExercisesProvider with ChangeNotifier {
460460
/// Updates the exercise database with *all* the exercises from the server
461461
Future<void> updateExerciseCache(ExerciseDatabase database) async {
462462
final data = await baseProvider.fetchPaginated(
463-
baseProvider.makeUrl(exerciseInfoUrlPath, query: {'limit': '999'}),
463+
baseProvider.makeUrl(exerciseInfoUrlPath, query: {'limit': API_MAX_PAGE_SIZE}),
464464
);
465465
exercises = data.map((e) => Exercise.fromApiDataJson(e, _languages)).toList();
466466

lib/providers/measurement.dart

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import 'package:flutter/material.dart';
2020
import 'package:logging/logging.dart';
2121
import 'package:wger/exceptions/http_exception.dart';
2222
import 'package:wger/exceptions/no_such_entry_exception.dart';
23+
import 'package:wger/helpers/consts.dart';
2324
import 'package:wger/models/measurements/measurement_category.dart';
2425
import 'package:wger/models/measurements/measurement_entry.dart';
2526
import 'package:wger/providers/base_provider.dart';
@@ -54,10 +55,10 @@ class MeasurementProvider with ChangeNotifier {
5455
/// Fetches and sets the categories from the server (no entries)
5556
Future<void> fetchAndSetCategories() async {
5657
// Process the response
57-
final requestUrl = baseProvider.makeUrl(_categoryUrl);
58-
final data = await baseProvider.fetch(requestUrl);
58+
final requestUrl = baseProvider.makeUrl(_categoryUrl, query: {'limit': API_MAX_PAGE_SIZE});
59+
final data = await baseProvider.fetchPaginated(requestUrl);
5960
final List<MeasurementCategory> loadedEntries = [];
60-
for (final entry in data['results']) {
61+
for (final entry in data) {
6162
loadedEntries.add(MeasurementCategory.fromJson(entry));
6263
}
6364

@@ -71,10 +72,13 @@ class MeasurementProvider with ChangeNotifier {
7172
final categoryIndex = _categories.indexOf(category);
7273

7374
// Process the response
74-
final requestUrl = baseProvider.makeUrl(_entryUrl, query: {'category': category.id.toString()});
75-
final data = await baseProvider.fetch(requestUrl);
75+
final requestUrl = baseProvider.makeUrl(
76+
_entryUrl,
77+
query: {'category': category.id.toString(), 'limit': API_MAX_PAGE_SIZE},
78+
);
79+
final data = await baseProvider.fetchPaginated(requestUrl);
7680
final List<MeasurementEntry> loadedEntries = [];
77-
for (final entry in data['results']) {
81+
for (final entry in data) {
7882
loadedEntries.add(MeasurementEntry.fromJson(entry));
7983
}
8084
final MeasurementCategory editedCategory = category.copyWith(entries: loadedEntries);

lib/providers/nutrition.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class NutritionPlansProvider with ChangeNotifier {
9696
/// object itself and no child attributes
9797
Future<void> fetchAndSetAllPlansSparse() async {
9898
final data = await baseProvider.fetchPaginated(
99-
baseProvider.makeUrl(_nutritionalPlansPath, query: {'limit': '1000'}),
99+
baseProvider.makeUrl(_nutritionalPlansPath, query: {'limit': API_MAX_PAGE_SIZE}),
100100
);
101101
_plans = [];
102102
for (final planData in data) {
@@ -109,7 +109,10 @@ class NutritionPlansProvider with ChangeNotifier {
109109

110110
/// Fetches and sets all plans fully, i.e. with all corresponding child objects
111111
Future<void> fetchAndSetAllPlansFull() async {
112-
final data = await baseProvider.fetchPaginated(baseProvider.makeUrl(_nutritionalPlansPath));
112+
final data = await baseProvider.fetchPaginated(baseProvider.makeUrl(
113+
_nutritionalPlansPath,
114+
query: {'limit': API_MAX_PAGE_SIZE},
115+
));
113116
await Future.wait(data.map((e) => fetchAndSetPlanFull(e['id'])).toList());
114117
}
115118

@@ -448,7 +451,7 @@ class NutritionPlansProvider with ChangeNotifier {
448451
_nutritionDiaryPath,
449452
query: {
450453
'plan': plan.id?.toString(),
451-
'limit': '999',
454+
'limit': API_MAX_PAGE_SIZE,
452455
'ordering': 'datetime',
453456
},
454457
),

lib/providers/routines.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class RoutinesProvider with ChangeNotifier {
156156
final data = await baseProvider.fetch(
157157
baseProvider.makeUrl(
158158
_routinesUrlPath,
159-
query: {'ordering': '-creation_date', 'limit': '1000', 'is_template': 'false'},
159+
query: {'ordering': '-creation_date', 'limit': API_MAX_PAGE_SIZE, 'is_template': 'false'},
160160
),
161161
);
162162
for (final entry in data['results']) {
@@ -170,7 +170,10 @@ class RoutinesProvider with ChangeNotifier {
170170
/// and no child attributes
171171
Future<void> fetchAndSetAllRoutinesSparse() async {
172172
final data = await baseProvider.fetch(
173-
baseProvider.makeUrl(_routinesUrlPath, query: {'limit': '1000', 'is_template': 'false'}),
173+
baseProvider.makeUrl(
174+
_routinesUrlPath,
175+
query: {'limit': API_MAX_PAGE_SIZE, 'is_template': 'false'},
176+
),
174177
);
175178
_routines = [];
176179
for (final workoutPlanData in data['results']) {
@@ -210,7 +213,7 @@ class RoutinesProvider with ChangeNotifier {
210213
/// and no child attributes
211214
Future<Routine> fetchAndSetRoutineSparse(int planId) async {
212215
final fullPlanData = await baseProvider.fetch(
213-
baseProvider.makeUrl(_routinesUrlPath, id: planId),
216+
baseProvider.makeUrl(_routinesUrlPath, id: planId, query: {'limit': API_MAX_PAGE_SIZE}),
214217
);
215218
final routine = Routine.fromJson(fullPlanData);
216219
_routines.add(routine);

test/measurements/measurement_provider_test.dart

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:mockito/annotations.dart';
66
import 'package:mockito/mockito.dart';
77
import 'package:wger/exceptions/http_exception.dart';
88
import 'package:wger/exceptions/no_such_entry_exception.dart';
9+
import 'package:wger/helpers/consts.dart';
910
import 'package:wger/models/measurements/measurement_category.dart';
1011
import 'package:wger/models/measurements/measurement_entry.dart';
1112
import 'package:wger/providers/base_provider.dart';
@@ -14,8 +15,6 @@ import 'package:wger/providers/measurement.dart';
1415
import '../fixtures/fixture_reader.dart';
1516
import 'measurement_provider_test.mocks.dart';
1617

17-
// class MockWgerBaseProvider extends Mock implements WgerBaseProvider {}
18-
1918
@GenerateMocks([WgerBaseProvider])
2019
void main() {
2120
late MeasurementProvider measurementProvider;
@@ -48,16 +47,17 @@ void main() {
4847
measurementProvider = MeasurementProvider(mockWgerBaseProvider);
4948

5049
when(mockWgerBaseProvider.makeUrl(any)).thenReturn(tCategoryUri);
51-
when(mockWgerBaseProvider.makeUrl(any, id: anyNamed('id'))).thenReturn(tCategoryUri);
52-
when(mockWgerBaseProvider.fetch(any))
53-
.thenAnswer((realInvocation) => Future.value(tMeasurementCategoriesMap));
50+
when(mockWgerBaseProvider.makeUrl(any, id: anyNamed('id'), query: anyNamed('query')))
51+
.thenReturn(tCategoryUri);
52+
when(mockWgerBaseProvider.fetchPaginated(any))
53+
.thenAnswer((realInvocation) => Future.value(tMeasurementCategoriesMap['results']));
5454

5555
when(mockWgerBaseProvider.makeUrl(entryUrl, query: anyNamed('query')))
5656
.thenReturn(tCategoryEntriesUri);
5757
when(mockWgerBaseProvider.makeUrl(entryUrl, id: anyNamed('id'), query: anyNamed('query')))
5858
.thenReturn(tCategoryEntriesUri);
59-
when(mockWgerBaseProvider.fetch(tCategoryEntriesUri))
60-
.thenAnswer((realInvocation) => Future.value(tMeasurementCategoryMap));
59+
when(mockWgerBaseProvider.fetchPaginated(tCategoryEntriesUri))
60+
.thenAnswer((realInvocation) => Future.value(tMeasurementCategoryMap['results']));
6161
});
6262

6363
group('clear()', () {
@@ -100,15 +100,15 @@ void main() {
100100
await measurementProvider.fetchAndSetCategories();
101101

102102
// assert
103-
verify(mockWgerBaseProvider.makeUrl(categoryUrl));
103+
verify(mockWgerBaseProvider.makeUrl(categoryUrl, query: {'limit': API_MAX_PAGE_SIZE}));
104104
});
105105

106106
test('should fetch data from api', () async {
107107
// act
108108
await measurementProvider.fetchAndSetCategories();
109109

110110
// assert
111-
verify(mockWgerBaseProvider.fetch(tCategoryUri));
111+
verify(mockWgerBaseProvider.fetchPaginated(tCategoryUri));
112112
});
113113

114114
test('should set categories', () async {
@@ -130,15 +130,18 @@ void main() {
130130
await measurementProvider.fetchAndSetCategoryEntries(tCategoryId);
131131

132132
// assert
133-
verify(mockWgerBaseProvider.makeUrl(entryUrl, query: {'category': tCategoryId.toString()}));
133+
verify(mockWgerBaseProvider.makeUrl(
134+
entryUrl,
135+
query: {'category': tCategoryId.toString(), 'limit': API_MAX_PAGE_SIZE},
136+
));
134137
});
135138

136139
test('should fetch categories entries for id', () async {
137140
// act
138141
await measurementProvider.fetchAndSetCategoryEntries(tCategoryId);
139142

140143
// assert
141-
verify(mockWgerBaseProvider.fetch(tCategoryEntriesUri));
144+
verify(mockWgerBaseProvider.fetchPaginated(tCategoryEntriesUri));
142145
});
143146

144147
test('should add entries to category in list', () async {

test/routine/routines_provider_test.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ void main() {
5454
});
5555

5656
group('test the workout routine provider', () {
57-
test('Test fetching and setting a plan', () async {
57+
test('Test fetching and setting a routine', () async {
5858
final exercisesProvider = ExercisesProvider(mockBaseProvider);
5959

6060
final uri = Uri.https('localhost', 'api/v2/routine/325397/');
61-
when(mockBaseProvider.makeUrl('routine', id: 325397)).thenReturn(uri);
61+
when(mockBaseProvider.makeUrl('routine', id: 325397, query: {'limit': API_MAX_PAGE_SIZE}))
62+
.thenReturn(uri);
6263
when(mockBaseProvider.fetch(uri)).thenAnswer(
6364
(_) async => Future.value({
6465
'id': 325397,

0 commit comments

Comments
 (0)