From 35a9dc046f5e91f8152dc69bafbbdb260324f0c7 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 27 Dec 2023 13:40:43 +0100 Subject: [PATCH] Add test for force initializing the cache dates --- lib/providers/exercises.dart | 13 +++-- test/exercises/exercise_provider_test.dart | 60 ++++++++++++++++++++++ 2 files changed, 66 insertions(+), 7 deletions(-) diff --git a/lib/providers/exercises.dart b/lib/providers/exercises.dart index 339be6f4..b997f1bb 100644 --- a/lib/providers/exercises.dart +++ b/lib/providers/exercises.dart @@ -391,7 +391,7 @@ class ExercisesProvider with ChangeNotifier { } } - Future initCacheTimesLocalPrefs() async { + Future initCacheTimesLocalPrefs({forceInit = false}) async { final prefs = await SharedPreferences.getInstance(); // TODO: The exercise data was previously saved in PREFS_EXERCISES. This @@ -404,16 +404,16 @@ class ExercisesProvider with ChangeNotifier { final initDate = DateTime(2023, 1, 1).toIso8601String(); - if (!prefs.containsKey(PREFS_LAST_UPDATED_MUSCLES)) { + if (forceInit || !prefs.containsKey(PREFS_LAST_UPDATED_MUSCLES)) { await prefs.setString(PREFS_LAST_UPDATED_MUSCLES, initDate); } - if (!prefs.containsKey(PREFS_LAST_UPDATED_EQUIPMENT)) { + if (forceInit || !prefs.containsKey(PREFS_LAST_UPDATED_EQUIPMENT)) { await prefs.setString(PREFS_LAST_UPDATED_EQUIPMENT, initDate); } - if (!prefs.containsKey(PREFS_LAST_UPDATED_LANGUAGES)) { + if (forceInit || !prefs.containsKey(PREFS_LAST_UPDATED_LANGUAGES)) { await prefs.setString(PREFS_LAST_UPDATED_LANGUAGES, initDate); } - if (!prefs.containsKey(PREFS_LAST_UPDATED_CATEGORIES)) { + if (forceInit || !prefs.containsKey(PREFS_LAST_UPDATED_CATEGORIES)) { await prefs.setString(PREFS_LAST_UPDATED_CATEGORIES, initDate); } } @@ -421,8 +421,7 @@ class ExercisesProvider with ChangeNotifier { Future clearAllCachesAndPrefs() async { final database = locator(); await database.deleteEverything(); - - await initCacheTimesLocalPrefs(); + await initCacheTimesLocalPrefs(forceInit: true); } /// Loads all needed data for the exercises from the local cache, or if not available, diff --git a/test/exercises/exercise_provider_test.dart b/test/exercises/exercise_provider_test.dart index 26961b8e..f9622ea8 100644 --- a/test/exercises/exercise_provider_test.dart +++ b/test/exercises/exercise_provider_test.dart @@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:wger/exceptions/no_such_entry_exception.dart'; +import 'package:wger/helpers/consts.dart'; import 'package:wger/models/exercises/category.dart'; import 'package:wger/models/exercises/equipment.dart'; import 'package:wger/models/exercises/muscle.dart'; @@ -83,6 +84,7 @@ void main() { setUp(() { mockBaseProvider = MockWgerBaseProvider(); provider = ExercisesProvider(mockBaseProvider); + SharedPreferences.setMockInitialValues({}); // Mock categories when(mockBaseProvider.makeUrl(categoryUrl)).thenReturn(tCategoryEntriesUri); @@ -368,4 +370,62 @@ void main() { }); }); }); + + group('local prefs', () { + test('initCacheTimesLocalPrefs correctly initalises the cache values', () async { + // arrange + const initValue = '2023-01-01T00:00:00.000'; + final prefs = await SharedPreferences.getInstance(); + + // 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); + }); + + test('calling initCacheTimesLocalPrefs again does nothing', () async { + // arrange + final prefs = await SharedPreferences.getInstance(); + 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 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); + }); + + test('calling initCacheTimesLocalPrefs with forceInit replaces the date', () async { + // arrange + final prefs = await SharedPreferences.getInstance(); + 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 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); + }); + }); }