Add tests for the getExercise method

This commit is contained in:
Roland Geider
2022-05-11 17:29:28 +02:00
parent 34e0854c68
commit 1fd1aed848
7 changed files with 56 additions and 19 deletions

View File

@@ -127,8 +127,11 @@ class ExerciseBase extends Equatable {
/// but we can't make sure that no local installation hasn't deleted
/// the entry in English.
Exercise getExercise(String language) {
// If the language is in the form en-US, take the language code only
final languageCode = language.split('-')[0];
return exercises.firstWhere(
(e) => e.languageObj.shortName == language,
(e) => e.languageObj.shortName == languageCode,
orElse: () => exercises.firstWhere(
(e) => e.languageObj.shortName == LANGUAGE_SHORT_ENGLISH,
orElse: () => exercises.first,

View File

@@ -98,6 +98,9 @@ class ExercisesProvider with ChangeNotifier {
List<Muscle> get muscles => [..._muscles];
List<Equipment> get equipment => [..._equipment];
List<Language> get languages => [..._languages];
set languages(List<Language> languages) {
_languages = languages;
}
// Initialize filters for exercises search in exercises list
void _initFilters() {
@@ -323,20 +326,22 @@ class ExercisesProvider with ChangeNotifier {
exercise.notes =
exerciseData['notes'].map((e) => Comment.fromJson(e)).toList().cast<Comment>();
exercise.baseId = baseData['id'];
exercise.language = findLanguageById(exerciseData['language']);
exercises.add(exercise);
}
final exerciseBase = ExerciseBase(
id: baseData['id'],
uuid: baseData['uuid'],
creationDate: null,
//creationDate: toDate(baseData['creation_date']),
musclesSecondary: musclesSecondary.cast<Muscle>(),
muscles: musclesPrimary.cast<Muscle>(),
equipment: equipment.cast<Equipment>(),
category: category,
images: images.cast<ExerciseImage>(),
exercises: exercises);
id: baseData['id'],
uuid: baseData['uuid'],
creationDate: null,
//creationDate: toDate(baseData['creation_date']),
musclesSecondary: musclesSecondary.cast<Muscle>(),
muscles: musclesPrimary.cast<Muscle>(),
equipment: equipment.cast<Equipment>(),
category: category,
images: images.cast<ExerciseImage>(),
exercises: exercises,
);
return exerciseBase;
}

View File

@@ -8,7 +8,7 @@ import '../../test_data/exercises.dart';
import '../fixtures/fixture_reader.dart';
import '../measurements/measurement_provider_test.mocks.dart';
main() {
void main() {
late MockWgerBaseProvider mockBaseProvider;
late ExercisesProvider provider;
@@ -28,6 +28,7 @@ main() {
mockBaseProvider = MockWgerBaseProvider();
provider = ExercisesProvider(mockBaseProvider);
provider.exerciseBases = getTestExerciseBases();
provider.languages = [tLanguage1, tLanguage2, tLanguage3];
// Mock base info response
when(
@@ -83,7 +84,14 @@ main() {
'49a159e1-1e00-409a-81c9-b4d4489fbd67'
]);
expect(base.exercises[0].name, '2 Handed Kettlebell Swing');
final exercise1 = base.exercises[0];
expect(exercise1.name, '2 Handed Kettlebell Swing');
expect(exercise1.languageObj.shortName, 'en');
expect(exercise1.notes[0].comment, "it's important to do the exercise correctly");
expect(exercise1.notes[1].comment, 'put a lot of effort into this exercise');
expect(exercise1.notes[2].comment, 'have fun');
expect(exercise1.alias[0].alias, 'double handed kettlebell');
expect(exercise1.alias[1].alias, 'Kettlebell russian style');
expect(base.exercises[1].name, 'Kettlebell Con Dos Manos');
expect(base.exercises[2].name, 'Zweihändiges Kettlebell');
});

View File

@@ -14,7 +14,7 @@ import '../../test_data/exercises.dart' as data;
import '../fixtures/fixture_reader.dart';
import '../measurements/measurement_provider_test.mocks.dart';
main() {
void main() {
late MockWgerBaseProvider mockBaseProvider;
late ExercisesProvider provider;

View File

@@ -0,0 +1,21 @@
import 'package:flutter_test/flutter_test.dart';
import '../../test_data/exercises.dart';
void main() {
group('Model tests', () {
test('test getExercise', () async {
// arrange and act
final base = getTestExerciseBases()[0];
// assert
expect(base.getExercise('en').id, 2);
expect(base.getExercise('en-UK').id, 2);
expect(base.getExercise('de').id, 1);
expect(base.getExercise('de-AT').id, 1);
expect(base.getExercise('fr').id, 3);
expect(base.getExercise('fr-FR').id, 3);
expect(base.getExercise('pt').id, 2); // English again
});
});
}

View File

@@ -159,7 +159,7 @@
}
],
"creation_date": "2022-03-14",
"language": 4,
"language": 3,
"license": 2,
"license_author": "tester McTestface"
},

View File

@@ -119,7 +119,7 @@ final tExercise4 = Exercise(
uuid: 'a3e96c1d-b35f-4b0e-9cf4-ca37666cf521',
creationDate: DateTime(2021, 4, 1),
name: 'test exercise 4',
description: 'The man in black fled across the desert, and the gunslinger followed',
description: 'The story so far: in the beginning, the universe was created',
baseId: tBase3.id,
language: tLanguage1,
);
@@ -129,7 +129,7 @@ final tExercise5 = Exercise(
uuid: '8c49a816-2247-4116-94bb-b5c0ce09c609',
creationDate: DateTime(2021, 4, 1),
name: 'test exercise 5',
description: 'The man in black fled across the desert, and the gunslinger followed',
description: 'I am an invisible man',
baseId: tBase3.id,
language: tLanguage2,
);
@@ -138,8 +138,8 @@ final tExercise6 = Exercise(
id: 6,
uuid: '259a637e-957f-4fe1-b61b-f56e3793ebcd',
creationDate: DateTime(2021, 4, 1),
name: 'test exercise 5',
description: 'The man in black fled across the desert, and the gunslinger followed',
name: 'test exercise 6',
description: 'It was a bright cold day in April, and the clocks were striking thirteen',
baseId: tBase3.id,
language: tLanguage2,
);