migration: migrated all instances of sharedPreferences to sharedPreferencesAsync for tests

This commit is contained in:
Yashas H Majmudar
2025-03-23 14:26:28 -04:00
parent 529c63c92e
commit d31dc16bcf
4 changed files with 56 additions and 45 deletions

View File

@@ -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());

View File

@@ -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);
});
});
}