Filter by exercise bases in overview

This commit is contained in:
Roland Geider
2022-02-02 19:12:01 +01:00
parent 8e800b5097
commit d78fa35de8
18 changed files with 351 additions and 319 deletions

View File

@@ -19,7 +19,6 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:wger/models/exercises/category.dart';
import 'package:wger/models/exercises/comment.dart';
import 'package:wger/models/exercises/equipment.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/exercises/image.dart';
@@ -84,7 +83,6 @@ class ExerciseBase extends Equatable {
List<Muscle>? musclesSecondary,
List<Equipment>? equipment,
List<ExerciseImage>? images,
List<Comment>? tips,
ExerciseCategory? category}) {
this.images = images ?? [];
this.equipment = equipment ?? [];
@@ -92,10 +90,27 @@ class ExerciseBase extends Equatable {
this.muscles = muscles ?? [];
if (category != null) {
this.category = category;
this.categoryId = category.id;
categoryId = category.id;
}
}
/// Returns exercises for the given language
///
/// If no translation is found, English will be returned
///
/// TODO: don't hard code language code
/// TODO: don't just return the first exercise (this won't be necessary anymore
/// when we cleanup the database)
Exercise getExercises(String language) {
return exercises.firstWhere(
(e) => e.language.shortName == language,
orElse: () => exercises.firstWhere(
(e) => e.language.shortName == 'en',
orElse: () => exercises.first,
),
);
}
ExerciseImage? get getMainImage {
try {
return images.firstWhere((image) => image.isMain);
@@ -105,7 +120,7 @@ class ExerciseBase extends Equatable {
}
set setCategory(ExerciseCategory category) {
this.categoryId = category.id;
categoryId = category.id;
this.category = category;
}

View File

@@ -58,12 +58,15 @@ class ExercisesProvider with ChangeNotifier {
static const _languageUrlPath = 'language';
List<ExerciseBase> _exerciseBases = [];
set exerciseBases(List<ExerciseBase> exercisesBases) {
_exerciseBases = exercisesBases;
}
List<ExerciseCategory> _categories = [];
List<Muscle> _muscles = [];
List<Equipment> _equipment = [];
List<Language> _languages = [];
List<Variation> _variations = [];
List<Exercise> _exercises = [];
set exercises(List<Exercise> exercises) {
_exercises = exercises;
@@ -76,20 +79,17 @@ class ExercisesProvider with ChangeNotifier {
await findByFilters();
}
List<Exercise>? _filteredExercises = [];
List<Exercise>? get filteredExercises => _filteredExercises;
set filteredExercises(List<Exercise>? newFilteredExercises) {
_filteredExercises = newFilteredExercises;
List<ExerciseBase> _filteredExerciseBases = [];
List<ExerciseBase> get filteredExerciseBases => _filteredExerciseBases;
set filteredExerciseBases(List<ExerciseBase> newFilteredExercises) {
_filteredExerciseBases = newFilteredExercises;
notifyListeners();
}
List<Exercise>? getFilteredExercisesByLanguage(int languageId) {
return _filteredExercises!.where((e) => e.languageId == languageId).toList();
}
ExercisesProvider(this.baseProvider);
List<Exercise> get items => [..._exercises];
List<ExerciseBase> get bases => [..._exerciseBases];
List<ExerciseCategory> get categories => [..._categories];
List<Muscle> get muscles => [..._muscles];
List<Equipment> get equipment => [..._equipment];
@@ -126,23 +126,26 @@ class ExercisesProvider with ChangeNotifier {
Future<void> findByFilters() async {
// Filters not initialized
if (filters == null) {
filteredExercises = [];
filteredExerciseBases = [];
return;
}
// Filters are initialized and nothing is marked
if (filters!.isNothingMarked && filters!.searchTerm.length <= 1) {
filteredExercises = items;
filteredExerciseBases = _exerciseBases;
return;
}
filteredExercises = null;
filteredExerciseBases = [];
final filteredItems =
filters!.searchTerm.length <= 1 ? items : await searchExercise(filters!.searchTerm);
List<ExerciseBase> filteredItems = _exerciseBases;
if (filters!.searchTerm.length > 1) {
final exercises = await searchExercise(filters!.searchTerm);
filteredItems = exercises.map((e) => e.base).toList();
}
// Filter by exercise category and equipment (REPLACE WITH HTTP REQUEST)
filteredExercises = filteredItems.where((exercise) {
filteredExerciseBases = filteredItems.where((exercise) {
final bool isInAnyCategory = filters!.exerciseCategories.selected.contains(exercise.category);
final bool doesContainAnyEquipment = filters!.equipment.selected.any(
@@ -415,7 +418,7 @@ class ExercisesProvider with ChangeNotifier {
/// to invalidate it as a result
Future<void> checkExerciseCacheVersion() async {
final prefs = await SharedPreferences.getInstance();
if (prefs.containsKey(PREFS_EXERCISE_CACHE_VERSION)) {
if (false && prefs.containsKey(PREFS_EXERCISE_CACHE_VERSION)) {
final cacheVersion = prefs.getInt(PREFS_EXERCISE_CACHE_VERSION);
if (cacheVersion! != CACHE_VERSION) {
prefs.remove(PREFS_EXERCISES);

View File

@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:provider/provider.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/exercises/base.dart';
import 'package:wger/providers/exercises.dart';
import 'package:wger/widgets/core/app_bar.dart';
import 'package:wger/widgets/exercises/filter_row.dart';
@@ -21,7 +21,7 @@ class _ExercisesScreenState extends State<ExercisesScreen> {
@override
Widget build(BuildContext context) {
//final size = MediaQuery.of(context).size;
final exercisesList = Provider.of<ExercisesProvider>(context).filteredExercises;
final exercisesList = Provider.of<ExercisesProvider>(context).filteredExerciseBases;
return Scaffold(
appBar: WgerAppBar(AppLocalizations.of(context).exercises),
@@ -37,7 +37,7 @@ class _ExercisesScreenState extends State<ExercisesScreen> {
child: CircularProgressIndicator(),
),
)
: _ExercisesList(exercisesList: exercisesList),
: _ExercisesList(exerciseBaseList: exercisesList),
),
],
),
@@ -54,10 +54,10 @@ class _ExercisesScreenState extends State<ExercisesScreen> {
class _ExercisesList extends StatelessWidget {
const _ExercisesList({
Key? key,
required this.exercisesList,
required this.exerciseBaseList,
}) : super(key: key);
final List<Exercise> exercisesList;
final List<ExerciseBase> exerciseBaseList;
@override
Widget build(BuildContext context) {
@@ -68,17 +68,19 @@ class _ExercisesList extends StatelessWidget {
thickness: 1,
);
},
itemCount: exercisesList.length,
itemCount: exerciseBaseList.length,
itemBuilder: (context, index) {
final exercise = exercisesList[index];
return ExerciseListTile(exercise: exercise);
final exercise = exerciseBaseList[index];
return ExerciseListTile(
exercise: exercise.getExercises(Localizations.localeOf(context).languageCode),
);
/*
return Container(
height: size.height * 0.175,
child: ExerciseListTile(exercise: exercise),
);
*/
*/
},
);
}

View File

@@ -49,7 +49,8 @@ class ExerciseListTile extends StatelessWidget {
),
),
),
trailing: Text(exercise.language.shortName),
trailing:
Text('${exercise.language.shortName} base: ${exercise.baseId}, exId: ${exercise.id}'),
title: Text(
exercise.name,
//style: theme.textTheme.headline6,
@@ -57,7 +58,7 @@ class ExerciseListTile extends StatelessWidget {
maxLines: 2,
),
subtitle: Text(
exercise.category.name,
'${exercise.category.name} / ${exercise.equipment.map((e) => e.name).toList().join(', ')}',
),
onTap: () {
Navigator.pushNamed(context, ExerciseDetailScreen.routeName, arguments: exercise);

View File

@@ -1,71 +1,68 @@
import 'dart:convert';
import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.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/models/exercises/category.dart';
import 'package:wger/models/exercises/equipment.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/exercises/language.dart';
import 'package:wger/models/exercises/muscle.dart';
import 'package:wger/providers/exercises.dart';
import '../../test_data/exercises.dart' as data;
import '../fixtures/fixture_reader.dart';
import '../measurements/measurement_provider_test.mocks.dart';
import '../../test_data/exercises.dart' as data;
main() {
late MockWgerBaseProvider mockBaseProvider;
late ExercisesProvider provider;
String categoryUrl = 'exercisecategory';
String muscleUrl = 'muscle';
String equipmentUrl = 'equipment';
String languageUrl = 'language';
String exerciseBaseUrl = 'exercise-base';
String searchExerciseUrl = 'exercise/search';
const String categoryUrl = 'exercisecategory';
const String muscleUrl = 'muscle';
const String equipmentUrl = 'equipment';
const String languageUrl = 'language';
const String searchExerciseUrl = 'exercise/search';
Uri tCategoryEntriesUri = Uri(
final Uri tCategoryEntriesUri = Uri(
scheme: 'http',
host: 'localhost',
path: 'api/v2/' + categoryUrl + '/',
path: 'api/v2/$categoryUrl/',
);
Uri tMuscleEntriesUri = Uri(
final Uri tMuscleEntriesUri = Uri(
scheme: 'http',
host: 'localhost',
path: 'api/v2/' + muscleUrl + '/',
path: 'api/v2/$muscleUrl/',
);
Uri tEquipmentEntriesUri = Uri(
final Uri tEquipmentEntriesUri = Uri(
scheme: 'http',
host: 'localhost',
path: 'api/v2/' + equipmentUrl + '/',
path: 'api/v2/$equipmentUrl/',
);
Uri tLanguageEntriesUri = Uri(
final Uri tLanguageEntriesUri = Uri(
scheme: 'http',
host: 'localhost',
path: 'api/v2/' + languageUrl + '/',
path: 'api/v2/$languageUrl/',
);
Uri tSearchByNameUri = Uri(
final Uri tSearchByNameUri = Uri(
scheme: 'http',
host: 'localhost',
path: 'api/v2/$searchExerciseUrl/',
);
final category1 = ExerciseCategory(id: 1, name: 'Arms');
final muscle1 = Muscle(id: 1, name: 'Biceps brachii', isFront: true);
final equipment1 = Equipment(id: 1, name: 'Barbell');
final language1 = Language(id: 1, shortName: 'de', fullName: 'Deutsch');
const category1 = ExerciseCategory(id: 1, name: 'Arms');
const muscle1 = Muscle(id: 1, name: 'Biceps brachii', isFront: true);
const equipment1 = Equipment(id: 1, name: 'Barbell');
const language1 = Language(id: 1, shortName: 'de', fullName: 'Deutsch');
Map<String, dynamic> tCategoryMap = jsonDecode(fixture('exercise_category_entries.json'));
Map<String, dynamic> tMuscleMap = jsonDecode(fixture('exercise_muscles_entries.json'));
Map<String, dynamic> tEquipmentMap = jsonDecode(fixture('exercise_equipment_entries.json'));
Map<String, dynamic> tLanguageMap = jsonDecode(fixture('exercise_language_entries.json'));
final Map<String, dynamic> tCategoryMap = jsonDecode(fixture('exercise_category_entries.json'));
final Map<String, dynamic> tMuscleMap = jsonDecode(fixture('exercise_muscles_entries.json'));
final Map<String, dynamic> tEquipmentMap = jsonDecode(fixture('exercise_equipment_entries.json'));
final Map<String, dynamic> tLanguageMap = jsonDecode(fixture('exercise_language_entries.json'));
setUp(() {
mockBaseProvider = MockWgerBaseProvider();
@@ -171,7 +168,7 @@ main() {
// assert
verifyNever(provider.baseProvider.fetch(tSearchByNameUri));
expect(provider.filteredExercises, isEmpty);
expect(provider.filteredExerciseBases, isEmpty);
});
group('Filters are not null', () {
@@ -184,28 +181,30 @@ main() {
equipment: FilterCategory<Equipment>(title: 'Equipment', items: {}),
);
provider.exercises = data.getExercise();
provider.exercises = data.getTestExercises();
provider.exerciseBases = data.getTestExerciseBases();
});
test('Nothing is selected with no search term', () async {
// arrange
Filters currentFilters = filters;
final Filters currentFilters = filters;
// act
await provider.setFilters(currentFilters);
// assert
verifyNever(provider.baseProvider.fetch(tSearchByNameUri));
expect(
provider.filteredExercises,
data.getExercise(),
provider.filteredExerciseBases,
data.getTestExerciseBases(),
);
});
test('A muscle is selected with no search term. Should find results', () async {
// arrange
Filters tFilters = filters.copyWith(
exerciseCategories: filters.exerciseCategories.copyWith(items: {category1: true}),
final Filters tFilters = filters.copyWith(
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory1: true}),
);
// act
@@ -213,13 +212,13 @@ main() {
// assert
verifyNever(provider.baseProvider.fetch(tSearchByNameUri));
expect(provider.filteredExercises, [data.getExercise()[0]]);
expect(provider.filteredExerciseBases, [data.getTestExercises()[0].base]);
});
test('A muscle is selected with no search term. Should not find results', () async {
// arragne
// arrange
Filters tFilters = filters.copyWith(
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.category4: true}),
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory4: true}),
);
// act
@@ -227,13 +226,13 @@ main() {
// assert
verifyNever(provider.baseProvider.fetch(tSearchByNameUri));
expect(provider.filteredExercises, isEmpty);
expect(provider.filteredExerciseBases, isEmpty);
});
test('An equipment is selected with no search term. Should find results', () async {
// arragne
Filters tFilters = filters.copyWith(
equipment: filters.equipment.copyWith(items: {data.equipment1: true}),
// arrange
final Filters tFilters = filters.copyWith(
equipment: filters.equipment.copyWith(items: {data.tEquipment1: true}),
);
// act
@@ -241,13 +240,13 @@ main() {
// assert
verifyNever(provider.baseProvider.fetch(tSearchByNameUri));
expect(provider.filteredExercises, [data.getExercise()[0]]);
expect(provider.filteredExerciseBases, [data.getTestExerciseBases()[0]]);
});
test('An equipment is selected with no search term. Should not find results', () async {
// arragne
Filters tFilters = filters.copyWith(
equipment: filters.equipment.copyWith(items: {data.equipment3: true}),
// arrange
final Filters tFilters = filters.copyWith(
equipment: filters.equipment.copyWith(items: {data.tEquipment3: true}),
);
// act
@@ -255,14 +254,14 @@ main() {
// assert
verifyNever(provider.baseProvider.fetch(tSearchByNameUri));
expect(provider.filteredExercises, isEmpty);
expect(provider.filteredExerciseBases, isEmpty);
});
test('A muscle and equipment is selected and there is a match', () async {
// arrange
Filters tFilters = filters.copyWith(
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.category2: true}),
equipment: filters.equipment.copyWith(items: {data.equipment2: true}),
final Filters tFilters = filters.copyWith(
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory2: true}),
equipment: filters.equipment.copyWith(items: {data.tEquipment2: true}),
);
// act
@@ -270,13 +269,13 @@ main() {
// assert
verifyNever(provider.baseProvider.fetch(tSearchByNameUri));
expect(provider.filteredExercises, [data.getExercise()[1]]);
expect(provider.filteredExerciseBases, [data.getTestExerciseBases()[1]]);
});
test('A muscle and equipment is selected but no match', () async {
// arrange
Filters tFilters = filters.copyWith(
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.category2: true}),
final Filters tFilters = filters.copyWith(
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory2: true}),
equipment: filters.equipment.copyWith(items: {equipment1: true}),
);
@@ -285,14 +284,14 @@ main() {
// assert
verifyNever(provider.baseProvider.fetch(tSearchByNameUri));
expect(provider.filteredExercises, isEmpty);
expect(provider.filteredExerciseBases, isEmpty);
});
group('Search term', () {
late Uri tSearchByNameUri;
setUp(() {
String tSearchTerm = 'press';
String tSearchLanguage = 'en';
final String tSearchTerm = 'press';
final String tSearchLanguage = 'en';
Map<String, dynamic> query = {'term': tSearchTerm, 'language': tSearchLanguage};
tSearchByNameUri = Uri(
scheme: 'http',
@@ -300,7 +299,7 @@ main() {
path: 'api/v2/$searchExerciseUrl/',
queryParameters: query,
);
Map<String, dynamic> tSearchResponse =
final Map<String, dynamic> tSearchResponse =
jsonDecode(fixture('exercise_search_entries.json'));
// Mock exercise search
@@ -315,20 +314,23 @@ main() {
test('Should find results from search term', () async {
// arrange
Filters tFilters = filters.copyWith(searchTerm: 'press');
final Filters tFilters = filters.copyWith(searchTerm: 'press');
// act
await provider.setFilters(tFilters);
// assert
verify(provider.baseProvider.fetch(tSearchByNameUri)).called(1);
expect(provider.filteredExercises, [data.getExercise()[0], data.getExercise()[1]]);
expect(
provider.filteredExerciseBases,
[data.getTestExerciseBases()[0], data.getTestExerciseBases()[1]],
);
});
test('Should find items from selection but should filter them by search term', () async {
// arrange
Filters tFilters = filters.copyWith(
final Filters tFilters = filters.copyWith(
searchTerm: 'press',
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.category3: true}),
exerciseCategories: filters.exerciseCategories.copyWith(items: {data.tCategory3: true}),
);
// act
@@ -336,7 +338,7 @@ main() {
// assert
verify(provider.baseProvider.fetch(tSearchByNameUri)).called(1);
expect(provider.filteredExercises, isEmpty);
expect(provider.filteredExerciseBases, isEmpty);
});
});
});

View File

@@ -38,7 +38,7 @@ void main() {
supportedLocales: AppLocalizations.supportedLocales,
navigatorKey: GlobalKey<NavigatorState>(),
home: Scaffold(
body: ExerciseDetail(getExercise()[0]),
body: ExerciseDetail(getTestExercises()[0]),
),
),
);

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.15 from annotations
// Mocks generated by Mockito 5.0.17 from annotations
// in wger/test/gallery/gallery_screen_test.dart.
// Do not manually edit this file.
@@ -19,6 +19,7 @@ import 'package:wger/providers/gallery.dart' as _i4;
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
class _FakeAuthProvider_0 extends _i1.Fake implements _i2.AuthProvider {}
@@ -115,8 +116,6 @@ class MockGalleryProvider extends _i1.Mock implements _i4.GalleryProvider {
returnValue: Future<_i3.Response>.value(_FakeResponse_3()))
as _i6.Future<_i3.Response>);
@override
String toString() => super.toString();
@override
void addListener(_i8.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);

View File

@@ -23,13 +23,11 @@ import 'package:wger/providers/exercises.dart' as _i8;
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
class _FakeWgerBaseProvider_0 extends _i1.Fake implements _i2.WgerBaseProvider {
}
class _FakeWgerBaseProvider_0 extends _i1.Fake implements _i2.WgerBaseProvider {}
class _FakeExercise_1 extends _i1.Fake implements _i3.Exercise {}
class _FakeExerciseCategory_2 extends _i1.Fake implements _i4.ExerciseCategory {
}
class _FakeExerciseCategory_2 extends _i1.Fake implements _i4.ExerciseCategory {}
class _FakeEquipment_3 extends _i1.Fake implements _i5.Equipment {}
@@ -47,45 +45,43 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
@override
_i2.WgerBaseProvider get baseProvider =>
(super.noSuchMethod(Invocation.getter(#baseProvider),
returnValue: _FakeWgerBaseProvider_0()) as _i2.WgerBaseProvider);
(super.noSuchMethod(Invocation.getter(#baseProvider), returnValue: _FakeWgerBaseProvider_0())
as _i2.WgerBaseProvider);
@override
set exercises(List<_i3.Exercise>? exercises) =>
super.noSuchMethod(Invocation.setter(#exercises, exercises),
super.noSuchMethod(Invocation.setter(#exercises, exercises), returnValueForMissingStub: null);
@override
set filteredExerciseBases(List<_i3.Exercise>? newfilteredExercises) =>
super.noSuchMethod(Invocation.setter(#filteredExercises, newfilteredExercises),
returnValueForMissingStub: null);
@override
set filteredExercises(List<_i3.Exercise>? newfilteredExercises) => super
.noSuchMethod(Invocation.setter(#filteredExercises, newfilteredExercises),
returnValueForMissingStub: null);
@override
List<_i3.Exercise> get items => (super.noSuchMethod(Invocation.getter(#items),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
List<_i3.Exercise> get items =>
(super.noSuchMethod(Invocation.getter(#items), returnValue: <_i3.Exercise>[])
as List<_i3.Exercise>);
@override
List<_i4.ExerciseCategory> get categories =>
(super.noSuchMethod(Invocation.getter(#categories),
returnValue: <_i4.ExerciseCategory>[]) as List<_i4.ExerciseCategory>);
(super.noSuchMethod(Invocation.getter(#categories), returnValue: <_i4.ExerciseCategory>[])
as List<_i4.ExerciseCategory>);
@override
bool get hasListeners =>
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false)
as bool);
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool);
@override
_i9.Future<void> setFilters(_i8.Filters? newFilters) =>
(super.noSuchMethod(Invocation.method(#setFilters, [newFilters]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
@override
_i9.Future<void> findByFilters() =>
(super.noSuchMethod(Invocation.method(#findByFilters, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
_i9.Future<void> findByFilters() => (super.noSuchMethod(Invocation.method(#findByFilters, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
@override
List<_i3.Exercise> findByCategory(_i4.ExerciseCategory? category) =>
(super.noSuchMethod(Invocation.method(#findByCategory, [category]),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
@override
_i3.Exercise findExerciseById(int? id) =>
(super.noSuchMethod(Invocation.method(#findExerciseById, [id]),
returnValue: _FakeExercise_1()) as _i3.Exercise);
_i3.Exercise findExerciseById(int? id) => (super
.noSuchMethod(Invocation.method(#findExerciseById, [id]), returnValue: _FakeExercise_1())
as _i3.Exercise);
@override
_i4.ExerciseCategory findCategoryById(int? id) =>
(super.noSuchMethod(Invocation.method(#findCategoryById, [id]),
@@ -96,12 +92,12 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
returnValue: _FakeEquipment_3()) as _i5.Equipment);
@override
_i6.Muscle findMuscleById(int? id) =>
(super.noSuchMethod(Invocation.method(#findMuscleById, [id]),
returnValue: _FakeMuscle_4()) as _i6.Muscle);
(super.noSuchMethod(Invocation.method(#findMuscleById, [id]), returnValue: _FakeMuscle_4())
as _i6.Muscle);
@override
_i7.Language findLanguageById(int? id) =>
(super.noSuchMethod(Invocation.method(#findLanguageById, [id]),
returnValue: _FakeLanguage_5()) as _i7.Language);
_i7.Language findLanguageById(int? id) => (super
.noSuchMethod(Invocation.method(#findLanguageById, [id]), returnValue: _FakeLanguage_5())
as _i7.Language);
@override
_i9.Future<void> fetchAndSetCategories() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetCategories, []),
@@ -130,23 +126,19 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
@override
_i9.Future<_i3.Exercise> fetchAndSetExercise(int? exerciseId) =>
(super.noSuchMethod(Invocation.method(#fetchAndSetExercise, [exerciseId]),
returnValue: Future<_i3.Exercise>.value(_FakeExercise_1()))
as _i9.Future<_i3.Exercise>);
returnValue: Future<_i3.Exercise>.value(_FakeExercise_1())) as _i9.Future<_i3.Exercise>);
@override
List<_i10.ExerciseBase> mapImages(
dynamic data, List<_i10.ExerciseBase>? bases) =>
List<_i10.ExerciseBase> mapImages(dynamic data, List<_i10.ExerciseBase>? bases) =>
(super.noSuchMethod(Invocation.method(#mapImages, [data, bases]),
returnValue: <_i10.ExerciseBase>[]) as List<_i10.ExerciseBase>);
@override
List<_i10.ExerciseBase> setBaseData(
dynamic data, List<_i3.Exercise>? exercises) =>
List<_i10.ExerciseBase> setBaseData(dynamic data, List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#setBaseData, [data, exercises]),
returnValue: <_i10.ExerciseBase>[]) as List<_i10.ExerciseBase>);
@override
List<dynamic> mapBases(
List<_i10.ExerciseBase>? bases, List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#mapBases, [bases, exercises]),
returnValue: <dynamic>[]) as List<dynamic>);
List<dynamic> mapBases(List<_i10.ExerciseBase>? bases, List<_i3.Exercise>? exercises) => (super
.noSuchMethod(Invocation.method(#mapBases, [bases, exercises]), returnValue: <dynamic>[])
as List<dynamic>);
@override
List<_i3.Exercise> mapLanguages(List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#mapLanguages, [exercises]),
@@ -170,27 +162,23 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
@override
_i9.Future<List<_i3.Exercise>> searchExercise(String? name,
[String? languageCode = r'en']) =>
(super.noSuchMethod(
Invocation.method(#searchExercise, [name, languageCode]),
_i9.Future<List<_i3.Exercise>> searchExercise(String? name, [String? languageCode = r'en']) =>
(super.noSuchMethod(Invocation.method(#searchExercise, [name, languageCode]),
returnValue: Future<List<_i3.Exercise>>.value(<_i3.Exercise>[]))
as _i9.Future<List<_i3.Exercise>>);
@override
String toString() => super.toString();
@override
void addListener(_i11.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);
void addListener(_i11.VoidCallback? listener) => super
.noSuchMethod(Invocation.method(#addListener, [listener]), returnValueForMissingStub: null);
@override
void removeListener(_i11.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#removeListener, [listener]),
returnValueForMissingStub: null);
@override
void dispose() => super.noSuchMethod(Invocation.method(#dispose, []),
returnValueForMissingStub: null);
void dispose() =>
super.noSuchMethod(Invocation.method(#dispose, []), returnValueForMissingStub: null);
@override
void notifyListeners() =>
super.noSuchMethod(Invocation.method(#notifyListeners, []),
returnValueForMissingStub: null);
super.noSuchMethod(Invocation.method(#notifyListeners, []), returnValueForMissingStub: null);
}

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.15 from annotations
// Mocks generated by Mockito 5.0.17 from annotations
// in wger/test/measurements/measurement_categories_screen_test.dart.
// Do not manually edit this file.
@@ -18,6 +18,7 @@ import 'package:wger/providers/measurement.dart' as _i4;
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
class _FakeWgerBaseProvider_0 extends _i1.Fake implements _i2.WgerBaseProvider {
}
@@ -104,8 +105,6 @@ class MockMeasurementProvider extends _i1.Mock
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i5.Future<void>);
@override
String toString() => super.toString();
@override
void addListener(_i7.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.15 from annotations
// Mocks generated by Mockito 5.0.17 from annotations
// in wger/test/measurements/measurement_provider_test.dart.
// Do not manually edit this file.
@@ -16,6 +16,7 @@ import 'package:wger/providers/base_provider.dart' as _i4;
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
class _FakeAuthProvider_0 extends _i1.Fake implements _i2.AuthProvider {}
@@ -77,6 +78,4 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider {
(super.noSuchMethod(Invocation.method(#deleteRequest, [url, id]),
returnValue: Future<_i3.Response>.value(_FakeResponse_3()))
as _i5.Future<_i3.Response>);
@override
String toString() => super.toString();
}

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.15 from annotations
// Mocks generated by Mockito 5.0.17 from annotations
// in wger/test/nutrition/nutritional_plan_form_test.dart.
// Do not manually edit this file.
@@ -21,6 +21,7 @@ import 'package:wger/providers/nutrition.dart' as _i8;
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
class _FakeAuthProvider_0 extends _i1.Fake implements _i2.AuthProvider {}
@@ -213,8 +214,6 @@ class MockNutritionPlansProvider extends _i1.Mock
returnValue: Future<_i3.Response>.value(_FakeResponse_7()))
as _i9.Future<_i3.Response>);
@override
String toString() => super.toString();
@override
void addListener(_i10.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.15 from annotations
// Mocks generated by Mockito 5.0.17 from annotations
// in wger/test/other/base_provider_test.dart.
// Do not manually edit this file.
@@ -19,6 +19,7 @@ import 'package:mockito/mockito.dart' as _i1;
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
class _FakeResponse_0 extends _i1.Fake implements _i2.Response {}
@@ -103,6 +104,4 @@ class MockClient extends _i1.Mock implements _i4.Client {
@override
void close() => super.noSuchMethod(Invocation.method(#close, []),
returnValueForMissingStub: null);
@override
String toString() => super.toString();
}

View File

@@ -45,9 +45,9 @@ void main() {
final mockExerciseProvider = MockExercisesProvider();
final WorkoutPlan workoutPlan = getWorkout();
when(mockExerciseProvider.findExerciseById(1)).thenReturn(getExercise()[0]);
when(mockExerciseProvider.findExerciseById(2)).thenReturn(getExercise()[1]);
when(mockExerciseProvider.findExerciseById(3)).thenReturn(getExercise()[2]);
when(mockExerciseProvider.findExerciseById(1)).thenReturn(getTestExercises()[0]);
when(mockExerciseProvider.findExerciseById(2)).thenReturn(getTestExercises()[1]);
when(mockExerciseProvider.findExerciseById(3)).thenReturn(getTestExercises()[2]);
return ChangeNotifierProvider<WorkoutPlansProvider>(
create: (context) => WorkoutPlansProvider(
@@ -144,7 +144,7 @@ void main() {
//
// Pause
//
expect(find.text('0:00'), findsOneWidget);
expect(find.text('0:01'), findsOneWidget);
expect(find.byType(TimerWidget), findsOneWidget);
expect(find.byIcon(Icons.close), findsOneWidget);
expect(find.byIcon(Icons.menu), findsOneWidget);
@@ -165,7 +165,7 @@ void main() {
//
// Pause
//
expect(find.text('0:00'), findsOneWidget);
expect(find.text('0:01'), findsOneWidget);
expect(find.byType(TimerWidget), findsOneWidget);
expect(find.byIcon(Icons.chevron_left), findsOneWidget);
expect(find.byIcon(Icons.close), findsOneWidget);

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.15 from annotations
// Mocks generated by Mockito 5.0.17 from annotations
// in wger/test/workout/workout_form_test.dart.
// Do not manually edit this file.
@@ -26,6 +26,7 @@ import 'package:wger/providers/workout_plans.dart' as _i12;
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
class _FakeWeightUnit_0 extends _i1.Fake implements _i2.WeightUnit {}
@@ -281,8 +282,6 @@ class MockWorkoutPlansProvider extends _i1.Mock
returnValue: Future<_i5.Response>.value(_FakeResponse_11()))
as _i13.Future<_i5.Response>);
@override
String toString() => super.toString();
@override
void addListener(_i15.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);

View File

@@ -27,16 +27,16 @@ void main() {
final workout = getWorkout();
expect(workout.logs.length, 3);
final logExercise1 = workout.filterLogsByExercise(getExercise()[0]);
final logExercise1 = workout.filterLogsByExercise(getTestExercises()[0]);
expect(logExercise1.length, 2);
expect(logExercise1[0].id, 1);
expect(logExercise1[1].id, 2);
final logExercise2 = workout.filterLogsByExercise(getExercise()[1]);
final logExercise2 = workout.filterLogsByExercise(getTestExercises()[1]);
expect(logExercise2.length, 1);
expect(logExercise2[0].id, 3);
expect(workout.filterLogsByExercise(getExercise()[2]).length, 0);
expect(workout.filterLogsByExercise(getTestExercises()[2]).length, 0);
});
});
}

View File

@@ -1,12 +1,12 @@
// Mocks generated by Mockito 5.0.15 from annotations
// Mocks generated by Mockito 5.0.17 from annotations
// in wger/test/workout/workout_set_form_test.dart.
// Do not manually edit this file.
import 'dart:async' as _i9;
import 'dart:async' as _i10;
import 'dart:ui' as _i11;
import 'package:mockito/mockito.dart' as _i1;
import 'package:wger/models/exercises/base.dart' as _i10;
import 'package:wger/models/exercises/base.dart' as _i9;
import 'package:wger/models/exercises/category.dart' as _i4;
import 'package:wger/models/exercises/equipment.dart' as _i5;
import 'package:wger/models/exercises/exercise.dart' as _i3;
@@ -22,14 +22,13 @@ import 'package:wger/providers/exercises.dart' as _i8;
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
class _FakeWgerBaseProvider_0 extends _i1.Fake implements _i2.WgerBaseProvider {
}
class _FakeWgerBaseProvider_0 extends _i1.Fake implements _i2.WgerBaseProvider {}
class _FakeExercise_1 extends _i1.Fake implements _i3.Exercise {}
class _FakeExerciseCategory_2 extends _i1.Fake implements _i4.ExerciseCategory {
}
class _FakeExerciseCategory_2 extends _i1.Fake implements _i4.ExerciseCategory {}
class _FakeEquipment_3 extends _i1.Fake implements _i5.Equipment {}
@@ -47,48 +46,77 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
@override
_i2.WgerBaseProvider get baseProvider =>
(super.noSuchMethod(Invocation.getter(#baseProvider),
returnValue: _FakeWgerBaseProvider_0()) as _i2.WgerBaseProvider);
(super.noSuchMethod(Invocation.getter(#baseProvider), returnValue: _FakeWgerBaseProvider_0())
as _i2.WgerBaseProvider);
@override
set exerciseBases(List<_i9.ExerciseBase>? exercisesBases) =>
super.noSuchMethod(Invocation.setter(#exerciseBases, exercisesBases),
returnValueForMissingStub: null);
@override
set exercises(List<_i3.Exercise>? exercises) =>
super.noSuchMethod(Invocation.setter(#exercises, exercises),
super.noSuchMethod(Invocation.setter(#exercises, exercises), returnValueForMissingStub: null);
@override
List<_i9.ExerciseBase> get filteredExerciseBases =>
(super.noSuchMethod(Invocation.getter(#filteredExercises), returnValue: <_i9.ExerciseBase>[])
as List<_i9.ExerciseBase>);
@override
set filteredExerciseBases(List<_i9.ExerciseBase>? newFilteredExercises) =>
super.noSuchMethod(Invocation.setter(#filteredExercises, newFilteredExercises),
returnValueForMissingStub: null);
@override
set filteredExercises(List<_i3.Exercise>? newfilteredExercises) => super
.noSuchMethod(Invocation.setter(#filteredExercises, newfilteredExercises),
returnValueForMissingStub: null);
List<_i3.Exercise> get items =>
(super.noSuchMethod(Invocation.getter(#items), returnValue: <_i3.Exercise>[])
as List<_i3.Exercise>);
@override
List<_i3.Exercise> get items => (super.noSuchMethod(Invocation.getter(#items),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
List<_i9.ExerciseBase> get bases =>
(super.noSuchMethod(Invocation.getter(#bases), returnValue: <_i9.ExerciseBase>[])
as List<_i9.ExerciseBase>);
@override
List<_i4.ExerciseCategory> get categories =>
(super.noSuchMethod(Invocation.getter(#categories),
returnValue: <_i4.ExerciseCategory>[]) as List<_i4.ExerciseCategory>);
(super.noSuchMethod(Invocation.getter(#categories), returnValue: <_i4.ExerciseCategory>[])
as List<_i4.ExerciseCategory>);
@override
List<_i6.Muscle> get muscles =>
(super.noSuchMethod(Invocation.getter(#muscles), returnValue: <_i6.Muscle>[])
as List<_i6.Muscle>);
@override
List<_i5.Equipment> get equipment =>
(super.noSuchMethod(Invocation.getter(#equipment), returnValue: <_i5.Equipment>[])
as List<_i5.Equipment>);
@override
List<_i7.Language> get languages =>
(super.noSuchMethod(Invocation.getter(#languages), returnValue: <_i7.Language>[])
as List<_i7.Language>);
@override
bool get hasListeners =>
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false)
as bool);
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool);
@override
_i9.Future<void> setFilters(_i8.Filters? newFilters) =>
_i10.Future<void> setFilters(_i8.Filters? newFilters) =>
(super.noSuchMethod(Invocation.method(#setFilters, [newFilters]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i9.Future<void> findByFilters() =>
(super.noSuchMethod(Invocation.method(#findByFilters, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
_i10.Future<void> findByFilters() => (super.noSuchMethod(Invocation.method(#findByFilters, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
void clear() => super.noSuchMethod(Invocation.method(#clear, []),
returnValueForMissingStub: null);
void clear() =>
super.noSuchMethod(Invocation.method(#clear, []), returnValueForMissingStub: null);
@override
List<_i3.Exercise> findByCategory(_i4.ExerciseCategory? category) =>
(super.noSuchMethod(Invocation.method(#findByCategory, [category]),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
@override
_i3.Exercise findExerciseById(int? id) =>
(super.noSuchMethod(Invocation.method(#findExerciseById, [id]),
returnValue: _FakeExercise_1()) as _i3.Exercise);
_i3.Exercise findExerciseById(int? id) => (super
.noSuchMethod(Invocation.method(#findExerciseById, [id]), returnValue: _FakeExercise_1())
as _i3.Exercise);
@override
List<_i3.Exercise> findExercisesByVariationId(int? id,
{int? exerciseIdToExclude, int? languageId}) =>
(super.noSuchMethod(
Invocation.method(#findExercisesByVariationId, [id],
{#exerciseIdToExclude: exerciseIdToExclude, #languageId: languageId}),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
@override
_i4.ExerciseCategory findCategoryById(int? id) =>
(super.noSuchMethod(Invocation.method(#findCategoryById, [id]),
@@ -99,57 +127,53 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
returnValue: _FakeEquipment_3()) as _i5.Equipment);
@override
_i6.Muscle findMuscleById(int? id) =>
(super.noSuchMethod(Invocation.method(#findMuscleById, [id]),
returnValue: _FakeMuscle_4()) as _i6.Muscle);
(super.noSuchMethod(Invocation.method(#findMuscleById, [id]), returnValue: _FakeMuscle_4())
as _i6.Muscle);
@override
_i7.Language findLanguageById(int? id) =>
(super.noSuchMethod(Invocation.method(#findLanguageById, [id]),
returnValue: _FakeLanguage_5()) as _i7.Language);
_i7.Language findLanguageById(int? id) => (super
.noSuchMethod(Invocation.method(#findLanguageById, [id]), returnValue: _FakeLanguage_5())
as _i7.Language);
@override
_i9.Future<void> fetchAndSetCategories() =>
_i10.Future<void> fetchAndSetCategories() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetCategories, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i9.Future<void> fetchAndSetVariations() =>
_i10.Future<void> fetchAndSetVariations() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetVariations, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i9.Future<void> fetchAndSetMuscles() =>
_i10.Future<void> fetchAndSetMuscles() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetMuscles, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i9.Future<void> fetchAndSetEquipment() =>
_i10.Future<void> fetchAndSetEquipment() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetEquipment, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i9.Future<void> fetchAndSetLanguages() =>
_i10.Future<void> fetchAndSetLanguages() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetLanguages, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i9.Future<_i3.Exercise> fetchAndSetExercise(int? exerciseId) =>
_i10.Future<_i3.Exercise> fetchAndSetExercise(int? exerciseId) =>
(super.noSuchMethod(Invocation.method(#fetchAndSetExercise, [exerciseId]),
returnValue: Future<_i3.Exercise>.value(_FakeExercise_1()))
as _i9.Future<_i3.Exercise>);
returnValue: Future<_i3.Exercise>.value(_FakeExercise_1())) as _i10.Future<_i3.Exercise>);
@override
List<_i10.ExerciseBase> mapImages(
dynamic data, List<_i10.ExerciseBase>? bases) =>
List<_i9.ExerciseBase> mapImages(dynamic data, List<_i9.ExerciseBase>? bases) =>
(super.noSuchMethod(Invocation.method(#mapImages, [data, bases]),
returnValue: <_i10.ExerciseBase>[]) as List<_i10.ExerciseBase>);
returnValue: <_i9.ExerciseBase>[]) as List<_i9.ExerciseBase>);
@override
List<_i10.ExerciseBase> setBaseData(
dynamic data, List<_i3.Exercise>? exercises) =>
List<_i9.ExerciseBase> setBaseData(dynamic data, List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#setBaseData, [data, exercises]),
returnValue: <_i10.ExerciseBase>[]) as List<_i10.ExerciseBase>);
returnValue: <_i9.ExerciseBase>[]) as List<_i9.ExerciseBase>);
@override
List<dynamic> mapBases(
List<_i10.ExerciseBase>? bases, List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#mapBases, [bases, exercises]),
returnValue: <dynamic>[]) as List<dynamic>);
List<dynamic> mapBases(List<_i9.ExerciseBase>? bases, List<_i3.Exercise>? exercises) => (super
.noSuchMethod(Invocation.method(#mapBases, [bases, exercises]), returnValue: <dynamic>[])
as List<dynamic>);
@override
List<_i3.Exercise> mapLanguages(List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#mapLanguages, [exercises]),
@@ -163,37 +187,31 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
(super.noSuchMethod(Invocation.method(#mapComments, [data, exercises]),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
@override
_i9.Future<void> checkExerciseCacheVersion() =>
_i10.Future<void> checkExerciseCacheVersion() =>
(super.noSuchMethod(Invocation.method(#checkExerciseCacheVersion, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i9.Future<void> fetchAndSetExercises() =>
_i10.Future<void> fetchAndSetExercises() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetExercises, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i9.Future<void>);
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i9.Future<List<_i3.Exercise>> searchExercise(String? name,
[String? languageCode = r'en']) =>
(super.noSuchMethod(
Invocation.method(#searchExercise, [name, languageCode]),
_i10.Future<List<_i3.Exercise>> searchExercise(String? name, [String? languageCode = r'en']) =>
(super.noSuchMethod(Invocation.method(#searchExercise, [name, languageCode]),
returnValue: Future<List<_i3.Exercise>>.value(<_i3.Exercise>[]))
as _i9.Future<List<_i3.Exercise>>);
as _i10.Future<List<_i3.Exercise>>);
@override
String toString() => super.toString();
@override
void addListener(_i11.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);
void addListener(_i11.VoidCallback? listener) => super
.noSuchMethod(Invocation.method(#addListener, [listener]), returnValueForMissingStub: null);
@override
void removeListener(_i11.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#removeListener, [listener]),
returnValueForMissingStub: null);
@override
void dispose() => super.noSuchMethod(Invocation.method(#dispose, []),
returnValueForMissingStub: null);
void dispose() =>
super.noSuchMethod(Invocation.method(#dispose, []), returnValueForMissingStub: null);
@override
void notifyListeners() =>
super.noSuchMethod(Invocation.method(#notifyListeners, []),
returnValueForMissingStub: null);
super.noSuchMethod(Invocation.method(#notifyListeners, []), returnValueForMissingStub: null);
}

View File

@@ -22,80 +22,89 @@ import 'package:wger/models/exercises/equipment.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/exercises/muscle.dart';
const muscle1 = Muscle(id: 1, name: 'Flutterus maximus', isFront: true);
const muscle2 = Muscle(id: 2, name: 'Biceps', isFront: true);
const muscle3 = Muscle(id: 3, name: 'Booty', isFront: false);
const tMuscle1 = Muscle(id: 1, name: 'Flutterus maximus', isFront: true);
const tMuscle2 = Muscle(id: 2, name: 'Biceps', isFront: true);
const tMuscle3 = Muscle(id: 3, name: 'Booty', isFront: false);
const category1 = ExerciseCategory(id: 1, name: 'Arms');
const category2 = ExerciseCategory(id: 2, name: 'Legs');
const category3 = ExerciseCategory(id: 3, name: 'Abs');
const category4 = ExerciseCategory(id: 4, name: 'Shoulders');
const tCategory1 = ExerciseCategory(id: 1, name: 'Arms');
const tCategory2 = ExerciseCategory(id: 2, name: 'Legs');
const tCategory3 = ExerciseCategory(id: 3, name: 'Abs');
const tCategory4 = ExerciseCategory(id: 4, name: 'Shoulders');
const equipment1 = Equipment(id: 1, name: 'Bench');
const equipment2 = Equipment(id: 1, name: 'Dumbbell');
const equipment3 = Equipment(id: 2, name: 'Matress');
const tEquipment1 = Equipment(id: 1, name: 'Bench');
const tEquipment2 = Equipment(id: 1, name: 'Dumbbell');
const tEquipment3 = Equipment(id: 2, name: 'Matress');
List<Exercise> getExercise() {
final base1 = ExerciseBase(
id: 1,
uuid: 'uuid1',
creationDate: DateTime(2021, 09, 01),
updateDate: DateTime(2021, 09, 10),
category: category1,
equipment: [equipment1, equipment2],
muscles: [muscle1, muscle2],
musclesSecondary: [muscle3],
);
final tBase1 = ExerciseBase(
id: 1,
uuid: 'uuid1',
creationDate: DateTime(2021, 09, 01),
updateDate: DateTime(2021, 09, 10),
category: tCategory1,
equipment: const [tEquipment1, tEquipment2],
muscles: const [tMuscle1, tMuscle2],
musclesSecondary: const [tMuscle3],
);
final exercise1 = Exercise(
id: 1,
baseId: 1,
uuid: 'uuid',
languageId: 1,
creationDate: DateTime(2021, 1, 15),
name: 'test exercise 1',
description: 'add clever text',
base: base1);
final tBase2 = ExerciseBase(
id: 2,
uuid: 'uuid2',
creationDate: DateTime(2021, 08, 01),
updateDate: DateTime(2021, 08, 10),
category: tCategory2,
equipment: const [tEquipment2],
muscles: const [tMuscle1],
musclesSecondary: const [tMuscle2],
);
final base2 = ExerciseBase(
id: 2,
uuid: 'uuid2',
creationDate: DateTime(2021, 08, 01),
updateDate: DateTime(2021, 08, 10),
category: category2,
equipment: [equipment2],
muscles: [muscle1],
musclesSecondary: [muscle2],
);
final exercise2 = Exercise(
id: 2,
baseId: 2,
uuid: '111-2222-44444',
languageId: 2,
creationDate: DateTime(2021, 1, 15),
name: 'test exercise 2',
description: 'Lorem ipsum etc',
base: base2);
final tBase3 = ExerciseBase(
id: 3,
uuid: 'uuid3',
creationDate: DateTime(2021, 08, 01),
updateDate: DateTime(2021, 08, 01),
category: tCategory3,
equipment: const [tEquipment2],
muscles: const [tMuscle1],
musclesSecondary: const [tMuscle2],
);
final base3 = ExerciseBase(
id: 3,
uuid: 'uuid3',
creationDate: DateTime(2021, 08, 01),
updateDate: DateTime(2021, 08, 01),
category: category3,
equipment: [equipment2],
muscles: [muscle1],
musclesSecondary: [muscle2],
);
final exercise3 = Exercise(
id: 3,
baseId: 2,
uuid: 'a3b6c7bb-9d22-4119-a5fc-818584d5e9bc',
languageId: 2,
creationDate: DateTime(2021, 4, 1),
name: 'test exercise 3',
description: 'The man in black fled across the desert, and the gunslinger followed',
base: base3);
final tExercise1 = Exercise(
id: 1,
baseId: 1,
uuid: 'uuid',
languageId: 1,
creationDate: DateTime(2021, 1, 15),
name: 'test exercise 1',
description: 'add clever text',
base: tBase1,
);
return [exercise1, exercise2, exercise3];
final tExercise2 = Exercise(
id: 2,
baseId: 2,
uuid: '111-2222-44444',
languageId: 2,
creationDate: DateTime(2021, 1, 15),
name: 'test exercise 2',
description: 'Lorem ipsum etc',
base: tBase2,
);
final tExercise3 = Exercise(
id: 3,
baseId: 2,
uuid: 'a3b6c7bb-9d22-4119-a5fc-818584d5e9bc',
languageId: 2,
creationDate: DateTime(2021, 4, 1),
name: 'test exercise 3',
description: 'The man in black fled across the desert, and the gunslinger followed',
base: tBase3,
);
List<Exercise> getTestExercises() {
return [tExercise1, tExercise2, tExercise3];
}
List<ExerciseBase> getTestExerciseBases() {
return getTestExercises().map((e) => e.base).toList();
}

View File

@@ -45,7 +45,7 @@ WorkoutPlan getWorkout() {
);
setting1.repetitionUnit = repetitionUnit1;
setting1.weightUnit = weightUnit1;
setting1.exercise = getExercise()[0];
setting1.exercise = getTestExercises()[0];
setting1.weight = 10;
final log1 = Log.empty()
@@ -55,7 +55,7 @@ WorkoutPlan getWorkout() {
..date = DateTime(2021, 5, 1)
..reps = 10
..workoutPlan = 1;
log1.exercise = getExercise()[0];
log1.exercise = getTestExercises()[0];
log1.weightUnit = weightUnit1;
log1.repetitionUnit = repetitionUnit1;
@@ -66,7 +66,7 @@ WorkoutPlan getWorkout() {
..date = DateTime(2021, 5, 1)
..reps = 12
..workoutPlan = 1;
log2.exercise = getExercise()[0];
log2.exercise = getTestExercises()[0];
log2.weightUnit = weightUnit1;
log2.repetitionUnit = repetitionUnit1;
@@ -77,7 +77,7 @@ WorkoutPlan getWorkout() {
..date = DateTime(2021, 5, 2)
..reps = 8
..workoutPlan = 1;
log3.exercise = getExercise()[1];
log3.exercise = getTestExercises()[1];
log3.weightUnit = weightUnit1;
log3.repetitionUnit = repetitionUnit1;
@@ -88,7 +88,7 @@ WorkoutPlan getWorkout() {
order: 1,
comment: 'Important to do exercises correctly',
);
set1.addExercise(getExercise()[0]);
set1.addExercise(getTestExercises()[0]);
set1.settings.add(setting1);
set1.settingsComputed = [setting1, setting1];