From d31dc16bcf7e83cfd1ccf09282dc0646aa3387a2 Mon Sep 17 00:00:00 2001 From: Yashas H Majmudar Date: Sun, 23 Mar 2025 14:26:28 -0400 Subject: [PATCH] migration: migrated all instances of sharedPreferences to sharedPreferencesAsync for tests --- test/core/settings_test.dart | 3 +- test/exercises/exercise_provider_db_test.dart | 39 +++++++------- test/exercises/exercise_provider_test.dart | 51 ++++++++++--------- test/workout/routines_provider_test.dart | 8 ++- 4 files changed, 56 insertions(+), 45 deletions(-) diff --git a/test/core/settings_test.dart b/test/core/settings_test.dart index f293c4f0..ee6478cb 100644 --- a/test/core/settings_test.dart +++ b/test/core/settings_test.dart @@ -23,6 +23,7 @@ import 'package:mockito/mockito.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:wger/helpers/consts.dart'; +import 'package:wger/helpers/shared_preferences.dart'; import 'package:wger/l10n/generated/app_localizations.dart'; import 'package:wger/providers/base_provider.dart'; import 'package:wger/providers/exercises.dart'; @@ -39,7 +40,7 @@ import 'settings_test.mocks.dart'; WgerBaseProvider, SharedPreferencesAsync, ]) -void main() { +void main() async { final mockExerciseProvider = MockExercisesProvider(); final mockNutritionProvider = MockNutritionPlansProvider(); final mockSharedPreferences = MockSharedPreferencesAsync(); diff --git a/test/exercises/exercise_provider_db_test.dart b/test/exercises/exercise_provider_db_test.dart index 11b384cc..5df1522d 100644 --- a/test/exercises/exercise_provider_db_test.dart +++ b/test/exercises/exercise_provider_db_test.dart @@ -5,9 +5,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; +import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; import 'package:wger/database/exercises/exercise_database.dart'; import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/misc.dart'; +import 'package:wger/helpers/shared_preferences.dart'; import 'package:wger/models/exercises/exercise_api.dart'; import 'package:wger/models/exercises/muscle.dart'; import 'package:wger/providers/exercises.dart'; @@ -93,7 +96,7 @@ void main() { ); WidgetsFlutterBinding.ensureInitialized(); - SharedPreferences.setMockInitialValues({}); + SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); // Mock categories when(mockBaseProvider.makeUrl(categoryUrl)).thenReturn(tCategoryEntriesUri); @@ -136,14 +139,14 @@ void main() { group('Muscles', () { test('that fetched data from the API is written to the DB', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); // Act await provider.fetchAndSetMuscles(database); // Assert - final updateTime = DateTime.parse(prefs.getString(PREFS_LAST_UPDATED_MUSCLES)!); + final updateTime = DateTime.parse((await prefs.getString(PREFS_LAST_UPDATED_MUSCLES))!); final valid = DateTime.now().add(const Duration(days: ExercisesProvider.EXERCISE_CACHE_DAYS)); expect(updateTime.isSameDayAs(valid), true); @@ -168,7 +171,7 @@ void main() { test('that if there is already valid data in the DB, the API is not hit', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); final valid = DateTime.now().add(const Duration(days: 1)); @@ -185,7 +188,7 @@ void main() { await provider.fetchAndSetMuscles(database); // Assert - final updateTime = DateTime.parse(prefs.getString(PREFS_LAST_UPDATED_MUSCLES)!); + final updateTime = DateTime.parse((await prefs.getString(PREFS_LAST_UPDATED_MUSCLES))!); expect(updateTime.isSameDayAs(valid), true); expect(provider.muscles.length, 2); @@ -199,14 +202,14 @@ void main() { group('Languages', () { test('that fetched data from the API is written to the DB', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); // Act await provider.fetchAndSetLanguages(database); // Assert - final updateTime = DateTime.parse(prefs.getString(PREFS_LAST_UPDATED_LANGUAGES)!); + final updateTime = DateTime.parse((await prefs.getString(PREFS_LAST_UPDATED_LANGUAGES))!); final valid = DateTime.now().add(const Duration(days: ExercisesProvider.EXERCISE_CACHE_DAYS)); expect(updateTime.isSameDayAs(valid), true); @@ -235,7 +238,7 @@ void main() { test('that if there is already valid data in the DB, the API is not hit', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); final valid = DateTime.now().add(const Duration(days: 1)); @@ -252,7 +255,7 @@ void main() { await provider.fetchAndSetLanguages(database); // Assert - final updateTime = DateTime.parse(prefs.getString(PREFS_LAST_UPDATED_LANGUAGES)!); + final updateTime = DateTime.parse((await prefs.getString(PREFS_LAST_UPDATED_LANGUAGES))!); expect(updateTime.isSameDayAs(valid), true); expect(provider.languages.length, 2); @@ -265,14 +268,14 @@ void main() { group('Categories', () { test('that fetched data from the API is written to the DB', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); // Act await provider.fetchAndSetCategories(database); // Assert - final updateTime = DateTime.parse(prefs.getString(PREFS_LAST_UPDATED_CATEGORIES)!); + final updateTime = DateTime.parse((await prefs.getString(PREFS_LAST_UPDATED_CATEGORIES))!); final valid = DateTime.now().add(const Duration(days: ExercisesProvider.EXERCISE_CACHE_DAYS)); expect(updateTime.isSameDayAs(valid), true); @@ -293,7 +296,7 @@ void main() { test('that if there is already valid data in the DB, the API is not hit', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); final valid = DateTime.now().add(const Duration(days: 1)); @@ -310,7 +313,7 @@ void main() { await provider.fetchAndSetCategories(database); // Assert - final updateTime = DateTime.parse(prefs.getString(PREFS_LAST_UPDATED_CATEGORIES)!); + final updateTime = DateTime.parse((await prefs.getString(PREFS_LAST_UPDATED_CATEGORIES))!); expect(updateTime.isSameDayAs(valid), true); expect(provider.categories.length, 2); @@ -324,14 +327,14 @@ void main() { group('Equipment', () { test('that fetched data from the API is written to the DB', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); // Act await provider.fetchAndSetEquipments(database); // Assert - final updateTime = DateTime.parse(prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT)!); + final updateTime = DateTime.parse((await prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT))!); final valid = DateTime.now().add(const Duration(days: ExercisesProvider.EXERCISE_CACHE_DAYS)); expect(updateTime.isSameDayAs(valid), true); @@ -354,7 +357,7 @@ void main() { test('that if there is already valid data in the DB, the API is not hit', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); final valid = DateTime.now().add(const Duration(days: 1)); @@ -371,7 +374,7 @@ void main() { await provider.fetchAndSetEquipments(database); // Assert - final updateTime = DateTime.parse(prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT)!); + final updateTime = DateTime.parse((await prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT))!); expect(updateTime.isSameDayAs(valid), true); expect(provider.equipment.length, 2); @@ -385,7 +388,7 @@ void main() { group('Exercise cache DB', () { test('that if there is already valid data in the DB, the API is not hit', () async { // Arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; await provider.initCacheTimesLocalPrefs(); final valid = DateTime.now().add(const Duration(days: 1)); prefs.setString(PREFS_LAST_UPDATED_LANGUAGES, valid.toIso8601String()); diff --git a/test/exercises/exercise_provider_test.dart b/test/exercises/exercise_provider_test.dart index b970d115..bb516e71 100644 --- a/test/exercises/exercise_provider_test.dart +++ b/test/exercises/exercise_provider_test.dart @@ -5,9 +5,12 @@ import 'package:drift/native.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; +import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; import 'package:wger/database/exercises/exercise_database.dart'; import 'package:wger/exceptions/no_such_entry_exception.dart'; import 'package:wger/helpers/consts.dart'; +import 'package:wger/helpers/shared_preferences.dart'; import 'package:wger/models/exercises/category.dart'; import 'package:wger/models/exercises/equipment.dart'; import 'package:wger/models/exercises/muscle.dart'; @@ -97,7 +100,7 @@ void main() { ); provider.languages = [...testLanguages]; - SharedPreferences.setMockInitialValues({}); + SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); driftRuntimeOptions.dontWarnAboutMultipleDatabases = true; // Mock categories @@ -387,57 +390,57 @@ void main() { test('initCacheTimesLocalPrefs correctly initalises the cache values', () async { // arrange const initValue = '2023-01-01T00:00:00.000'; - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; // act await provider.initCacheTimesLocalPrefs(); // assert - expect(prefs.getString(PREFS_LAST_UPDATED_MUSCLES), initValue); - expect(prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT), initValue); - expect(prefs.getString(PREFS_LAST_UPDATED_CATEGORIES), initValue); - expect(prefs.getString(PREFS_LAST_UPDATED_LANGUAGES), initValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_MUSCLES), initValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT), initValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_CATEGORIES), initValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_LANGUAGES), initValue); }); test('calling initCacheTimesLocalPrefs again does nothing', () async { // arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; const newValue = '2023-10-10T01:18:35.000'; // act await provider.initCacheTimesLocalPrefs(); - prefs.setString(PREFS_LAST_UPDATED_MUSCLES, newValue); - prefs.setString(PREFS_LAST_UPDATED_EQUIPMENT, newValue); - prefs.setString(PREFS_LAST_UPDATED_CATEGORIES, newValue); - prefs.setString(PREFS_LAST_UPDATED_LANGUAGES, newValue); + await prefs.setString(PREFS_LAST_UPDATED_MUSCLES, newValue); + await prefs.setString(PREFS_LAST_UPDATED_EQUIPMENT, newValue); + await prefs.setString(PREFS_LAST_UPDATED_CATEGORIES, newValue); + await prefs.setString(PREFS_LAST_UPDATED_LANGUAGES, newValue); await provider.initCacheTimesLocalPrefs(); // Assert - expect(prefs.getString(PREFS_LAST_UPDATED_MUSCLES), newValue); - expect(prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT), newValue); - expect(prefs.getString(PREFS_LAST_UPDATED_CATEGORIES), newValue); - expect(prefs.getString(PREFS_LAST_UPDATED_LANGUAGES), newValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_MUSCLES), newValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT), newValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_CATEGORIES), newValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_LANGUAGES), newValue); }); test('calling initCacheTimesLocalPrefs with forceInit replaces the date', () async { // arrange - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; const initValue = '2023-01-01T00:00:00.000'; const newValue = '2023-10-10T01:18:35.000'; // act await provider.initCacheTimesLocalPrefs(); - prefs.setString(PREFS_LAST_UPDATED_MUSCLES, newValue); - prefs.setString(PREFS_LAST_UPDATED_EQUIPMENT, newValue); - prefs.setString(PREFS_LAST_UPDATED_CATEGORIES, newValue); - prefs.setString(PREFS_LAST_UPDATED_LANGUAGES, newValue); + await prefs.setString(PREFS_LAST_UPDATED_MUSCLES, newValue); + await prefs.setString(PREFS_LAST_UPDATED_EQUIPMENT, newValue); + await prefs.setString(PREFS_LAST_UPDATED_CATEGORIES, newValue); + await prefs.setString(PREFS_LAST_UPDATED_LANGUAGES, newValue); await provider.initCacheTimesLocalPrefs(forceInit: true); // Assert - expect(prefs.getString(PREFS_LAST_UPDATED_MUSCLES), initValue); - expect(prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT), initValue); - expect(prefs.getString(PREFS_LAST_UPDATED_CATEGORIES), initValue); - expect(prefs.getString(PREFS_LAST_UPDATED_LANGUAGES), initValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_MUSCLES), initValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_EQUIPMENT), initValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_CATEGORIES), initValue); + expect(await prefs.getString(PREFS_LAST_UPDATED_LANGUAGES), initValue); }); }); } diff --git a/test/workout/routines_provider_test.dart b/test/workout/routines_provider_test.dart index 8f16666f..1f8eb95c 100644 --- a/test/workout/routines_provider_test.dart +++ b/test/workout/routines_provider_test.dart @@ -24,8 +24,11 @@ import 'package:http/http.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; +import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; import 'package:wger/core/locator.dart'; import 'package:wger/helpers/consts.dart'; +import 'package:wger/helpers/shared_preferences.dart'; import 'package:wger/models/workouts/repetition_unit.dart'; import 'package:wger/models/workouts/routine.dart'; import 'package:wger/models/workouts/weight_unit.dart'; @@ -41,6 +44,7 @@ import 'routines_provider_test.mocks.dart'; @GenerateMocks([WgerBaseProvider, ExercisesProvider]) void main() { final mockBaseProvider = MockWgerBaseProvider(); + SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); setUpAll(() async { // Needs to be configured here, setUp runs on every test, setUpAll only once @@ -153,12 +157,12 @@ void main() { final exercisesProvider = ExercisesProvider(mockBaseProvider); WidgetsFlutterBinding.ensureInitialized(); SharedPreferences.setMockInitialValues({}); - final prefs = await SharedPreferences.getInstance(); + final prefs = PreferenceHelper.asyncPref; // Load the entries final provider = RoutinesProvider(mockBaseProvider, exercisesProvider, []); await provider.fetchAndSetUnits(); - final prefsJson = jsonDecode(prefs.getString(PREFS_WORKOUT_UNITS)!); + final prefsJson = jsonDecode((await prefs.getString(PREFS_WORKOUT_UNITS))!); expect(prefsJson['repetitionUnits'].length, 7); expect(prefsJson['weightUnit'].length, 6);