diff --git a/lib/main.dart b/lib/main.dart index 1a7f61127..0dbe18ef7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -163,14 +163,15 @@ class MainApp extends StatelessWidget { update: (context, base, previous) => previous ?? ExercisesProvider(WgerBaseProvider(base)), ), - ChangeNotifierProxyProvider2( + ChangeNotifierProxyProvider3( create: (context) => RoutinesProvider( WgerBaseProvider(Provider.of(context, listen: false)), Provider.of(context, listen: false), + Provider.of(context, listen: true), [], ), - update: (context, auth, exercises, previous) => - previous ?? RoutinesProvider(WgerBaseProvider(auth), exercises, []), + update: (context, auth, exercises, user, previous) => + previous ?? RoutinesProvider(WgerBaseProvider(auth), exercises, user, []), ), ChangeNotifierProxyProvider( create: (context) => NutritionPlansProvider( diff --git a/lib/models/workouts/set_config_data.dart b/lib/models/workouts/set_config_data.dart index 38b8e1520..47435945c 100644 --- a/lib/models/workouts/set_config_data.dart +++ b/lib/models/workouts/set_config_data.dart @@ -107,7 +107,7 @@ class SetConfigData { this.maxNrOfSets, this.weight, this.maxWeight, - this.weightUnitId = WEIGHT_UNIT_KG, + this.weightUnitId, this.weightRounding, this.repetitions, this.maxRepetitions, diff --git a/lib/models/workouts/set_config_data.g.dart b/lib/models/workouts/set_config_data.g.dart index e415005b7..eba87c76a 100644 --- a/lib/models/workouts/set_config_data.g.dart +++ b/lib/models/workouts/set_config_data.g.dart @@ -40,7 +40,7 @@ SetConfigData _$SetConfigDataFromJson(Map json) { maxNrOfSets: json['max_sets'] as num?, weight: stringToNumNull(json['weight'] as String?), maxWeight: stringToNumNull(json['max_weight'] as String?), - weightUnitId: (json['weight_unit'] as num?)?.toInt() ?? WEIGHT_UNIT_KG, + weightUnitId: (json['weight_unit'] as num?)?.toInt(), weightRounding: stringToNumNull(json['weight_rounding'] as String?), repetitions: stringToNumNull(json['repetitions'] as String?), maxRepetitions: stringToNumNull(json['max_repetitions'] as String?), diff --git a/lib/models/workouts/slot_entry.dart b/lib/models/workouts/slot_entry.dart index 47f87bd08..5e46bc3c1 100644 --- a/lib/models/workouts/slot_entry.dart +++ b/lib/models/workouts/slot_entry.dart @@ -192,7 +192,7 @@ class SlotEntry { int? order, SlotEntryType? type, required Exercise exercise, - int? weightUnitId, + this.weightUnitId, this.weightRounding, int? repetitionUnitId, this.repetitionRounding, @@ -203,7 +203,6 @@ class SlotEntry { this.type = type ?? SlotEntryType.normal; exerciseObj = exercise; exerciseId = exercise.id!; - this.weightUnitId = weightUnitId ?? WEIGHT_UNIT_KG; this.repetitionUnitId = repetitionUnitId ?? REP_UNIT_REPETITIONS_ID; } diff --git a/lib/providers/routines.dart b/lib/providers/routines.dart index 7072afe66..eba0081be 100644 --- a/lib/providers/routines.dart +++ b/lib/providers/routines.dart @@ -37,6 +37,7 @@ import 'package:wger/models/workouts/slot_entry.dart'; import 'package:wger/models/workouts/weight_unit.dart'; import 'package:wger/providers/base_provider.dart'; import 'package:wger/providers/exercises.dart'; +import 'package:wger/providers/user.dart'; class RoutinesProvider with ChangeNotifier { final _logger = Logger('RoutinesProvider'); @@ -67,6 +68,7 @@ class RoutinesProvider with ChangeNotifier { Routine? activeRoutine; final ExercisesProvider _exerciseProvider; final WgerBaseProvider baseProvider; + final UserProvider _userProvider; List _routines = []; List _weightUnits = []; List _repetitionUnits = []; @@ -74,6 +76,7 @@ class RoutinesProvider with ChangeNotifier { RoutinesProvider( this.baseProvider, this._exerciseProvider, + this._userProvider, List entries, { List? weightUnits, List? repetitionUnits, @@ -112,8 +115,9 @@ class RoutinesProvider with ChangeNotifier { } /// Return the default weight unit (kg) - WeightUnit get defaultWeightUnit { - return _weightUnits.firstWhere((element) => element.id == WEIGHT_UNIT_KG); + Future get defaultWeightUnit async { + final id = await _userProvider.isMetric() ? WEIGHT_UNIT_KG : WEIGHT_UNIT_LB; + return _weightUnits.firstWhere((element) => element.id == id); } WeightUnit findWeightUnitById(int id) => _weightUnits.firstWhere((element) => element.id == id); @@ -203,9 +207,13 @@ class RoutinesProvider with ChangeNotifier { (e) => e.id == setConfig.repetitionsUnitId, ); - setConfig.weightUnit = _weightUnits.firstWhere( - (e) => e.id == setConfig.weightUnitId, - ); + if (setConfig.weightUnitId != null) { + setConfig.weightUnit = _weightUnits.firstWhere( + (e) => e.id == setConfig.weightUnitId, + ); + } else { + setConfig.weightUnit = await defaultWeightUnit; + } } } } diff --git a/lib/providers/user.dart b/lib/providers/user.dart index 7659e841f..43f528ca4 100644 --- a/lib/providers/user.dart +++ b/lib/providers/user.dart @@ -244,7 +244,7 @@ class UserProvider with ChangeNotifier { } /// Fetch the current user's profile - Future fetchAndSetProfile() async { + Future _fetchAndSetProfile() async { final userData = await baseProvider.fetch(baseProvider.makeUrl(PROFILE_URL)); try { profile = Profile.fromJson(userData); @@ -255,10 +255,13 @@ class UserProvider with ChangeNotifier { /// Save the user's profile to the server Future saveProfile() async { - await baseProvider.post( - profile!.toJson(), - baseProvider.makeUrl(PROFILE_URL), - ); + final profile = this.profile; + if (profile != null) { + await baseProvider.post( + profile.toJson(), + baseProvider.makeUrl(PROFILE_URL), + ); + } } /// Verify the user's email @@ -271,4 +274,11 @@ class UserProvider with ChangeNotifier { ); //log(verificationData.toString()); } + + Future isMetric() async { + if (profile == null) { + await _fetchAndSetProfile(); + } + return profile?.isMetric ?? false; + } } diff --git a/lib/screens/home_tabs_screen.dart b/lib/screens/home_tabs_screen.dart index 10de168f7..61baa85da 100644 --- a/lib/screens/home_tabs_screen.dart +++ b/lib/screens/home_tabs_screen.dart @@ -93,14 +93,12 @@ class _HomeTabsScreenState extends ConsumerState final galleryProvider = context.read(); final weightProvider = context.read(); final measurementProvider = context.read(); - final userProvider = context.read(); // // Base data widget._logger.info('Loading base data'); await Future.wait([ authProvider.setServerVersion(), - userProvider.fetchAndSetProfile(), routinesProvider.fetchAndSetUnits(), nutritionPlansProvider.fetchIngredientsFromCache(), exercisesProvider.fetchAndSetInitialData(), diff --git a/test/routine/routine_screen_test.dart b/test/routine/routine_screen_test.dart index 9d46b1d26..97fb78574 100644 --- a/test/routine/routine_screen_test.dart +++ b/test/routine/routine_screen_test.dart @@ -28,14 +28,16 @@ import 'package:wger/l10n/generated/app_localizations.dart'; import 'package:wger/providers/base_provider.dart'; import 'package:wger/providers/exercises.dart'; import 'package:wger/providers/routines.dart'; +import 'package:wger/providers/user.dart'; import 'package:wger/screens/routine_screen.dart'; import '../../test_data/routines.dart'; import 'routine_screen_test.mocks.dart'; -@GenerateMocks([WgerBaseProvider]) +@GenerateMocks([WgerBaseProvider, UserProvider]) void main() { final mockBaseProvider = MockWgerBaseProvider(); + final mockUserProvider = MockUserProvider(); final exercisesProvider = ExercisesProvider( mockBaseProvider, database: ExerciseDatabase.inMemory(NativeDatabase.memory()), @@ -48,6 +50,7 @@ void main() { create: (context) => RoutinesProvider( mockBaseProvider, exercisesProvider, + mockUserProvider, [getTestRoutine()], ), child: MaterialApp( diff --git a/test/routine/routine_screen_test.mocks.dart b/test/routine/routine_screen_test.mocks.dart index aac1c9eac..166b4a5e8 100644 --- a/test/routine/routine_screen_test.mocks.dart +++ b/test/routine/routine_screen_test.mocks.dart @@ -3,12 +3,17 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i5; +import 'dart:async' as _i6; +import 'dart:ui' as _i9; +import 'package:flutter/material.dart' as _i8; import 'package:http/http.dart' as _i3; import 'package:mockito/mockito.dart' as _i1; +import 'package:shared_preferences/shared_preferences.dart' as _i5; +import 'package:wger/models/user/profile.dart' as _i10; import 'package:wger/providers/auth.dart' as _i2; import 'package:wger/providers/base_provider.dart' as _i4; +import 'package:wger/providers/user.dart' as _i7; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -26,19 +31,35 @@ import 'package:wger/providers/base_provider.dart' as _i4; // ignore_for_file: invalid_use_of_internal_member class _FakeAuthProvider_0 extends _i1.SmartFake implements _i2.AuthProvider { - _FakeAuthProvider_0(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeAuthProvider_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeClient_1 extends _i1.SmartFake implements _i3.Client { - _FakeClient_1(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeClient_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeUri_2 extends _i1.SmartFake implements Uri { - _FakeUri_2(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeUri_2(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeResponse_3 extends _i1.SmartFake implements _i3.Response { - _FakeResponse_3(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeResponse_3(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeWgerBaseProvider_4 extends _i1.SmartFake + implements _i4.WgerBaseProvider { + _FakeWgerBaseProvider_4(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeSharedPreferencesAsync_5 extends _i1.SmartFake + implements _i5.SharedPreferencesAsync { + _FakeSharedPreferencesAsync_5(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } /// A class which mocks [WgerBaseProvider]. @@ -116,7 +137,7 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { as Uri); @override - _i5.Future fetch( + _i6.Future fetch( Uri? uri, { int? maxRetries = 3, Duration? initialDelay = const Duration(milliseconds: 250), @@ -134,12 +155,12 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #language: language, }, ), - returnValue: _i5.Future.value(), + returnValue: _i6.Future.value(), ) - as _i5.Future); + as _i6.Future); @override - _i5.Future> fetchPaginated( + _i6.Future> fetchPaginated( Uri? uri, { String? language, Duration? timeout = const Duration(seconds: 15), @@ -150,43 +171,227 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { [uri], {#language: language, #timeout: timeout}, ), - returnValue: _i5.Future>.value([]), + returnValue: _i6.Future>.value([]), ) - as _i5.Future>); + as _i6.Future>); @override - _i5.Future> post(Map? data, Uri? uri) => + _i6.Future> post(Map? data, Uri? uri) => (super.noSuchMethod( Invocation.method(#post, [data, uri]), - returnValue: _i5.Future>.value( + returnValue: _i6.Future>.value( {}, ), ) - as _i5.Future>); + as _i6.Future>); @override - _i5.Future> patch( + _i6.Future> patch( Map? data, Uri? uri, ) => (super.noSuchMethod( Invocation.method(#patch, [data, uri]), - returnValue: _i5.Future>.value( + returnValue: _i6.Future>.value( {}, ), ) - as _i5.Future>); + as _i6.Future>); @override - _i5.Future<_i3.Response> deleteRequest(String? url, int? id) => + _i6.Future<_i3.Response> deleteRequest(String? url, int? id) => (super.noSuchMethod( Invocation.method(#deleteRequest, [url, id]), - returnValue: _i5.Future<_i3.Response>.value( + returnValue: _i6.Future<_i3.Response>.value( _FakeResponse_3( this, Invocation.method(#deleteRequest, [url, id]), ), ), ) - as _i5.Future<_i3.Response>); + as _i6.Future<_i3.Response>); +} + +/// A class which mocks [UserProvider]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserProvider extends _i1.Mock implements _i7.UserProvider { + MockUserProvider() { + _i1.throwOnMissingStub(this); + } + + @override + _i8.ThemeMode get themeMode => + (super.noSuchMethod( + Invocation.getter(#themeMode), + returnValue: _i8.ThemeMode.system, + ) + as _i8.ThemeMode); + + @override + _i4.WgerBaseProvider get baseProvider => + (super.noSuchMethod( + Invocation.getter(#baseProvider), + returnValue: _FakeWgerBaseProvider_4( + this, + Invocation.getter(#baseProvider), + ), + ) + as _i4.WgerBaseProvider); + + @override + _i5.SharedPreferencesAsync get prefs => + (super.noSuchMethod( + Invocation.getter(#prefs), + returnValue: _FakeSharedPreferencesAsync_5( + this, + Invocation.getter(#prefs), + ), + ) + as _i5.SharedPreferencesAsync); + + @override + List<_i7.DashboardWidget> get dashboardWidgets => + (super.noSuchMethod( + Invocation.getter(#dashboardWidgets), + returnValue: <_i7.DashboardWidget>[], + ) + as List<_i7.DashboardWidget>); + + @override + List<_i7.DashboardWidget> get allDashboardWidgets => + (super.noSuchMethod( + Invocation.getter(#allDashboardWidgets), + returnValue: <_i7.DashboardWidget>[], + ) + as List<_i7.DashboardWidget>); + + @override + set themeMode(_i8.ThemeMode? value) => super.noSuchMethod( + Invocation.setter(#themeMode, value), + returnValueForMissingStub: null, + ); + + @override + set userLocale(_i9.Locale? value) => super.noSuchMethod( + Invocation.setter(#userLocale, value), + returnValueForMissingStub: null, + ); + + @override + set prefs(_i5.SharedPreferencesAsync? value) => super.noSuchMethod( + Invocation.setter(#prefs, value), + returnValueForMissingStub: null, + ); + + @override + set profile(_i10.Profile? value) => super.noSuchMethod( + Invocation.setter(#profile, value), + returnValueForMissingStub: null, + ); + + @override + bool get hasListeners => + (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) + as bool); + + @override + void clear() => super.noSuchMethod( + Invocation.method(#clear, []), + returnValueForMissingStub: null, + ); + + @override + bool isDashboardWidgetVisible(_i7.DashboardWidget? key) => + (super.noSuchMethod( + Invocation.method(#isDashboardWidgetVisible, [key]), + returnValue: false, + ) + as bool); + + @override + _i6.Future setDashboardWidgetVisible( + _i7.DashboardWidget? key, + bool? visible, + ) => + (super.noSuchMethod( + Invocation.method(#setDashboardWidgetVisible, [key, visible]), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future setDashboardOrder(int? oldIndex, int? newIndex) => + (super.noSuchMethod( + Invocation.method(#setDashboardOrder, [oldIndex, newIndex]), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + void setThemeMode(_i8.ThemeMode? mode) => super.noSuchMethod( + Invocation.method(#setThemeMode, [mode]), + returnValueForMissingStub: null, + ); + + @override + _i6.Future setUserLocale(_i9.Locale? locale) => + (super.noSuchMethod( + Invocation.method(#setUserLocale, [locale]), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future saveProfile() => + (super.noSuchMethod( + Invocation.method(#saveProfile, []), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future verifyEmail() => + (super.noSuchMethod( + Invocation.method(#verifyEmail, []), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future isMetric() => + (super.noSuchMethod( + Invocation.method(#isMetric, []), + returnValue: _i6.Future.value(false), + ) + as _i6.Future); + + @override + void addListener(_i9.VoidCallback? listener) => super.noSuchMethod( + Invocation.method(#addListener, [listener]), + returnValueForMissingStub: null, + ); + + @override + void removeListener(_i9.VoidCallback? listener) => super.noSuchMethod( + Invocation.method(#removeListener, [listener]), + returnValueForMissingStub: null, + ); + + @override + void dispose() => super.noSuchMethod( + Invocation.method(#dispose, []), + returnValueForMissingStub: null, + ); + + @override + void notifyListeners() => super.noSuchMethod( + Invocation.method(#notifyListeners, []), + returnValueForMissingStub: null, + ); } diff --git a/test/routine/routines_provider_test.dart b/test/routine/routines_provider_test.dart index 4679985c5..15e401439 100644 --- a/test/routine/routines_provider_test.dart +++ b/test/routine/routines_provider_test.dart @@ -35,15 +35,17 @@ import 'package:wger/models/workouts/weight_unit.dart'; import 'package:wger/providers/base_provider.dart'; import 'package:wger/providers/exercises.dart'; import 'package:wger/providers/routines.dart'; +import 'package:wger/providers/user.dart'; import '../../test_data/exercises.dart'; import '../../test_data/routines.dart'; import '../fixtures/fixture_reader.dart'; import 'routines_provider_test.mocks.dart'; -@GenerateMocks([WgerBaseProvider, ExercisesProvider]) +@GenerateMocks([WgerBaseProvider, ExercisesProvider, UserProvider]) void main() { final mockBaseProvider = MockWgerBaseProvider(); + final mockUserProvider = MockUserProvider(); /// Replacement for SharedPreferences.setMockInitialValues() SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); @@ -74,7 +76,7 @@ void main() { ); // Load the entries - final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, []); + final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, mockUserProvider, []); final plan = await provider.fetchAndSetRoutineSparse(325397); final plans = provider.getPlans(); @@ -102,7 +104,7 @@ void main() { ); // Load the entries - final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, []); + final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, mockUserProvider, []); await provider.fetchAndSetRoutineSparse(325397); await provider.deleteRoutine(325397); @@ -121,7 +123,7 @@ void main() { ).thenAnswer((_) => Future.value(tRepetitionUnits['results'])); // Load the entries - final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, []); + final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, mockUserProvider, []); await provider.fetchAndSetRepetitionUnits(); final repetitionUnits = provider.repetitionUnits; @@ -139,7 +141,7 @@ void main() { final ExercisesProvider testExercisesProvider = ExercisesProvider(mockBaseProvider); // Load the entries - final provider = RoutinesProvider(mockBaseProvider, testExercisesProvider, []); + final provider = RoutinesProvider(mockBaseProvider, testExercisesProvider, mockUserProvider, []); await provider.fetchAndSetWeightUnits(); final weightUnits = provider.weightUnits; @@ -168,7 +170,7 @@ void main() { final prefs = PreferenceHelper.asyncPref; // Load the entries - final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, []); + final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, mockUserProvider, []); await provider.fetchAndSetUnits(); final prefsJson = jsonDecode((await prefs.getString(PREFS_WORKOUT_UNITS))!); @@ -229,7 +231,7 @@ void main() { (_) async => Future.value(testCrunches), ); - final provider = RoutinesProvider(mockBaseProvider, mockExercisesProvider, []); + final provider = RoutinesProvider(mockBaseProvider, mockExercisesProvider, mockUserProvider, []); provider.repetitionUnits = testRepetitionUnits; provider.weightUnits = testWeightUnits; diff --git a/test/routine/routines_provider_test.mocks.dart b/test/routine/routines_provider_test.mocks.dart index c07f47e1c..b3362c3cb 100644 --- a/test/routine/routines_provider_test.mocks.dart +++ b/test/routine/routines_provider_test.mocks.dart @@ -3,22 +3,26 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i11; -import 'dart:ui' as _i15; +import 'dart:async' as _i12; +import 'dart:ui' as _i16; +import 'package:flutter/material.dart' as _i18; import 'package:http/http.dart' as _i3; import 'package:mockito/mockito.dart' as _i1; +import 'package:shared_preferences/shared_preferences.dart' as _i11; import 'package:wger/database/exercises/exercise_database.dart' as _i5; -import 'package:wger/models/core/search_options.dart' as _i13; +import 'package:wger/models/core/search_options.dart' as _i14; import 'package:wger/models/exercises/category.dart' as _i7; import 'package:wger/models/exercises/equipment.dart' as _i8; import 'package:wger/models/exercises/exercise.dart' as _i6; -import 'package:wger/models/exercises/exercise_filters.dart' as _i14; +import 'package:wger/models/exercises/exercise_filters.dart' as _i15; import 'package:wger/models/exercises/language.dart' as _i10; import 'package:wger/models/exercises/muscle.dart' as _i9; +import 'package:wger/models/user/profile.dart' as _i19; import 'package:wger/providers/auth.dart' as _i2; import 'package:wger/providers/base_provider.dart' as _i4; -import 'package:wger/providers/exercises.dart' as _i12; +import 'package:wger/providers/exercises.dart' as _i13; +import 'package:wger/providers/user.dart' as _i17; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -36,50 +40,67 @@ import 'package:wger/providers/exercises.dart' as _i12; // ignore_for_file: invalid_use_of_internal_member class _FakeAuthProvider_0 extends _i1.SmartFake implements _i2.AuthProvider { - _FakeAuthProvider_0(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeAuthProvider_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeClient_1 extends _i1.SmartFake implements _i3.Client { - _FakeClient_1(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeClient_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeUri_2 extends _i1.SmartFake implements Uri { - _FakeUri_2(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeUri_2(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeResponse_3 extends _i1.SmartFake implements _i3.Response { - _FakeResponse_3(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeResponse_3(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } -class _FakeWgerBaseProvider_4 extends _i1.SmartFake implements _i4.WgerBaseProvider { +class _FakeWgerBaseProvider_4 extends _i1.SmartFake + implements _i4.WgerBaseProvider { _FakeWgerBaseProvider_4(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } -class _FakeExerciseDatabase_5 extends _i1.SmartFake implements _i5.ExerciseDatabase { +class _FakeExerciseDatabase_5 extends _i1.SmartFake + implements _i5.ExerciseDatabase { _FakeExerciseDatabase_5(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } class _FakeExercise_6 extends _i1.SmartFake implements _i6.Exercise { - _FakeExercise_6(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeExercise_6(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } -class _FakeExerciseCategory_7 extends _i1.SmartFake implements _i7.ExerciseCategory { +class _FakeExerciseCategory_7 extends _i1.SmartFake + implements _i7.ExerciseCategory { _FakeExerciseCategory_7(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); } class _FakeEquipment_8 extends _i1.SmartFake implements _i8.Equipment { - _FakeEquipment_8(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeEquipment_8(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeMuscle_9 extends _i1.SmartFake implements _i9.Muscle { - _FakeMuscle_9(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeMuscle_9(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeLanguage_10 extends _i1.SmartFake implements _i10.Language { - _FakeLanguage_10(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeLanguage_10(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeSharedPreferencesAsync_11 extends _i1.SmartFake + implements _i11.SharedPreferencesAsync { + _FakeSharedPreferencesAsync_11(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } /// A class which mocks [WgerBaseProvider]. @@ -157,7 +178,7 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { as Uri); @override - _i11.Future fetch( + _i12.Future fetch( Uri? uri, { int? maxRetries = 3, Duration? initialDelay = const Duration(milliseconds: 250), @@ -175,12 +196,12 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #language: language, }, ), - returnValue: _i11.Future.value(), + returnValue: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future> fetchPaginated( + _i12.Future> fetchPaginated( Uri? uri, { String? language, Duration? timeout = const Duration(seconds: 15), @@ -191,54 +212,54 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { [uri], {#language: language, #timeout: timeout}, ), - returnValue: _i11.Future>.value([]), + returnValue: _i12.Future>.value([]), ) - as _i11.Future>); + as _i12.Future>); @override - _i11.Future> post( + _i12.Future> post( Map? data, Uri? uri, ) => (super.noSuchMethod( Invocation.method(#post, [data, uri]), - returnValue: _i11.Future>.value( + returnValue: _i12.Future>.value( {}, ), ) - as _i11.Future>); + as _i12.Future>); @override - _i11.Future> patch( + _i12.Future> patch( Map? data, Uri? uri, ) => (super.noSuchMethod( Invocation.method(#patch, [data, uri]), - returnValue: _i11.Future>.value( + returnValue: _i12.Future>.value( {}, ), ) - as _i11.Future>); + as _i12.Future>); @override - _i11.Future<_i3.Response> deleteRequest(String? url, int? id) => + _i12.Future<_i3.Response> deleteRequest(String? url, int? id) => (super.noSuchMethod( Invocation.method(#deleteRequest, [url, id]), - returnValue: _i11.Future<_i3.Response>.value( + returnValue: _i12.Future<_i3.Response>.value( _FakeResponse_3( this, Invocation.method(#deleteRequest, [url, id]), ), ), ) - as _i11.Future<_i3.Response>); + as _i12.Future<_i3.Response>); } /// A class which mocks [ExercisesProvider]. /// /// See the documentation for Mockito's code generation for more information. -class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { +class MockExercisesProvider extends _i1.Mock implements _i13.ExercisesProvider { MockExercisesProvider() { _i1.throwOnMissingStub(this); } @@ -334,10 +355,11 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { ); @override - set filteredExercises(List<_i6.Exercise>? newFilteredExercises) => super.noSuchMethod( - Invocation.setter(#filteredExercises, newFilteredExercises), - returnValueForMissingStub: null, - ); + set filteredExercises(List<_i6.Exercise>? newFilteredExercises) => + super.noSuchMethod( + Invocation.setter(#filteredExercises, newFilteredExercises), + returnValueForMissingStub: null, + ); @override set languages(List<_i10.Language>? languages) => super.noSuchMethod( @@ -347,16 +369,17 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { @override bool get hasListeners => - (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool); + (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) + as bool); @override - _i11.Future setFilters(_i12.Filters? newFilters) => + _i12.Future setFilters(_i13.Filters? newFilters) => (super.noSuchMethod( Invocation.method(#setFilters, [newFilters]), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override void initFilters() => super.noSuchMethod( @@ -365,13 +388,13 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { ); @override - _i11.Future findByFilters() => + _i12.Future findByFilters() => (super.noSuchMethod( Invocation.method(#findByFilters, []), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override void clear() => super.noSuchMethod( @@ -450,60 +473,60 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { as _i10.Language); @override - _i11.Future fetchAndSetCategoriesFromApi() => + _i12.Future fetchAndSetCategoriesFromApi() => (super.noSuchMethod( Invocation.method(#fetchAndSetCategoriesFromApi, []), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetMusclesFromApi() => + _i12.Future fetchAndSetMusclesFromApi() => (super.noSuchMethod( Invocation.method(#fetchAndSetMusclesFromApi, []), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetEquipmentsFromApi() => + _i12.Future fetchAndSetEquipmentsFromApi() => (super.noSuchMethod( Invocation.method(#fetchAndSetEquipmentsFromApi, []), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetLanguagesFromApi() => + _i12.Future fetchAndSetLanguagesFromApi() => (super.noSuchMethod( Invocation.method(#fetchAndSetLanguagesFromApi, []), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetAllExercises() => + _i12.Future fetchAndSetAllExercises() => (super.noSuchMethod( Invocation.method(#fetchAndSetAllExercises, []), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future<_i6.Exercise?> fetchAndSetExercise(int? exerciseId) => + _i12.Future<_i6.Exercise?> fetchAndSetExercise(int? exerciseId) => (super.noSuchMethod( Invocation.method(#fetchAndSetExercise, [exerciseId]), - returnValue: _i11.Future<_i6.Exercise?>.value(), + returnValue: _i12.Future<_i6.Exercise?>.value(), ) - as _i11.Future<_i6.Exercise?>); + as _i12.Future<_i6.Exercise?>); @override - _i11.Future<_i6.Exercise> handleUpdateExerciseFromApi( + _i12.Future<_i6.Exercise> handleUpdateExerciseFromApi( _i5.ExerciseDatabase? database, int? exerciseId, ) => @@ -512,7 +535,7 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { database, exerciseId, ]), - returnValue: _i11.Future<_i6.Exercise>.value( + returnValue: _i12.Future<_i6.Exercise>.value( _FakeExercise_6( this, Invocation.method(#handleUpdateExerciseFromApi, [ @@ -522,39 +545,39 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { ), ), ) - as _i11.Future<_i6.Exercise>); + as _i12.Future<_i6.Exercise>); @override - _i11.Future initCacheTimesLocalPrefs({bool? forceInit = false}) => + _i12.Future initCacheTimesLocalPrefs({bool? forceInit = false}) => (super.noSuchMethod( Invocation.method(#initCacheTimesLocalPrefs, [], { #forceInit: forceInit, }), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future clearAllCachesAndPrefs() => + _i12.Future clearAllCachesAndPrefs() => (super.noSuchMethod( Invocation.method(#clearAllCachesAndPrefs, []), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetInitialData() => + _i12.Future fetchAndSetInitialData() => (super.noSuchMethod( Invocation.method(#fetchAndSetInitialData, []), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future setExercisesFromDatabase( + _i12.Future setExercisesFromDatabase( _i5.ExerciseDatabase? database, { bool? forceDeleteCache = false, }) => @@ -564,58 +587,58 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { [database], {#forceDeleteCache: forceDeleteCache}, ), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future updateExerciseCache(_i5.ExerciseDatabase? database) => + _i12.Future updateExerciseCache(_i5.ExerciseDatabase? database) => (super.noSuchMethod( Invocation.method(#updateExerciseCache, [database]), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetMuscles(_i5.ExerciseDatabase? database) => + _i12.Future fetchAndSetMuscles(_i5.ExerciseDatabase? database) => (super.noSuchMethod( Invocation.method(#fetchAndSetMuscles, [database]), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetCategories(_i5.ExerciseDatabase? database) => + _i12.Future fetchAndSetCategories(_i5.ExerciseDatabase? database) => (super.noSuchMethod( Invocation.method(#fetchAndSetCategories, [database]), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetLanguages(_i5.ExerciseDatabase? database) => + _i12.Future fetchAndSetLanguages(_i5.ExerciseDatabase? database) => (super.noSuchMethod( Invocation.method(#fetchAndSetLanguages, [database]), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future fetchAndSetEquipments(_i5.ExerciseDatabase? database) => + _i12.Future fetchAndSetEquipments(_i5.ExerciseDatabase? database) => (super.noSuchMethod( Invocation.method(#fetchAndSetEquipments, [database]), - returnValue: _i11.Future.value(), - returnValueForMissingStub: _i11.Future.value(), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), ) - as _i11.Future); + as _i12.Future); @override - _i11.Future> searchExercise( + _i12.Future> searchExercise( String? name, { String? languageCode = 'en', bool? searchEnglish = false, @@ -626,18 +649,18 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { [name], {#languageCode: languageCode, #searchEnglish: searchEnglish}, ), - returnValue: _i11.Future>.value( + returnValue: _i12.Future>.value( <_i6.Exercise>[], ), ) - as _i11.Future>); + as _i12.Future>); @override - _i11.Future> searchExerciseWithSearchMode( + _i12.Future> searchExerciseWithSearchMode( String? name, { String? languageCode = 'en', - _i13.SearchLanguage? searchLanguage = _i13.SearchLanguage.currentAndEnglish, - _i14.ExerciseSearchMode? searchMode = _i14.ExerciseSearchMode.fulltext, + _i14.SearchLanguage? searchLanguage = _i14.SearchLanguage.currentAndEnglish, + _i15.ExerciseSearchMode? searchMode = _i15.ExerciseSearchMode.fulltext, Set<_i7.ExerciseCategory>? categories = const {}, }) => (super.noSuchMethod( @@ -651,20 +674,204 @@ class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider { #categories: categories, }, ), - returnValue: _i11.Future>.value( + returnValue: _i12.Future>.value( <_i6.Exercise>[], ), ) - as _i11.Future>); + as _i12.Future>); + + @override + void addListener(_i16.VoidCallback? listener) => super.noSuchMethod( + Invocation.method(#addListener, [listener]), + returnValueForMissingStub: null, + ); + + @override + void removeListener(_i16.VoidCallback? listener) => super.noSuchMethod( + Invocation.method(#removeListener, [listener]), + returnValueForMissingStub: null, + ); + + @override + void dispose() => super.noSuchMethod( + Invocation.method(#dispose, []), + returnValueForMissingStub: null, + ); + + @override + void notifyListeners() => super.noSuchMethod( + Invocation.method(#notifyListeners, []), + returnValueForMissingStub: null, + ); +} + +/// A class which mocks [UserProvider]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserProvider extends _i1.Mock implements _i17.UserProvider { + MockUserProvider() { + _i1.throwOnMissingStub(this); + } + + @override + _i18.ThemeMode get themeMode => + (super.noSuchMethod( + Invocation.getter(#themeMode), + returnValue: _i18.ThemeMode.system, + ) + as _i18.ThemeMode); + + @override + _i4.WgerBaseProvider get baseProvider => + (super.noSuchMethod( + Invocation.getter(#baseProvider), + returnValue: _FakeWgerBaseProvider_4( + this, + Invocation.getter(#baseProvider), + ), + ) + as _i4.WgerBaseProvider); + + @override + _i11.SharedPreferencesAsync get prefs => + (super.noSuchMethod( + Invocation.getter(#prefs), + returnValue: _FakeSharedPreferencesAsync_11( + this, + Invocation.getter(#prefs), + ), + ) + as _i11.SharedPreferencesAsync); + + @override + List<_i17.DashboardWidget> get dashboardWidgets => + (super.noSuchMethod( + Invocation.getter(#dashboardWidgets), + returnValue: <_i17.DashboardWidget>[], + ) + as List<_i17.DashboardWidget>); + + @override + List<_i17.DashboardWidget> get allDashboardWidgets => + (super.noSuchMethod( + Invocation.getter(#allDashboardWidgets), + returnValue: <_i17.DashboardWidget>[], + ) + as List<_i17.DashboardWidget>); + + @override + set themeMode(_i18.ThemeMode? value) => super.noSuchMethod( + Invocation.setter(#themeMode, value), + returnValueForMissingStub: null, + ); + + @override + set userLocale(_i16.Locale? value) => super.noSuchMethod( + Invocation.setter(#userLocale, value), + returnValueForMissingStub: null, + ); + + @override + set prefs(_i11.SharedPreferencesAsync? value) => super.noSuchMethod( + Invocation.setter(#prefs, value), + returnValueForMissingStub: null, + ); + + @override + set profile(_i19.Profile? value) => super.noSuchMethod( + Invocation.setter(#profile, value), + returnValueForMissingStub: null, + ); + + @override + bool get hasListeners => + (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) + as bool); + + @override + void clear() => super.noSuchMethod( + Invocation.method(#clear, []), + returnValueForMissingStub: null, + ); + + @override + bool isDashboardWidgetVisible(_i17.DashboardWidget? key) => + (super.noSuchMethod( + Invocation.method(#isDashboardWidgetVisible, [key]), + returnValue: false, + ) + as bool); + + @override + _i12.Future setDashboardWidgetVisible( + _i17.DashboardWidget? key, + bool? visible, + ) => + (super.noSuchMethod( + Invocation.method(#setDashboardWidgetVisible, [key, visible]), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), + ) + as _i12.Future); + + @override + _i12.Future setDashboardOrder(int? oldIndex, int? newIndex) => + (super.noSuchMethod( + Invocation.method(#setDashboardOrder, [oldIndex, newIndex]), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), + ) + as _i12.Future); + + @override + void setThemeMode(_i18.ThemeMode? mode) => super.noSuchMethod( + Invocation.method(#setThemeMode, [mode]), + returnValueForMissingStub: null, + ); + + @override + _i12.Future setUserLocale(_i16.Locale? locale) => + (super.noSuchMethod( + Invocation.method(#setUserLocale, [locale]), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), + ) + as _i12.Future); + + @override + _i12.Future saveProfile() => + (super.noSuchMethod( + Invocation.method(#saveProfile, []), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), + ) + as _i12.Future); + + @override + _i12.Future verifyEmail() => + (super.noSuchMethod( + Invocation.method(#verifyEmail, []), + returnValue: _i12.Future.value(), + returnValueForMissingStub: _i12.Future.value(), + ) + as _i12.Future); + + @override + _i12.Future isMetric() => + (super.noSuchMethod( + Invocation.method(#isMetric, []), + returnValue: _i12.Future.value(false), + ) + as _i12.Future); @override - void addListener(_i15.VoidCallback? listener) => super.noSuchMethod( + void addListener(_i16.VoidCallback? listener) => super.noSuchMethod( Invocation.method(#addListener, [listener]), returnValueForMissingStub: null, ); @override - void removeListener(_i15.VoidCallback? listener) => super.noSuchMethod( + void removeListener(_i16.VoidCallback? listener) => super.noSuchMethod( Invocation.method(#removeListener, [listener]), returnValueForMissingStub: null, ); diff --git a/test/routine/routines_screen_test.dart b/test/routine/routines_screen_test.dart index 6c7740588..3a4465143 100644 --- a/test/routine/routines_screen_test.dart +++ b/test/routine/routines_screen_test.dart @@ -29,6 +29,7 @@ import 'package:wger/models/workouts/routine.dart'; import 'package:wger/providers/base_provider.dart'; import 'package:wger/providers/exercises.dart'; import 'package:wger/providers/routines.dart'; +import 'package:wger/providers/user.dart'; import 'package:wger/screens/form_screen.dart'; import 'package:wger/screens/routine_list_screen.dart'; import 'package:wger/widgets/nutrition/forms.dart'; @@ -36,9 +37,10 @@ import 'package:wger/widgets/routines/forms/routine.dart'; import 'routines_screen_test.mocks.dart'; -@GenerateMocks([WgerBaseProvider]) +@GenerateMocks([WgerBaseProvider, UserProvider]) void main() { var mockBaseProvider = MockWgerBaseProvider(); + var mockUserProvider = MockUserProvider(); final testExercisesProvider = ExercisesProvider( mockBaseProvider, database: ExerciseDatabase.inMemory(NativeDatabase.memory()), @@ -61,6 +63,7 @@ void main() { create: (context) => RoutinesProvider( mockBaseProvider, testExercisesProvider, + mockUserProvider, [ Routine( id: 1, diff --git a/test/routine/routines_screen_test.mocks.dart b/test/routine/routines_screen_test.mocks.dart index e76067c8f..88c113d15 100644 --- a/test/routine/routines_screen_test.mocks.dart +++ b/test/routine/routines_screen_test.mocks.dart @@ -3,12 +3,17 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i5; +import 'dart:async' as _i6; +import 'dart:ui' as _i9; +import 'package:flutter/material.dart' as _i8; import 'package:http/http.dart' as _i3; import 'package:mockito/mockito.dart' as _i1; +import 'package:shared_preferences/shared_preferences.dart' as _i5; +import 'package:wger/models/user/profile.dart' as _i10; import 'package:wger/providers/auth.dart' as _i2; import 'package:wger/providers/base_provider.dart' as _i4; +import 'package:wger/providers/user.dart' as _i7; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -26,19 +31,35 @@ import 'package:wger/providers/base_provider.dart' as _i4; // ignore_for_file: invalid_use_of_internal_member class _FakeAuthProvider_0 extends _i1.SmartFake implements _i2.AuthProvider { - _FakeAuthProvider_0(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeAuthProvider_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeClient_1 extends _i1.SmartFake implements _i3.Client { - _FakeClient_1(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeClient_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeUri_2 extends _i1.SmartFake implements Uri { - _FakeUri_2(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeUri_2(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } class _FakeResponse_3 extends _i1.SmartFake implements _i3.Response { - _FakeResponse_3(Object parent, Invocation parentInvocation) : super(parent, parentInvocation); + _FakeResponse_3(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeWgerBaseProvider_4 extends _i1.SmartFake + implements _i4.WgerBaseProvider { + _FakeWgerBaseProvider_4(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeSharedPreferencesAsync_5 extends _i1.SmartFake + implements _i5.SharedPreferencesAsync { + _FakeSharedPreferencesAsync_5(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); } /// A class which mocks [WgerBaseProvider]. @@ -116,7 +137,7 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { as Uri); @override - _i5.Future fetch( + _i6.Future fetch( Uri? uri, { int? maxRetries = 3, Duration? initialDelay = const Duration(milliseconds: 250), @@ -134,12 +155,12 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { #language: language, }, ), - returnValue: _i5.Future.value(), + returnValue: _i6.Future.value(), ) - as _i5.Future); + as _i6.Future); @override - _i5.Future> fetchPaginated( + _i6.Future> fetchPaginated( Uri? uri, { String? language, Duration? timeout = const Duration(seconds: 15), @@ -150,43 +171,227 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider { [uri], {#language: language, #timeout: timeout}, ), - returnValue: _i5.Future>.value([]), + returnValue: _i6.Future>.value([]), ) - as _i5.Future>); + as _i6.Future>); @override - _i5.Future> post(Map? data, Uri? uri) => + _i6.Future> post(Map? data, Uri? uri) => (super.noSuchMethod( Invocation.method(#post, [data, uri]), - returnValue: _i5.Future>.value( + returnValue: _i6.Future>.value( {}, ), ) - as _i5.Future>); + as _i6.Future>); @override - _i5.Future> patch( + _i6.Future> patch( Map? data, Uri? uri, ) => (super.noSuchMethod( Invocation.method(#patch, [data, uri]), - returnValue: _i5.Future>.value( + returnValue: _i6.Future>.value( {}, ), ) - as _i5.Future>); + as _i6.Future>); @override - _i5.Future<_i3.Response> deleteRequest(String? url, int? id) => + _i6.Future<_i3.Response> deleteRequest(String? url, int? id) => (super.noSuchMethod( Invocation.method(#deleteRequest, [url, id]), - returnValue: _i5.Future<_i3.Response>.value( + returnValue: _i6.Future<_i3.Response>.value( _FakeResponse_3( this, Invocation.method(#deleteRequest, [url, id]), ), ), ) - as _i5.Future<_i3.Response>); + as _i6.Future<_i3.Response>); +} + +/// A class which mocks [UserProvider]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserProvider extends _i1.Mock implements _i7.UserProvider { + MockUserProvider() { + _i1.throwOnMissingStub(this); + } + + @override + _i8.ThemeMode get themeMode => + (super.noSuchMethod( + Invocation.getter(#themeMode), + returnValue: _i8.ThemeMode.system, + ) + as _i8.ThemeMode); + + @override + _i4.WgerBaseProvider get baseProvider => + (super.noSuchMethod( + Invocation.getter(#baseProvider), + returnValue: _FakeWgerBaseProvider_4( + this, + Invocation.getter(#baseProvider), + ), + ) + as _i4.WgerBaseProvider); + + @override + _i5.SharedPreferencesAsync get prefs => + (super.noSuchMethod( + Invocation.getter(#prefs), + returnValue: _FakeSharedPreferencesAsync_5( + this, + Invocation.getter(#prefs), + ), + ) + as _i5.SharedPreferencesAsync); + + @override + List<_i7.DashboardWidget> get dashboardWidgets => + (super.noSuchMethod( + Invocation.getter(#dashboardWidgets), + returnValue: <_i7.DashboardWidget>[], + ) + as List<_i7.DashboardWidget>); + + @override + List<_i7.DashboardWidget> get allDashboardWidgets => + (super.noSuchMethod( + Invocation.getter(#allDashboardWidgets), + returnValue: <_i7.DashboardWidget>[], + ) + as List<_i7.DashboardWidget>); + + @override + set themeMode(_i8.ThemeMode? value) => super.noSuchMethod( + Invocation.setter(#themeMode, value), + returnValueForMissingStub: null, + ); + + @override + set userLocale(_i9.Locale? value) => super.noSuchMethod( + Invocation.setter(#userLocale, value), + returnValueForMissingStub: null, + ); + + @override + set prefs(_i5.SharedPreferencesAsync? value) => super.noSuchMethod( + Invocation.setter(#prefs, value), + returnValueForMissingStub: null, + ); + + @override + set profile(_i10.Profile? value) => super.noSuchMethod( + Invocation.setter(#profile, value), + returnValueForMissingStub: null, + ); + + @override + bool get hasListeners => + (super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) + as bool); + + @override + void clear() => super.noSuchMethod( + Invocation.method(#clear, []), + returnValueForMissingStub: null, + ); + + @override + bool isDashboardWidgetVisible(_i7.DashboardWidget? key) => + (super.noSuchMethod( + Invocation.method(#isDashboardWidgetVisible, [key]), + returnValue: false, + ) + as bool); + + @override + _i6.Future setDashboardWidgetVisible( + _i7.DashboardWidget? key, + bool? visible, + ) => + (super.noSuchMethod( + Invocation.method(#setDashboardWidgetVisible, [key, visible]), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future setDashboardOrder(int? oldIndex, int? newIndex) => + (super.noSuchMethod( + Invocation.method(#setDashboardOrder, [oldIndex, newIndex]), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + void setThemeMode(_i8.ThemeMode? mode) => super.noSuchMethod( + Invocation.method(#setThemeMode, [mode]), + returnValueForMissingStub: null, + ); + + @override + _i6.Future setUserLocale(_i9.Locale? locale) => + (super.noSuchMethod( + Invocation.method(#setUserLocale, [locale]), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future saveProfile() => + (super.noSuchMethod( + Invocation.method(#saveProfile, []), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future verifyEmail() => + (super.noSuchMethod( + Invocation.method(#verifyEmail, []), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) + as _i6.Future); + + @override + _i6.Future isMetric() => + (super.noSuchMethod( + Invocation.method(#isMetric, []), + returnValue: _i6.Future.value(false), + ) + as _i6.Future); + + @override + void addListener(_i9.VoidCallback? listener) => super.noSuchMethod( + Invocation.method(#addListener, [listener]), + returnValueForMissingStub: null, + ); + + @override + void removeListener(_i9.VoidCallback? listener) => super.noSuchMethod( + Invocation.method(#removeListener, [listener]), + returnValueForMissingStub: null, + ); + + @override + void dispose() => super.noSuchMethod( + Invocation.method(#dispose, []), + returnValueForMissingStub: null, + ); + + @override + void notifyListeners() => super.noSuchMethod( + Invocation.method(#notifyListeners, []), + returnValueForMissingStub: null, + ); } diff --git a/test/user/provider_test.dart b/test/user/provider_test.dart index cc83fea6d..2187968a5 100644 --- a/test/user/provider_test.dart +++ b/test/user/provider_test.dart @@ -70,7 +70,7 @@ void main() { group('house keeping', () { test('should clear the profile list with clear()', () async { // arrange - await userProvider.fetchAndSetProfile(); + await userProvider.isMetric(); // assert expect(userProvider.profile, isNot(null)); @@ -87,7 +87,7 @@ void main() { group('profile', () { test('Loading the profile from the server works', () async { // arrange - await userProvider.fetchAndSetProfile(); + await userProvider.isMetric(); // assert expect(userProvider.profile!.username, 'admin'); @@ -98,7 +98,7 @@ void main() { test('Sending the verify email works', () async { // arrange - await userProvider.fetchAndSetProfile(); + await userProvider.isMetric(); await userProvider.verifyEmail(); // assert