diff --git a/lib/models/exercises/base.dart b/lib/models/exercises/base.dart index 9f142a49..fafe561c 100644 --- a/lib/models/exercises/base.dart +++ b/lib/models/exercises/base.dart @@ -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, diff --git a/lib/providers/exercises.dart b/lib/providers/exercises.dart index 9ac9d416..d5598bfe 100644 --- a/lib/providers/exercises.dart +++ b/lib/providers/exercises.dart @@ -98,6 +98,9 @@ class ExercisesProvider with ChangeNotifier { List get muscles => [..._muscles]; List get equipment => [..._equipment]; List get languages => [..._languages]; + set languages(List 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(); 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(), - muscles: musclesPrimary.cast(), - equipment: equipment.cast(), - category: category, - images: images.cast(), - exercises: exercises); + id: baseData['id'], + uuid: baseData['uuid'], + creationDate: null, + //creationDate: toDate(baseData['creation_date']), + musclesSecondary: musclesSecondary.cast(), + muscles: musclesPrimary.cast(), + equipment: equipment.cast(), + category: category, + images: images.cast(), + exercises: exercises, + ); return exerciseBase; } diff --git a/test/exercises/exercise_provider_load_test.dart b/test/exercises/exercise_provider_load_test.dart index 512176e6..131cd971 100644 --- a/test/exercises/exercise_provider_load_test.dart +++ b/test/exercises/exercise_provider_load_test.dart @@ -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'); }); diff --git a/test/exercises/exercise_provider_test.dart b/test/exercises/exercise_provider_test.dart index c6370f68..cee3d8d8 100644 --- a/test/exercises/exercise_provider_test.dart +++ b/test/exercises/exercise_provider_test.dart @@ -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; diff --git a/test/exercises/model_exercisebase_test.dart b/test/exercises/model_exercisebase_test.dart new file mode 100644 index 00000000..2529ec83 --- /dev/null +++ b/test/exercises/model_exercisebase_test.dart @@ -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 + }); + }); +} diff --git a/test/fixtures/exercises/exercisebaseinfo_response.json b/test/fixtures/exercises/exercisebaseinfo_response.json index e4f947c3..ba63beba 100644 --- a/test/fixtures/exercises/exercisebaseinfo_response.json +++ b/test/fixtures/exercises/exercisebaseinfo_response.json @@ -159,7 +159,7 @@ } ], "creation_date": "2022-03-14", - "language": 4, + "language": 3, "license": 2, "license_author": "tester McTestface" }, diff --git a/test_data/exercises.dart b/test_data/exercises.dart index e0995ecc..b59d4295 100644 --- a/test_data/exercises.dart +++ b/test_data/exercises.dart @@ -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, );