mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
Merge branch 'feature/flexible-routines' into Jackpkn-fix/gym-provider-navigation
This commit is contained in:
@@ -24,33 +24,35 @@ import 'package:wger/models/workouts/weight_unit.dart';
|
||||
|
||||
/// Returns the text representation for a single setting, used in the gym mode
|
||||
String repText(
|
||||
num? reps,
|
||||
RepetitionUnit repetitionUnitObj,
|
||||
num? repetitions,
|
||||
RepetitionUnit? repetitionUnitObj,
|
||||
num? weight,
|
||||
WeightUnit weightUnitObj,
|
||||
WeightUnit? weightUnitObj,
|
||||
String? rir,
|
||||
) {
|
||||
// TODO(x): how to (easily?) translate strings like the units or 'RiR'
|
||||
|
||||
final List<String> out = [];
|
||||
|
||||
if (reps != null) {
|
||||
out.add(formatNum(reps).toString());
|
||||
if (repetitions != null) {
|
||||
out.add(formatNum(repetitions).toString());
|
||||
|
||||
// The default repetition unit is 'reps', which we don't show unless there
|
||||
// is no weight defined so that we don't just output something like "8" but
|
||||
// rather "8 repetitions". If there is weight we want to output "8 x 50kg",
|
||||
// since the repetitions are implied. If other units are used, we always
|
||||
// print them
|
||||
if (repetitionUnitObj.id != REP_UNIT_REPETITIONS_ID || weight == 0 || weight == null) {
|
||||
out.add(repetitionUnitObj.name);
|
||||
if (repetitionUnitObj != null && repetitionUnitObj.id != REP_UNIT_REPETITIONS_ID ||
|
||||
weight == 0 ||
|
||||
weight == null) {
|
||||
out.add(repetitionUnitObj!.name);
|
||||
}
|
||||
}
|
||||
|
||||
if (weight != null && weight != 0) {
|
||||
out.add('×');
|
||||
out.add(formatNum(weight).toString());
|
||||
out.add(weightUnitObj.name);
|
||||
out.add(weightUnitObj!.name);
|
||||
}
|
||||
|
||||
if (rir != null && rir != '') {
|
||||
|
||||
@@ -11,7 +11,7 @@ import 'package:wger/models/exercises/video.dart';
|
||||
part 'exercise_api.freezed.dart';
|
||||
part 'exercise_api.g.dart';
|
||||
|
||||
/// Model for an exercise as returned from the exercisebaseinfo endpoint
|
||||
/// Model for an exercise as returned from the exerciseinfo endpoint
|
||||
///
|
||||
/// Basically this is just used as a convenience to create "real" exercise
|
||||
/// objects and nothing more
|
||||
|
||||
@@ -44,9 +44,6 @@ class BaseConfig {
|
||||
@JsonKey(required: true)
|
||||
late String step;
|
||||
|
||||
@JsonKey(required: true, name: 'need_log_to_apply')
|
||||
late bool needLogToApply;
|
||||
|
||||
@JsonKey(required: true, name: 'repeat')
|
||||
late bool repeat;
|
||||
|
||||
@@ -61,7 +58,6 @@ class BaseConfig {
|
||||
required this.value,
|
||||
this.operation = 'r',
|
||||
this.step = 'abs',
|
||||
this.needLogToApply = false,
|
||||
this.requirements = null,
|
||||
});
|
||||
|
||||
@@ -69,7 +65,6 @@ class BaseConfig {
|
||||
iteration = 1;
|
||||
operation = 'r';
|
||||
step = 'abs';
|
||||
needLogToApply = false;
|
||||
requirements = null;
|
||||
repeat = false;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ BaseConfig _$BaseConfigFromJson(Map<String, dynamic> json) {
|
||||
'value',
|
||||
'operation',
|
||||
'step',
|
||||
'need_log_to_apply',
|
||||
'repeat',
|
||||
'requirements'
|
||||
],
|
||||
@@ -29,7 +28,6 @@ BaseConfig _$BaseConfigFromJson(Map<String, dynamic> json) {
|
||||
value: stringOrIntToNum(json['value']),
|
||||
operation: json['operation'] as String? ?? 'r',
|
||||
step: json['step'] as String? ?? 'abs',
|
||||
needLogToApply: json['need_log_to_apply'] as bool? ?? false,
|
||||
requirements: json['requirements'] ?? null,
|
||||
);
|
||||
}
|
||||
@@ -40,7 +38,6 @@ Map<String, dynamic> _$BaseConfigToJson(BaseConfig instance) => <String, dynamic
|
||||
'value': instance.value,
|
||||
'operation': instance.operation,
|
||||
'step': instance.step,
|
||||
'need_log_to_apply': instance.needLogToApply,
|
||||
'repeat': instance.repeat,
|
||||
'requirements': instance.requirements,
|
||||
};
|
||||
|
||||
@@ -62,10 +62,10 @@ class Log {
|
||||
num? repetitionsTarget;
|
||||
|
||||
@JsonKey(required: true, name: 'repetitions_unit')
|
||||
late int repetitionsUnitId;
|
||||
late int? repetitionsUnitId;
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
late RepetitionUnit repetitionsUnitObj;
|
||||
late RepetitionUnit? repetitionsUnitObj;
|
||||
|
||||
@JsonKey(required: true, fromJson: stringToNum, toJson: numToString)
|
||||
late num? weight;
|
||||
@@ -74,10 +74,10 @@ class Log {
|
||||
num? weightTarget;
|
||||
|
||||
@JsonKey(required: true, name: 'weight_unit')
|
||||
late int weightUnitId;
|
||||
late int? weightUnitId;
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
late WeightUnit weightUnitObj;
|
||||
late WeightUnit? weightUnitObj;
|
||||
|
||||
@JsonKey(required: true, toJson: dateToYYYYMMDD)
|
||||
late DateTime date;
|
||||
@@ -111,14 +111,14 @@ class Log {
|
||||
exerciseId = base.id!;
|
||||
}
|
||||
|
||||
set weightUnit(WeightUnit weightUnit) {
|
||||
set weightUnit(WeightUnit? weightUnit) {
|
||||
weightUnitObj = weightUnit;
|
||||
weightUnitId = weightUnit.id;
|
||||
weightUnitId = weightUnit?.id;
|
||||
}
|
||||
|
||||
set repetitionUnit(RepetitionUnit repetitionUnit) {
|
||||
set repetitionUnit(RepetitionUnit? repetitionUnit) {
|
||||
repetitionsUnitObj = repetitionUnit;
|
||||
repetitionsUnitId = repetitionUnit.id;
|
||||
repetitionsUnitId = repetitionUnit?.id;
|
||||
}
|
||||
|
||||
void setRir(String rir) {
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:wger/helpers/json.dart';
|
||||
import 'package:wger/helpers/misc.dart';
|
||||
import 'package:wger/models/exercises/exercise.dart';
|
||||
import 'package:wger/models/workouts/day.dart';
|
||||
import 'package:wger/models/workouts/day_data.dart';
|
||||
@@ -69,12 +70,6 @@ class Routine {
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<DayData> dayDataGym = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<DayData> dayDataCurrentIteration = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<DayData> dayDataCurrentIterationGym = [];
|
||||
|
||||
@JsonKey(required: false, includeToJson: false, defaultValue: [])
|
||||
List<WorkoutSessionApi> sessions = [];
|
||||
|
||||
@@ -89,8 +84,6 @@ class Routine {
|
||||
this.days = const [],
|
||||
this.dayData = const [],
|
||||
this.dayDataGym = const [],
|
||||
this.dayDataCurrentIteration = const [],
|
||||
this.dayDataCurrentIterationGym = const [],
|
||||
this.sessions = const [],
|
||||
}) {
|
||||
this.created = created ?? DateTime.now();
|
||||
@@ -121,6 +114,29 @@ class Routine {
|
||||
return out;
|
||||
}
|
||||
|
||||
int? getIteration({DateTime? date}) {
|
||||
if (date == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (final data in dayData) {
|
||||
if (data.date.isSameDayAs(date)) {
|
||||
return data.iteration;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
List<DayData> get dayDataCurrentIteration {
|
||||
final iteration = getIteration() ?? 1;
|
||||
return dayData.where((data) => data.iteration == iteration).toList();
|
||||
}
|
||||
|
||||
List<DayData> get dayDataCurrentIterationGym {
|
||||
final iteration = getIteration() ?? 1;
|
||||
return dayDataGym.where((data) => data.iteration == iteration).toList();
|
||||
}
|
||||
|
||||
/// Filters the workout logs by exercise and sorts them by date
|
||||
///
|
||||
/// Optionally, filters list so that only unique logs are returned. "Unique"
|
||||
|
||||
@@ -58,24 +58,24 @@ class SetConfigData {
|
||||
late int? weightUnitId;
|
||||
|
||||
@JsonKey(includeToJson: false, includeFromJson: false)
|
||||
late WeightUnit weightUnit;
|
||||
late WeightUnit? weightUnit;
|
||||
|
||||
@JsonKey(required: true, name: 'weight_rounding', fromJson: stringToNumNull)
|
||||
late num? weightRounding;
|
||||
|
||||
@JsonKey(required: true, fromJson: stringToNumNull, name: 'reps')
|
||||
@JsonKey(required: true, fromJson: stringToNumNull, name: 'repetitions')
|
||||
late num? repetitions;
|
||||
|
||||
@JsonKey(required: true, name: 'max_reps', fromJson: stringToNumNull)
|
||||
@JsonKey(required: true, name: 'max_repetitions', fromJson: stringToNumNull)
|
||||
late num? maxRepetitions;
|
||||
|
||||
@JsonKey(required: true, name: 'reps_unit')
|
||||
@JsonKey(required: true, name: 'repetitions_unit')
|
||||
late int? repetitionsUnitId;
|
||||
|
||||
@JsonKey(includeToJson: false, includeFromJson: false)
|
||||
late RepetitionUnit repetitionsUnit;
|
||||
late RepetitionUnit? repetitionsUnit;
|
||||
|
||||
@JsonKey(required: true, name: 'reps_rounding', fromJson: stringToNumNull)
|
||||
@JsonKey(required: true, name: 'repetitions_rounding', fromJson: stringToNumNull)
|
||||
late num? repetitionsRounding;
|
||||
|
||||
@JsonKey(required: true)
|
||||
@@ -119,7 +119,7 @@ class SetConfigData {
|
||||
this.textRepr = '',
|
||||
Exercise? exercise,
|
||||
WeightUnit? weightUnit,
|
||||
RepetitionUnit? repsUnit,
|
||||
RepetitionUnit? repetitionsUnit,
|
||||
}) {
|
||||
if (exercise != null) {
|
||||
this.exercise = exercise;
|
||||
@@ -127,8 +127,8 @@ class SetConfigData {
|
||||
if (weightUnit != null) {
|
||||
this.weightUnit = weightUnit;
|
||||
}
|
||||
if (repsUnit != null) {
|
||||
this.repetitionsUnit = repsUnit;
|
||||
if (repetitionsUnit != null) {
|
||||
this.repetitionsUnit = repetitionsUnit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,10 +20,10 @@ SetConfigData _$SetConfigDataFromJson(Map<String, dynamic> json) {
|
||||
'max_weight',
|
||||
'weight_unit',
|
||||
'weight_rounding',
|
||||
'reps',
|
||||
'max_reps',
|
||||
'reps_unit',
|
||||
'reps_rounding',
|
||||
'repetitions',
|
||||
'max_repetitions',
|
||||
'repetitions_unit',
|
||||
'repetitions_rounding',
|
||||
'rir',
|
||||
'max_rir',
|
||||
'rpe',
|
||||
@@ -44,11 +44,12 @@ SetConfigData _$SetConfigDataFromJson(Map<String, dynamic> json) {
|
||||
weightRounding: json['weight_rounding'] == null
|
||||
? 1.25
|
||||
: stringToNumNull(json['weight_rounding'] as String?),
|
||||
repetitions: stringToNumNull(json['reps'] as String?),
|
||||
maxRepetitions: stringToNumNull(json['max_reps'] as String?),
|
||||
repetitionsUnitId: (json['reps_unit'] as num?)?.toInt() ?? REP_UNIT_REPETITIONS_ID,
|
||||
repetitionsRounding:
|
||||
json['reps_rounding'] == null ? 1 : stringToNumNull(json['reps_rounding'] as String?),
|
||||
repetitions: stringToNumNull(json['repetitions'] as String?),
|
||||
maxRepetitions: stringToNumNull(json['max_repetitions'] as String?),
|
||||
repetitionsUnitId: (json['repetitions_unit'] as num?)?.toInt() ?? REP_UNIT_REPETITIONS_ID,
|
||||
repetitionsRounding: json['repetitions_rounding'] == null
|
||||
? 1
|
||||
: stringToNumNull(json['repetitions_rounding'] as String?),
|
||||
rir: json['rir'] as String?,
|
||||
maxRir: json['max_rir'] as String?,
|
||||
rpe: json['rpe'] as String?,
|
||||
@@ -70,10 +71,10 @@ Map<String, dynamic> _$SetConfigDataToJson(SetConfigData instance) => <String, d
|
||||
'max_weight': instance.maxWeight,
|
||||
'weight_unit': instance.weightUnitId,
|
||||
'weight_rounding': instance.weightRounding,
|
||||
'reps': instance.repetitions,
|
||||
'max_reps': instance.maxRepetitions,
|
||||
'reps_unit': instance.repetitionsUnitId,
|
||||
'reps_rounding': instance.repetitionsRounding,
|
||||
'repetitions': instance.repetitions,
|
||||
'max_repetitions': instance.maxRepetitions,
|
||||
'repetitions_unit': instance.repetitionsUnitId,
|
||||
'repetitions_rounding': instance.repetitionsRounding,
|
||||
'rir': instance.rir,
|
||||
'max_rir': instance.maxRir,
|
||||
'rpe': instance.rpe,
|
||||
|
||||
@@ -29,8 +29,8 @@ part 'slot_entry.g.dart';
|
||||
enum ConfigType {
|
||||
weight,
|
||||
maxWeight,
|
||||
reps,
|
||||
maxReps,
|
||||
repetitions,
|
||||
maxRepetitions,
|
||||
sets,
|
||||
maxSets,
|
||||
rir,
|
||||
@@ -68,25 +68,25 @@ class SlotEntry {
|
||||
late int exerciseId;
|
||||
|
||||
@JsonKey(required: true, name: 'repetition_unit')
|
||||
late int repetitionUnitId;
|
||||
late int? repetitionUnitId;
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
late RepetitionUnit repetitionUnitObj;
|
||||
late RepetitionUnit? repetitionUnitObj;
|
||||
|
||||
@JsonKey(required: true, name: 'repetition_rounding', fromJson: stringToNum)
|
||||
late num repetitionRounding;
|
||||
|
||||
@JsonKey(required: false, name: 'reps_configs', includeToJson: false, defaultValue: [])
|
||||
late List<BaseConfig> repsConfigs = [];
|
||||
@JsonKey(required: false, name: 'repetitions_configs', includeToJson: false, defaultValue: [])
|
||||
late List<BaseConfig> repetitionsConfigs = [];
|
||||
|
||||
@JsonKey(required: false, name: 'max_reps_configs', includeToJson: false, defaultValue: [])
|
||||
late List<BaseConfig> maxRepsConfigs = [];
|
||||
@JsonKey(required: false, name: 'max_repetitions_configs', includeToJson: false, defaultValue: [])
|
||||
late List<BaseConfig> maxRepetitionsConfigs = [];
|
||||
|
||||
@JsonKey(required: true, name: 'weight_unit')
|
||||
late int weightUnitId;
|
||||
late int? weightUnitId;
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
late WeightUnit weightUnitObj;
|
||||
late WeightUnit? weightUnitObj;
|
||||
|
||||
@JsonKey(required: true, name: 'weight_rounding', fromJson: stringToNum)
|
||||
late num weightRounding;
|
||||
@@ -137,8 +137,8 @@ class SlotEntry {
|
||||
this.maxRirConfigs = const [],
|
||||
this.restTimeConfigs = const [],
|
||||
this.maxRestTimeConfigs = const [],
|
||||
this.repsConfigs = const [],
|
||||
this.maxRepsConfigs = const [],
|
||||
this.repetitionsConfigs = const [],
|
||||
this.maxRepetitionsConfigs = const [],
|
||||
RepetitionUnit? repetitionUnit,
|
||||
WeightUnit? weightUnit,
|
||||
Exercise? exercise,
|
||||
@@ -186,8 +186,8 @@ class SlotEntry {
|
||||
|
||||
bool get hasProgressionRules {
|
||||
return weightConfigs.length > 1 ||
|
||||
repsConfigs.length > 1 ||
|
||||
maxRepsConfigs.length > 1 ||
|
||||
repetitionsConfigs.length > 1 ||
|
||||
maxRepetitionsConfigs.length > 1 ||
|
||||
nrOfSetsConfigs.length > 1 ||
|
||||
maxNrOfSetsConfigs.length > 1 ||
|
||||
rirConfigs.length > 1 ||
|
||||
@@ -208,10 +208,10 @@ class SlotEntry {
|
||||
return nrOfSetsConfigs;
|
||||
case ConfigType.maxSets:
|
||||
return maxNrOfSetsConfigs;
|
||||
case ConfigType.reps:
|
||||
return repsConfigs;
|
||||
case ConfigType.maxReps:
|
||||
return maxRepsConfigs;
|
||||
case ConfigType.repetitions:
|
||||
return repetitionsConfigs;
|
||||
case ConfigType.maxRepetitions:
|
||||
return maxRepetitionsConfigs;
|
||||
case ConfigType.rir:
|
||||
return rirConfigs;
|
||||
case ConfigType.maxRir:
|
||||
|
||||
@@ -29,9 +29,9 @@ SlotEntry _$SlotEntryFromJson(Map<String, dynamic> json) {
|
||||
order: (json['order'] as num).toInt(),
|
||||
type: json['type'] as String,
|
||||
exerciseId: (json['exercise'] as num).toInt(),
|
||||
repetitionUnitId: (json['repetition_unit'] as num).toInt(),
|
||||
repetitionUnitId: (json['repetition_unit'] as num?)?.toInt(),
|
||||
repetitionRounding: stringToNum(json['repetition_rounding'] as String?),
|
||||
weightUnitId: (json['weight_unit'] as num).toInt(),
|
||||
weightUnitId: (json['weight_unit'] as num?)?.toInt(),
|
||||
weightRounding: stringToNum(json['weight_rounding'] as String?),
|
||||
comment: json['comment'] as String,
|
||||
weightConfigs: (json['weight_configs'] as List<dynamic>?)
|
||||
@@ -66,11 +66,11 @@ SlotEntry _$SlotEntryFromJson(Map<String, dynamic> json) {
|
||||
?.map((e) => BaseConfig.fromJson(e as Map<String, dynamic>))
|
||||
.toList() ??
|
||||
[],
|
||||
repsConfigs: (json['reps_configs'] as List<dynamic>?)
|
||||
repetitionsConfigs: (json['repetitions_configs'] as List<dynamic>?)
|
||||
?.map((e) => BaseConfig.fromJson(e as Map<String, dynamic>))
|
||||
.toList() ??
|
||||
[],
|
||||
maxRepsConfigs: (json['max_reps_configs'] as List<dynamic>?)
|
||||
maxRepetitionsConfigs: (json['max_repetitions_configs'] as List<dynamic>?)
|
||||
?.map((e) => BaseConfig.fromJson(e as Map<String, dynamic>))
|
||||
.toList() ??
|
||||
[],
|
||||
|
||||
@@ -37,7 +37,7 @@ class AddExerciseProvider with ChangeNotifier {
|
||||
List<Muscle> _primaryMuscles = [];
|
||||
List<Muscle> _secondaryMuscles = [];
|
||||
|
||||
static const _exerciseUrlPath = 'exercise-base';
|
||||
static const _exerciseUrlPath = 'exercise';
|
||||
static const _imagesUrlPath = 'exerciseimage';
|
||||
static const _exerciseTranslationUrlPath = 'exercise-translation';
|
||||
static const _exerciseAliasPath = 'exercisealias';
|
||||
|
||||
@@ -48,7 +48,7 @@ class ExercisesProvider with ChangeNotifier {
|
||||
static const EXERCISE_CACHE_DAYS = 7;
|
||||
static const CACHE_VERSION = 4;
|
||||
|
||||
static const exerciseInfoUrlPath = 'exercisebaseinfo';
|
||||
static const exerciseInfoUrlPath = 'exerciseinfo';
|
||||
static const exerciseSearchPath = 'exercise/search';
|
||||
|
||||
static const categoriesUrlPath = 'exercisecategory';
|
||||
|
||||
@@ -45,8 +45,6 @@ class RoutinesProvider with ChangeNotifier {
|
||||
static const _routinesLogsSubpath = 'logs';
|
||||
static const _routinesDateSequenceDisplaySubpath = 'date-sequence-display';
|
||||
static const _routinesDateSequenceGymSubpath = 'date-sequence-gym';
|
||||
static const _routinesCurrentIterationDisplaySubpath = 'current-iteration-display';
|
||||
static const _routinesCurrentIterationGymSubpath = 'current-iteration-gym';
|
||||
static const _daysUrlPath = 'day';
|
||||
static const _slotsUrlPath = 'slot';
|
||||
static const _slotEntriesUrlPath = 'slot-entry';
|
||||
@@ -58,15 +56,15 @@ class RoutinesProvider with ChangeNotifier {
|
||||
static const _routineConfigMaxSets = 'max-sets-config';
|
||||
static const _routineConfigWeights = 'weight-config';
|
||||
static const _routineConfigMaxWeights = 'max-weight-config';
|
||||
static const _routineConfigReps = 'reps-config';
|
||||
static const _routineConfigMaxReps = 'max-reps-config';
|
||||
static const _routineConfigRepetitions = 'repetitions-config';
|
||||
static const _routineConfigMaxRepetitions = 'max-repetitions-config';
|
||||
static const _routineConfigRir = 'rir-config';
|
||||
static const _routineConfigMaxRir = 'rest-config';
|
||||
static const _routineConfigRestTime = 'rest-config';
|
||||
static const _routineConfigMaxRestTime = 'max-rest-config';
|
||||
|
||||
Routine? _currentRoutine;
|
||||
late ExercisesProvider _exercises;
|
||||
late ExercisesProvider _exerciseProvider;
|
||||
final WgerBaseProvider baseProvider;
|
||||
List<Routine> _routines = [];
|
||||
List<WeightUnit> _weightUnits = [];
|
||||
@@ -79,7 +77,7 @@ class RoutinesProvider with ChangeNotifier {
|
||||
List<WeightUnit>? weightUnits,
|
||||
List<RepetitionUnit>? repetitionUnits,
|
||||
}) {
|
||||
_exercises = exercises;
|
||||
_exerciseProvider = exercises;
|
||||
_routines = entries;
|
||||
_weightUnits = weightUnits ?? [];
|
||||
_repetitionUnits = repetitionUnits ?? [];
|
||||
@@ -93,6 +91,10 @@ class RoutinesProvider with ChangeNotifier {
|
||||
return [..._weightUnits];
|
||||
}
|
||||
|
||||
set weightUnits(List<WeightUnit> weightUnits) {
|
||||
_weightUnits = weightUnits;
|
||||
}
|
||||
|
||||
/// Clears all lists
|
||||
void clear() {
|
||||
_currentRoutine = null;
|
||||
@@ -112,6 +114,10 @@ class RoutinesProvider with ChangeNotifier {
|
||||
return [..._repetitionUnits];
|
||||
}
|
||||
|
||||
set repetitionUnits(List<RepetitionUnit> repetitionUnits) {
|
||||
_repetitionUnits = repetitionUnits;
|
||||
}
|
||||
|
||||
RepetitionUnit findRepetitionUnitById(int id) =>
|
||||
_repetitionUnits.firstWhere((element) => element.id == id);
|
||||
|
||||
@@ -196,7 +202,7 @@ class RoutinesProvider with ChangeNotifier {
|
||||
for (final entry in entries) {
|
||||
for (final slot in entry.slots) {
|
||||
for (final setConfig in slot.setConfigs) {
|
||||
setConfig.exercise = (await _exercises.fetchAndSetExercise(setConfig.exerciseId))!;
|
||||
setConfig.exercise = (await _exerciseProvider.fetchAndSetExercise(setConfig.exerciseId))!;
|
||||
|
||||
setConfig.repetitionsUnit = _repetitionUnits.firstWhere(
|
||||
(e) => e.id == setConfig.repetitionsUnitId,
|
||||
@@ -249,20 +255,6 @@ class RoutinesProvider with ChangeNotifier {
|
||||
objectMethod: _routinesDateSequenceGymSubpath,
|
||||
),
|
||||
),
|
||||
baseProvider.fetch(
|
||||
baseProvider.makeUrl(
|
||||
_routinesUrlPath,
|
||||
id: routineId,
|
||||
objectMethod: _routinesCurrentIterationDisplaySubpath,
|
||||
),
|
||||
),
|
||||
baseProvider.fetch(
|
||||
baseProvider.makeUrl(
|
||||
_routinesUrlPath,
|
||||
id: routineId,
|
||||
objectMethod: _routinesCurrentIterationGymSubpath,
|
||||
),
|
||||
),
|
||||
baseProvider.fetch(
|
||||
baseProvider.makeUrl(
|
||||
_routinesUrlPath,
|
||||
@@ -276,9 +268,7 @@ class RoutinesProvider with ChangeNotifier {
|
||||
|
||||
final dayData = results[1] as List<dynamic>;
|
||||
final dayDataGym = results[2] as List<dynamic>;
|
||||
final currentIterationDayData = results[3] as List<dynamic>;
|
||||
final currentIterationDayDataGym = results[4] as List<dynamic>;
|
||||
final sessionData = results[5] as List<dynamic>;
|
||||
final sessionData = results[3] as List<dynamic>;
|
||||
|
||||
/*
|
||||
* Set exercise, repetition and weight unit objects
|
||||
@@ -291,21 +281,14 @@ class RoutinesProvider with ChangeNotifier {
|
||||
final dayDataEntriesGym = dayDataGym.map((entry) => DayData.fromJson(entry)).toList();
|
||||
setExercisesAndUnits(dayDataEntriesGym);
|
||||
|
||||
final currentIteration =
|
||||
currentIterationDayData.map((entry) => DayData.fromJson(entry)).toList();
|
||||
setExercisesAndUnits(currentIteration);
|
||||
|
||||
final currentIterationGym =
|
||||
currentIterationDayDataGym.map((entry) => DayData.fromJson(entry)).toList();
|
||||
setExercisesAndUnits(currentIterationGym);
|
||||
|
||||
final sessionDataEntries =
|
||||
sessionData.map((entry) => WorkoutSessionApi.fromJson(entry)).toList();
|
||||
|
||||
for (final day in routine.days) {
|
||||
for (final slot in day.slots) {
|
||||
for (final slotEntry in slot.entries) {
|
||||
slotEntry.exerciseObj = (await _exercises.fetchAndSetExercise(slotEntry.exerciseId))!;
|
||||
slotEntry.exerciseObj =
|
||||
(await _exerciseProvider.fetchAndSetExercise(slotEntry.exerciseId))!;
|
||||
slotEntry.repetitionUnitObj = _repetitionUnits.firstWhere(
|
||||
(e) => e.id == slotEntry.repetitionUnitId,
|
||||
);
|
||||
@@ -318,8 +301,6 @@ class RoutinesProvider with ChangeNotifier {
|
||||
|
||||
routine.dayData = dayDataEntriesDisplay;
|
||||
routine.dayDataGym = dayDataEntriesGym;
|
||||
routine.dayDataCurrentIteration = currentIteration;
|
||||
routine.dayDataCurrentIterationGym = currentIterationGym;
|
||||
|
||||
// Logs
|
||||
routine.sessions = List<WorkoutSessionApi>.from(sessionDataEntries);
|
||||
@@ -327,7 +308,7 @@ class RoutinesProvider with ChangeNotifier {
|
||||
for (final log in session.logs) {
|
||||
log.weightUnit = _weightUnits.firstWhere((e) => e.id == log.weightUnitId);
|
||||
log.repetitionUnit = _repetitionUnits.firstWhere((e) => e.id == log.repetitionsUnitId);
|
||||
log.exerciseBase = (await _exercises.fetchAndSetExercise(log.exerciseId))!;
|
||||
log.exerciseBase = (await _exerciseProvider.fetchAndSetExercise(log.exerciseId))!;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -535,7 +516,7 @@ class RoutinesProvider with ChangeNotifier {
|
||||
baseProvider.makeUrl(_slotEntriesUrlPath),
|
||||
);
|
||||
final newEntry = SlotEntry.fromJson(data);
|
||||
newEntry.exerciseObj = (await _exercises.fetchAndSetExercise(newEntry.exerciseId))!;
|
||||
newEntry.exerciseObj = (await _exerciseProvider.fetchAndSetExercise(newEntry.exerciseId))!;
|
||||
|
||||
for (final routine in _routines) {
|
||||
for (final day in routine.days) {
|
||||
@@ -584,10 +565,10 @@ class RoutinesProvider with ChangeNotifier {
|
||||
return _routineConfigWeights;
|
||||
case ConfigType.maxWeight:
|
||||
return _routineConfigMaxWeights;
|
||||
case ConfigType.reps:
|
||||
return _routineConfigReps;
|
||||
case ConfigType.maxReps:
|
||||
return _routineConfigMaxReps;
|
||||
case ConfigType.repetitions:
|
||||
return _routineConfigRepetitions;
|
||||
case ConfigType.maxRepetitions:
|
||||
return _routineConfigMaxRepetitions;
|
||||
case ConfigType.rir:
|
||||
return _routineConfigRir;
|
||||
case ConfigType.maxRir:
|
||||
@@ -696,7 +677,7 @@ class RoutinesProvider with ChangeNotifier {
|
||||
|
||||
newLog.weightUnit = _weightUnits.firstWhere((e) => e.id == log.weightUnitId);
|
||||
newLog.repetitionUnit = _repetitionUnits.firstWhere((e) => e.id == log.weightUnitId);
|
||||
newLog.exerciseBase = (await _exercises.fetchAndSetExercise(log.exerciseId))!;
|
||||
newLog.exerciseBase = (await _exerciseProvider.fetchAndSetExercise(log.exerciseId))!;
|
||||
|
||||
final plan = findById(newLog.routineId);
|
||||
final session = plan.sessions.firstWhere((element) => element.session.id == newLog.sessionId);
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:wger/providers/routines.dart';
|
||||
import 'package:wger/widgets/routines/app_bar.dart';
|
||||
import 'package:wger/widgets/core/app_bar.dart';
|
||||
import 'package:wger/widgets/routines/routine_edit.dart';
|
||||
|
||||
class RoutineEditScreen extends StatelessWidget {
|
||||
@@ -34,7 +34,7 @@ class RoutineEditScreen extends StatelessWidget {
|
||||
final routine = Provider.of<RoutinesProvider>(context).findById(routineId);
|
||||
|
||||
return Scaffold(
|
||||
appBar: RoutineDetailAppBar(routine),
|
||||
appBar: EmptyAppBar(routine.name),
|
||||
body: RoutineEdit(routine),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ class _ReorderableDaysListState extends State<ReorderableDaysList> {
|
||||
),
|
||||
onTap: () async {
|
||||
final day = Day.empty();
|
||||
day.name = i18n.newDay;
|
||||
day.name = '${i18n.newDay} ${widget.days.length + 1}';
|
||||
day.routineId = widget.routineId;
|
||||
final newDay = await provider.addDay(day);
|
||||
|
||||
|
||||
@@ -20,12 +20,12 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:wger/models/workouts/slot_entry.dart';
|
||||
|
||||
class RepsInputWidget extends StatelessWidget {
|
||||
final _repsController = TextEditingController();
|
||||
class RepetitionsInputWidget extends StatelessWidget {
|
||||
final _repetitionsController = TextEditingController();
|
||||
final SlotEntry _setting;
|
||||
final bool _detailed;
|
||||
|
||||
RepsInputWidget(this._setting, this._detailed);
|
||||
RepetitionsInputWidget(this._setting, this._detailed);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -34,7 +34,7 @@ class RepsInputWidget extends StatelessWidget {
|
||||
labelText: _detailed ? AppLocalizations.of(context).repetitions : '',
|
||||
errorMaxLines: 2,
|
||||
),
|
||||
controller: _repsController,
|
||||
controller: _repetitionsController,
|
||||
keyboardType: TextInputType.number,
|
||||
validator: (value) {
|
||||
try {
|
||||
|
||||
@@ -26,12 +26,11 @@ import 'package:wger/providers/routines.dart';
|
||||
///
|
||||
/// Can be used with a Setting or a Log object
|
||||
class RepetitionUnitInputWidget extends StatefulWidget {
|
||||
final int _initialValue;
|
||||
late int selectedRepetitionUnit;
|
||||
final ValueChanged<int> onChanged;
|
||||
late int? selectedRepetitionUnit;
|
||||
final ValueChanged<int?> onChanged;
|
||||
|
||||
RepetitionUnitInputWidget(this._initialValue, {required this.onChanged}) {
|
||||
selectedRepetitionUnit = _initialValue;
|
||||
RepetitionUnitInputWidget(initialValue, {required this.onChanged}) {
|
||||
selectedRepetitionUnit = initialValue;
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -43,7 +42,9 @@ class _RepetitionUnitInputWidgetState extends State<RepetitionUnitInputWidget> {
|
||||
Widget build(BuildContext context) {
|
||||
final unitProvider = context.read<RoutinesProvider>();
|
||||
|
||||
RepetitionUnit selectedWeightUnit = unitProvider.findRepetitionUnitById(widget._initialValue);
|
||||
RepetitionUnit? selectedWeightUnit = widget.selectedRepetitionUnit != null
|
||||
? unitProvider.findRepetitionUnitById(widget.selectedRepetitionUnit!)
|
||||
: null;
|
||||
|
||||
return DropdownButtonFormField(
|
||||
value: selectedWeightUnit,
|
||||
|
||||
@@ -78,8 +78,8 @@ class _SlotEntryFormState extends State<SlotEntryForm> {
|
||||
|
||||
final weightController = TextEditingController();
|
||||
final maxWeightController = TextEditingController();
|
||||
final repsController = TextEditingController();
|
||||
final maxRepsController = TextEditingController();
|
||||
final repetitionsController = TextEditingController();
|
||||
final maxRepetitionsController = TextEditingController();
|
||||
final restController = TextEditingController();
|
||||
final maxRestController = TextEditingController();
|
||||
final rirController = TextEditingController();
|
||||
@@ -102,11 +102,12 @@ class _SlotEntryFormState extends State<SlotEntryForm> {
|
||||
maxWeightController.text = widget.entry.maxWeightConfigs.first.value.toString();
|
||||
}
|
||||
|
||||
if (widget.entry.repsConfigs.isNotEmpty) {
|
||||
repsController.text = widget.entry.repsConfigs.first.value.round().toString();
|
||||
if (widget.entry.repetitionsConfigs.isNotEmpty) {
|
||||
repetitionsController.text = widget.entry.repetitionsConfigs.first.value.round().toString();
|
||||
}
|
||||
if (widget.entry.maxRepsConfigs.isNotEmpty) {
|
||||
maxRepsController.text = widget.entry.maxRepsConfigs.first.value.round().toString();
|
||||
if (widget.entry.maxRepetitionsConfigs.isNotEmpty) {
|
||||
maxRepetitionsController.text =
|
||||
widget.entry.maxRepetitionsConfigs.first.value.round().toString();
|
||||
}
|
||||
|
||||
if (widget.entry.restTimeConfigs.isNotEmpty) {
|
||||
@@ -126,8 +127,8 @@ class _SlotEntryFormState extends State<SlotEntryForm> {
|
||||
weightController.dispose();
|
||||
maxWeightController.dispose();
|
||||
|
||||
repsController.dispose();
|
||||
maxRepsController.dispose();
|
||||
repetitionsController.dispose();
|
||||
maxRepetitionsController.dispose();
|
||||
|
||||
restController.dispose();
|
||||
maxRestController.dispose();
|
||||
@@ -252,7 +253,7 @@ class _SlotEntryFormState extends State<SlotEntryForm> {
|
||||
children: [
|
||||
Flexible(
|
||||
child: TextFormField(
|
||||
controller: repsController,
|
||||
controller: repetitionsController,
|
||||
keyboardType: TextInputType.number,
|
||||
decoration: InputDecoration(labelText: i18n.repetitions),
|
||||
validator: (value) {
|
||||
@@ -266,7 +267,7 @@ class _SlotEntryFormState extends State<SlotEntryForm> {
|
||||
if (!widget.simpleMode)
|
||||
Flexible(
|
||||
child: TextFormField(
|
||||
controller: maxRepsController,
|
||||
controller: maxRepetitionsController,
|
||||
keyboardType: TextInputType.number,
|
||||
decoration: InputDecoration(labelText: i18n.max),
|
||||
validator: (value) {
|
||||
@@ -348,13 +349,13 @@ class _SlotEntryFormState extends State<SlotEntryForm> {
|
||||
|
||||
provider.handleConfig(
|
||||
widget.entry,
|
||||
repsController.text,
|
||||
ConfigType.reps,
|
||||
repetitionsController.text,
|
||||
ConfigType.repetitions,
|
||||
);
|
||||
provider.handleConfig(
|
||||
widget.entry,
|
||||
maxRepsController.text,
|
||||
ConfigType.maxReps,
|
||||
maxRepetitionsController.text,
|
||||
ConfigType.maxRepetitions,
|
||||
);
|
||||
|
||||
provider.handleConfig(
|
||||
|
||||
@@ -26,12 +26,11 @@ import 'package:wger/providers/routines.dart';
|
||||
///
|
||||
/// Can be used with a Setting or a Log object
|
||||
class WeightUnitInputWidget extends StatefulWidget {
|
||||
final int _initialValue;
|
||||
late int selectedWeightUnit;
|
||||
final ValueChanged<int> onChanged;
|
||||
late int? selectedWeightUnit;
|
||||
final ValueChanged<int?> onChanged;
|
||||
|
||||
WeightUnitInputWidget(this._initialValue, {required this.onChanged}) {
|
||||
selectedWeightUnit = _initialValue;
|
||||
WeightUnitInputWidget(initialValue, {required this.onChanged}) {
|
||||
selectedWeightUnit = initialValue;
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -43,7 +42,9 @@ class _WeightUnitInputWidgetState extends State<WeightUnitInputWidget> {
|
||||
Widget build(BuildContext context) {
|
||||
final unitProvider = context.read<RoutinesProvider>();
|
||||
|
||||
WeightUnit selectedWeightUnit = unitProvider.findWeightUnitById(widget._initialValue);
|
||||
WeightUnit? selectedWeightUnit = widget.selectedWeightUnit != null
|
||||
? unitProvider.findWeightUnitById(widget.selectedWeightUnit!)
|
||||
: null;
|
||||
|
||||
return DropdownButtonFormField(
|
||||
value: selectedWeightUnit,
|
||||
|
||||
@@ -311,7 +311,7 @@ class LogPage extends StatefulWidget {
|
||||
class _LogPageState extends State<LogPage> {
|
||||
final _form = GlobalKey<FormState>();
|
||||
String rirValue = SlotEntry.DEFAULT_RIR;
|
||||
final _repsController = TextEditingController();
|
||||
final _repetitionsController = TextEditingController();
|
||||
final _weightController = TextEditingController();
|
||||
var _detailed = false;
|
||||
bool _isSaving = false;
|
||||
@@ -325,7 +325,7 @@ class _LogPageState extends State<LogPage> {
|
||||
focusNode = FocusNode();
|
||||
|
||||
if (widget._configData.repetitions != null) {
|
||||
_repsController.text = widget._configData.repetitions!.toString();
|
||||
_repetitionsController.text = widget._configData.repetitions!.toString();
|
||||
}
|
||||
|
||||
if (widget._configData.weight != null) {
|
||||
@@ -336,7 +336,7 @@ class _LogPageState extends State<LogPage> {
|
||||
@override
|
||||
void dispose() {
|
||||
focusNode.dispose();
|
||||
_repsController.dispose();
|
||||
_repetitionsController.dispose();
|
||||
_weightController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
@@ -348,9 +348,9 @@ class _LogPageState extends State<LogPage> {
|
||||
icon: const Icon(Icons.remove, color: Colors.black),
|
||||
onPressed: () {
|
||||
try {
|
||||
final int newValue = int.parse(_repsController.text) - 1;
|
||||
final int newValue = int.parse(_repetitionsController.text) - 1;
|
||||
if (newValue > 0) {
|
||||
_repsController.text = newValue.toString();
|
||||
_repetitionsController.text = newValue.toString();
|
||||
}
|
||||
} on FormatException {}
|
||||
},
|
||||
@@ -361,7 +361,7 @@ class _LogPageState extends State<LogPage> {
|
||||
labelText: AppLocalizations.of(context).repetitions,
|
||||
),
|
||||
enabled: true,
|
||||
controller: _repsController,
|
||||
controller: _repetitionsController,
|
||||
keyboardType: TextInputType.number,
|
||||
focusNode: focusNode,
|
||||
onFieldSubmitted: (_) {},
|
||||
@@ -383,8 +383,8 @@ class _LogPageState extends State<LogPage> {
|
||||
icon: const Icon(Icons.add, color: Colors.black),
|
||||
onPressed: () {
|
||||
try {
|
||||
final int newValue = int.parse(_repsController.text) + 1;
|
||||
_repsController.text = newValue.toString();
|
||||
final int newValue = int.parse(_repetitionsController.text) + 1;
|
||||
_repetitionsController.text = newValue.toString();
|
||||
} on FormatException {}
|
||||
},
|
||||
),
|
||||
@@ -585,7 +585,7 @@ class _LogPageState extends State<LogPage> {
|
||||
onTap: () {
|
||||
setState(() {
|
||||
// Text field
|
||||
_repsController.text = log.repetitions.toString();
|
||||
_repetitionsController.text = log.repetitions.toString();
|
||||
_weightController.text = log.weight.toString();
|
||||
|
||||
// Drop downs
|
||||
|
||||
@@ -22,7 +22,7 @@ void main() {
|
||||
late ExerciseDatabase database;
|
||||
|
||||
const String categoryUrl = 'exercisecategory';
|
||||
const String exerciseBaseInfoUrl = 'exercisebaseinfo';
|
||||
const String exerciseInfoUrl = 'exerciseinfo';
|
||||
const String muscleUrl = 'muscle';
|
||||
const String equipmentUrl = 'equipment';
|
||||
const String languageUrl = 'language';
|
||||
@@ -36,13 +36,13 @@ void main() {
|
||||
final Uri tExerciseInfoUri = Uri(
|
||||
scheme: 'http',
|
||||
host: 'localhost',
|
||||
path: 'api/v2/$exerciseBaseInfoUrl/',
|
||||
path: 'api/v2/$exerciseInfoUrl/',
|
||||
);
|
||||
|
||||
final Uri tExerciseInfoDetailUri = Uri(
|
||||
scheme: 'http',
|
||||
host: 'localhost',
|
||||
path: 'api/v2/$exerciseBaseInfoUrl/9/',
|
||||
path: 'api/v2/$exerciseInfoUrl/9/',
|
||||
);
|
||||
|
||||
final Uri tMuscleEntriesUri = Uri(
|
||||
@@ -80,7 +80,7 @@ void main() {
|
||||
fixture('exercises/language_entries.json'),
|
||||
);
|
||||
final Map<String, dynamic> tExerciseInfoMap = jsonDecode(
|
||||
fixture('exercises/exercisebaseinfo_response.json'),
|
||||
fixture('exercises/exerciseinfo_response.json'),
|
||||
);
|
||||
|
||||
setUp(() {
|
||||
@@ -118,12 +118,12 @@ void main() {
|
||||
);
|
||||
|
||||
// Mock base info response
|
||||
when(mockBaseProvider.makeUrl(exerciseBaseInfoUrl)).thenReturn(tExerciseInfoUri);
|
||||
when(mockBaseProvider.makeUrl(exerciseInfoUrl)).thenReturn(tExerciseInfoUri);
|
||||
when(mockBaseProvider.fetch(tExerciseInfoUri)).thenAnswer(
|
||||
(_) => Future.value(tExerciseInfoMap),
|
||||
);
|
||||
|
||||
when(mockBaseProvider.makeUrl(exerciseBaseInfoUrl, id: 9)).thenReturn(tExerciseInfoDetailUri);
|
||||
when(mockBaseProvider.makeUrl(exerciseInfoUrl, id: 9)).thenReturn(tExerciseInfoDetailUri);
|
||||
when(mockBaseProvider.fetch(tExerciseInfoDetailUri)).thenAnswer(
|
||||
(_) => Future.value(tExerciseInfoMap),
|
||||
);
|
||||
|
||||
@@ -18,22 +18,22 @@ void main() {
|
||||
late MockWgerBaseProvider mockBaseProvider;
|
||||
late ExercisesProvider provider;
|
||||
|
||||
const String exerciseBaseInfoUrl = 'exercisebaseinfo';
|
||||
const String exerciseInfoUrl = 'exerciseinfo';
|
||||
|
||||
final Uri tExerciseBaseInfoUri = Uri(
|
||||
final Uri tExerciseInfoUri = Uri(
|
||||
scheme: 'http',
|
||||
host: 'localhost',
|
||||
path: 'api/v2/$exerciseBaseInfoUrl/9/',
|
||||
path: 'api/v2/$exerciseInfoUrl/9/',
|
||||
);
|
||||
|
||||
final Uri tExerciseBaseInfoUri2 = Uri(
|
||||
final Uri tExerciseInfoUri2 = Uri(
|
||||
scheme: 'http',
|
||||
host: 'localhost',
|
||||
path: 'api/v2/$exerciseBaseInfoUrl/1/',
|
||||
path: 'api/v2/$exerciseInfoUrl/1/',
|
||||
);
|
||||
|
||||
final Map<String, dynamic> tExerciseInfoMap = jsonDecode(
|
||||
fixture('exercises/exercisebaseinfo_response.json'),
|
||||
fixture('exercises/exerciseinfo_response.json'),
|
||||
);
|
||||
|
||||
setUpAll(() async {
|
||||
@@ -54,12 +54,12 @@ void main() {
|
||||
provider.languages = [tLanguage1, tLanguage2, tLanguage3];
|
||||
|
||||
// Mock base info response
|
||||
when(mockBaseProvider.makeUrl(exerciseBaseInfoUrl, id: 9)).thenReturn(tExerciseBaseInfoUri);
|
||||
when(mockBaseProvider.makeUrl(exerciseBaseInfoUrl, id: 1)).thenReturn(tExerciseBaseInfoUri2);
|
||||
when(mockBaseProvider.makeUrl(exerciseInfoUrl, id: 9)).thenReturn(tExerciseInfoUri);
|
||||
when(mockBaseProvider.makeUrl(exerciseInfoUrl, id: 1)).thenReturn(tExerciseInfoUri2);
|
||||
|
||||
when(mockBaseProvider.fetch(tExerciseBaseInfoUri))
|
||||
when(mockBaseProvider.fetch(tExerciseInfoUri))
|
||||
.thenAnswer((_) => Future.value(tExerciseInfoMap));
|
||||
when(mockBaseProvider.fetch(tExerciseBaseInfoUri2))
|
||||
when(mockBaseProvider.fetch(tExerciseInfoUri2))
|
||||
.thenAnswer((_) => Future.value(tExerciseInfoMap));
|
||||
});
|
||||
|
||||
@@ -69,7 +69,7 @@ void main() {
|
||||
final base = await provider.fetchAndSetExercise(1);
|
||||
|
||||
// assert
|
||||
verifyNever(provider.baseProvider.fetch(tExerciseBaseInfoUri2));
|
||||
verifyNever(provider.baseProvider.fetch(tExerciseInfoUri2));
|
||||
expect(base?.id, 1);
|
||||
});
|
||||
|
||||
@@ -78,7 +78,7 @@ void main() {
|
||||
final base = await provider.fetchAndSetExercise(9);
|
||||
|
||||
// assert
|
||||
verify(provider.baseProvider.fetch(tExerciseBaseInfoUri));
|
||||
verify(provider.baseProvider.fetch(tExerciseInfoUri));
|
||||
expect(base?.id, 9);
|
||||
});
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ void main() {
|
||||
late ExercisesProvider provider;
|
||||
|
||||
const String categoryUrl = 'exercisecategory';
|
||||
const String exerciseBaseInfoUrl = 'exercisebaseinfo';
|
||||
const String exerciseInfoUrl = 'exerciseinfo';
|
||||
const String muscleUrl = 'muscle';
|
||||
const String equipmentUrl = 'equipment';
|
||||
const String languageUrl = 'language';
|
||||
@@ -38,7 +38,7 @@ void main() {
|
||||
final Uri tExerciseInfoUri = Uri(
|
||||
scheme: 'http',
|
||||
host: 'localhost',
|
||||
path: 'api/v2/$exerciseBaseInfoUrl/1/',
|
||||
path: 'api/v2/$exerciseInfoUrl/1/',
|
||||
);
|
||||
|
||||
final Uri tMuscleEntriesUri = Uri(
|
||||
@@ -80,8 +80,8 @@ void main() {
|
||||
final Map<String, dynamic> tLanguageMap = jsonDecode(
|
||||
fixture('exercises/language_entries.json'),
|
||||
);
|
||||
final Map<String, dynamic> tExerciseBaseInfoMap = jsonDecode(
|
||||
fixture('exercises/exercisebaseinfo_response.json'),
|
||||
final Map<String, dynamic> tExerciseInfoMap = jsonDecode(
|
||||
fixture('exercises/exerciseinfo_response.json'),
|
||||
);
|
||||
|
||||
setUpAll(() {
|
||||
@@ -122,10 +122,10 @@ void main() {
|
||||
.thenAnswer((_) => Future.value(tLanguageMap['results']));
|
||||
|
||||
// Mock base info response
|
||||
when(mockBaseProvider.makeUrl(exerciseBaseInfoUrl, id: 1)).thenReturn(tExerciseInfoUri);
|
||||
when(mockBaseProvider.makeUrl(exerciseBaseInfoUrl, id: 2)).thenReturn(tExerciseInfoUri);
|
||||
when(mockBaseProvider.makeUrl(exerciseInfoUrl, id: 1)).thenReturn(tExerciseInfoUri);
|
||||
when(mockBaseProvider.makeUrl(exerciseInfoUrl, id: 2)).thenReturn(tExerciseInfoUri);
|
||||
when(mockBaseProvider.fetch(tExerciseInfoUri))
|
||||
.thenAnswer((_) => Future.value(tExerciseBaseInfoMap));
|
||||
.thenAnswer((_) => Future.value(tExerciseInfoMap));
|
||||
});
|
||||
|
||||
group('findCategoryById()', () {
|
||||
|
||||
@@ -8,7 +8,7 @@ import '../fixtures/fixture_reader.dart';
|
||||
|
||||
void main() {
|
||||
final Map<String, dynamic> tExerciseInfoMap = jsonDecode(
|
||||
fixture('exercises/exercisebaseinfo_response.json'),
|
||||
fixture('exercises/exerciseinfo_response.json'),
|
||||
);
|
||||
|
||||
group('Model tests', () {
|
||||
|
||||
696
test/fixtures/routines/routine_date_sequence_display.json
vendored
Normal file
696
test/fixtures/routines/routine_date_sequence_display.json
vendored
Normal file
@@ -0,0 +1,696 @@
|
||||
[
|
||||
{
|
||||
"iteration": 1,
|
||||
"date": "2025-01-05",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 8,
|
||||
"routine": 2,
|
||||
"order": 1,
|
||||
"name": "Leg day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
76
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 2,
|
||||
"exercise": 76,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "80.00",
|
||||
"max_weight": null,
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 80 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 1,
|
||||
"date": "2025-01-06",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 9,
|
||||
"routine": 2,
|
||||
"order": 2,
|
||||
"name": "",
|
||||
"description": "",
|
||||
"is_rest": true,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 1,
|
||||
"date": "2025-01-07",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 10,
|
||||
"routine": 2,
|
||||
"order": 3,
|
||||
"name": "Arms day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
92
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 3,
|
||||
"exercise": 92,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "20.00",
|
||||
"max_weight": "22.00",
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 20-22 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 1,
|
||||
"date": "2025-01-08",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 1,
|
||||
"date": "2025-01-09",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 1,
|
||||
"date": "2025-01-10",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 1,
|
||||
"date": "2025-01-11",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 1,
|
||||
"date": "2025-01-12",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 2,
|
||||
"date": "2025-01-13",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 8,
|
||||
"routine": 2,
|
||||
"order": 1,
|
||||
"name": "Leg day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
76
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 2,
|
||||
"exercise": 76,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "80.00",
|
||||
"max_weight": null,
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 80 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 2,
|
||||
"date": "2025-01-14",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 9,
|
||||
"routine": 2,
|
||||
"order": 2,
|
||||
"name": "",
|
||||
"description": "",
|
||||
"is_rest": true,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 2,
|
||||
"date": "2025-01-15",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 10,
|
||||
"routine": 2,
|
||||
"order": 3,
|
||||
"name": "Arms day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
92
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 3,
|
||||
"exercise": 92,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "21.00",
|
||||
"max_weight": "22.00",
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 21-22 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 2,
|
||||
"date": "2025-01-16",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 2,
|
||||
"date": "2025-01-17",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 2,
|
||||
"date": "2025-01-18",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 2,
|
||||
"date": "2025-01-19",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 3,
|
||||
"date": "2025-01-20",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 8,
|
||||
"routine": 2,
|
||||
"order": 1,
|
||||
"name": "Leg day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
76
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 2,
|
||||
"exercise": 76,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "80.00",
|
||||
"max_weight": null,
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 80 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 3,
|
||||
"date": "2025-01-21",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 9,
|
||||
"routine": 2,
|
||||
"order": 2,
|
||||
"name": "",
|
||||
"description": "",
|
||||
"is_rest": true,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 3,
|
||||
"date": "2025-01-22",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 10,
|
||||
"routine": 2,
|
||||
"order": 3,
|
||||
"name": "Arms day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
92
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 3,
|
||||
"exercise": 92,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "22.00",
|
||||
"max_weight": null,
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 22 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 3,
|
||||
"date": "2025-01-23",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 3,
|
||||
"date": "2025-01-24",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 3,
|
||||
"date": "2025-01-25",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 3,
|
||||
"date": "2025-01-26",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 4,
|
||||
"date": "2025-01-27",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 8,
|
||||
"routine": 2,
|
||||
"order": 1,
|
||||
"name": "Leg day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
76
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 2,
|
||||
"exercise": 76,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "80.00",
|
||||
"max_weight": null,
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 80 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 4,
|
||||
"date": "2025-01-28",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 9,
|
||||
"routine": 2,
|
||||
"order": 2,
|
||||
"name": "",
|
||||
"description": "",
|
||||
"is_rest": true,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 4,
|
||||
"date": "2025-01-29",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 10,
|
||||
"routine": 2,
|
||||
"order": 3,
|
||||
"name": "Arms day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
92
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 3,
|
||||
"exercise": 92,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "23.00",
|
||||
"max_weight": null,
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 23 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 4,
|
||||
"date": "2025-01-30",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 4,
|
||||
"date": "2025-01-31",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 4,
|
||||
"date": "2025-02-01",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 4,
|
||||
"date": "2025-02-02",
|
||||
"label": null,
|
||||
"day": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 5,
|
||||
"date": "2025-02-03",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 8,
|
||||
"routine": 2,
|
||||
"order": 1,
|
||||
"name": "Leg day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
76
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 2,
|
||||
"exercise": 76,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "80.00",
|
||||
"max_weight": null,
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 80 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iteration": 5,
|
||||
"date": "2025-02-04",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 9,
|
||||
"routine": 2,
|
||||
"order": 2,
|
||||
"name": "",
|
||||
"description": "",
|
||||
"is_rest": true,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"iteration": 5,
|
||||
"date": "2025-02-05",
|
||||
"label": null,
|
||||
"day": {
|
||||
"id": 10,
|
||||
"routine": 2,
|
||||
"order": 3,
|
||||
"name": "Arms day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null
|
||||
},
|
||||
"slots": [
|
||||
{
|
||||
"comment": "",
|
||||
"is_superset": false,
|
||||
"exercises": [
|
||||
92
|
||||
],
|
||||
"sets": [
|
||||
{
|
||||
"slot_entry_id": 3,
|
||||
"exercise": 92,
|
||||
"sets": 4,
|
||||
"max_sets": null,
|
||||
"weight": "24.00",
|
||||
"max_weight": null,
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"repetitions": "10.00",
|
||||
"max_repetitions": null,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions_rounding": null,
|
||||
"rir": null,
|
||||
"max_rir": null,
|
||||
"rpe": null,
|
||||
"rest": "120.00",
|
||||
"max_rest": null,
|
||||
"type": "normal",
|
||||
"text_repr": "4 Sätze, 10 × 24 kg 120s rest",
|
||||
"comment": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
1356
test/fixtures/routines/routine_date_sequence_gym.json
vendored
Normal file
1356
test/fixtures/routines/routine_date_sequence_gym.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
284
test/fixtures/routines/routine_logs.json
vendored
Normal file
284
test/fixtures/routines/routine_logs.json
vendored
Normal file
@@ -0,0 +1,284 @@
|
||||
[
|
||||
{
|
||||
"session": {
|
||||
"id": 5,
|
||||
"routine": 2,
|
||||
"day": null,
|
||||
"date": "2025-01-06",
|
||||
"notes": null,
|
||||
"impression": "2",
|
||||
"time_start": "20:28:49",
|
||||
"time_end": "23:35:53"
|
||||
},
|
||||
"logs": [
|
||||
{
|
||||
"id": 4,
|
||||
"date": "2025-01-06T00:00:00+01:00",
|
||||
"session": 5,
|
||||
"routine": 2,
|
||||
"iteration": 1,
|
||||
"slot_entry": 2,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "11.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "78.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "4",
|
||||
"rir_target": null,
|
||||
"rest": 150,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"date": "2025-01-06T00:00:00+01:00",
|
||||
"session": 5,
|
||||
"routine": 2,
|
||||
"iteration": 1,
|
||||
"slot_entry": 2,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "12.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "77.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "2",
|
||||
"rir_target": null,
|
||||
"rest": 159,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"date": "2025-01-06T00:00:00+01:00",
|
||||
"session": 5,
|
||||
"routine": 2,
|
||||
"iteration": 1,
|
||||
"slot_entry": 2,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "12.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "78.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "2.5",
|
||||
"rir_target": null,
|
||||
"rest": 143,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"date": "2025-01-06T00:00:00+01:00",
|
||||
"session": 5,
|
||||
"routine": 2,
|
||||
"iteration": 1,
|
||||
"slot_entry": 2,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "12.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "83.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "0.5",
|
||||
"rir_target": null,
|
||||
"rest": 160,
|
||||
"rest_target": 120
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"session": {
|
||||
"id": 6,
|
||||
"routine": 2,
|
||||
"day": null,
|
||||
"date": "2025-01-08",
|
||||
"notes": null,
|
||||
"impression": "2",
|
||||
"time_start": "12:55:54",
|
||||
"time_end": "14:25:31"
|
||||
},
|
||||
"logs": [
|
||||
{
|
||||
"id": 7,
|
||||
"date": "2025-01-08T00:00:00+01:00",
|
||||
"session": 6,
|
||||
"routine": 2,
|
||||
"iteration": 1,
|
||||
"slot_entry": 3,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "10.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "80.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "3",
|
||||
"rir_target": null,
|
||||
"rest": 131,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"date": "2025-01-08T00:00:00+01:00",
|
||||
"session": 6,
|
||||
"routine": 2,
|
||||
"iteration": 1,
|
||||
"slot_entry": 3,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "11.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "83.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "3",
|
||||
"rir_target": null,
|
||||
"rest": 128,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"date": "2025-01-08T00:00:00+01:00",
|
||||
"session": 6,
|
||||
"routine": 2,
|
||||
"iteration": 1,
|
||||
"slot_entry": 3,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "11.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "90.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "0.5",
|
||||
"rir_target": null,
|
||||
"rest": 121,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"date": "2025-01-08T00:00:00+01:00",
|
||||
"session": 6,
|
||||
"routine": 2,
|
||||
"iteration": 1,
|
||||
"slot_entry": 3,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "12.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "77.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "1.5",
|
||||
"rir_target": null,
|
||||
"rest": 129,
|
||||
"rest_target": 120
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"session": {
|
||||
"id": 7,
|
||||
"routine": 2,
|
||||
"day": null,
|
||||
"date": "2025-01-13",
|
||||
"notes": null,
|
||||
"impression": "2",
|
||||
"time_start": "18:48:45",
|
||||
"time_end": "20:20:52"
|
||||
},
|
||||
"logs": [
|
||||
{
|
||||
"id": 11,
|
||||
"date": "2025-01-13T00:00:00+01:00",
|
||||
"session": 7,
|
||||
"routine": 2,
|
||||
"iteration": 2,
|
||||
"slot_entry": 2,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "9.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "84.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "0",
|
||||
"rir_target": null,
|
||||
"rest": 128,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"date": "2025-01-13T00:00:00+01:00",
|
||||
"session": 7,
|
||||
"routine": 2,
|
||||
"iteration": 2,
|
||||
"slot_entry": 2,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "10.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "84.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "4",
|
||||
"rir_target": null,
|
||||
"rest": 149,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"date": "2025-01-13T00:00:00+01:00",
|
||||
"session": 7,
|
||||
"routine": 2,
|
||||
"iteration": 2,
|
||||
"slot_entry": 2,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "10.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "89.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "1.5",
|
||||
"rir_target": null,
|
||||
"rest": 120,
|
||||
"rest_target": 120
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"date": "2025-01-13T00:00:00+01:00",
|
||||
"session": 7,
|
||||
"routine": 2,
|
||||
"iteration": 2,
|
||||
"slot_entry": 2,
|
||||
"next_log": null,
|
||||
"exercise": 76,
|
||||
"repetitions_unit": 1,
|
||||
"repetitions": "12.00",
|
||||
"repetitions_target": "10.00",
|
||||
"weight_unit": 1,
|
||||
"weight": "90.00",
|
||||
"weight_target": "80.00",
|
||||
"rir": "2.5",
|
||||
"rir_target": null,
|
||||
"rest": 119,
|
||||
"rest_target": 120
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
266
test/fixtures/routines/routine_structure.json
vendored
Normal file
266
test/fixtures/routines/routine_structure.json
vendored
Normal file
@@ -0,0 +1,266 @@
|
||||
{
|
||||
"id": 101,
|
||||
"name": "Test 123",
|
||||
"description": "",
|
||||
"created": "2025-02-02T17:52:36.245680+01:00",
|
||||
"start": "2025-01-06",
|
||||
"end": "2025-03-28",
|
||||
"fit_in_week": true,
|
||||
"days": [
|
||||
{
|
||||
"id": 8,
|
||||
"routine": 2,
|
||||
"order": 1,
|
||||
"name": "Leg day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null,
|
||||
"slots": [
|
||||
{
|
||||
"id": 2,
|
||||
"day": 8,
|
||||
"order": 1,
|
||||
"comment": "",
|
||||
"entries": [
|
||||
{
|
||||
"id": 2,
|
||||
"slot": 2,
|
||||
"exercise": 76,
|
||||
"order": 1,
|
||||
"comment": "",
|
||||
"type": "normal",
|
||||
"class_name": null,
|
||||
"config": null,
|
||||
"repetition_unit": 1,
|
||||
"repetition_rounding": null,
|
||||
"repetitions_configs": [
|
||||
{
|
||||
"id": 2,
|
||||
"slot_entry": 2,
|
||||
"iteration": 1,
|
||||
"value": "10.00",
|
||||
"operation": "r",
|
||||
"step": "abs",
|
||||
"repeat": false,
|
||||
"requirements": null
|
||||
}
|
||||
],
|
||||
"max_repetitions_configs": [],
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"weight_configs": [
|
||||
{
|
||||
"id": 1,
|
||||
"slot_entry": 2,
|
||||
"iteration": 1,
|
||||
"value": "80.00",
|
||||
"operation": "r",
|
||||
"step": "abs",
|
||||
"repeat": false,
|
||||
"requirements": null
|
||||
}
|
||||
],
|
||||
"max_weight_configs": [],
|
||||
"set_nr_configs": [
|
||||
{
|
||||
"id": 2,
|
||||
"slot_entry": 2,
|
||||
"iteration": 1,
|
||||
"value": 4,
|
||||
"operation": "r",
|
||||
"step": "abs",
|
||||
"repeat": false,
|
||||
"requirements": null
|
||||
}
|
||||
],
|
||||
"max_set_nr_configs": [],
|
||||
"rir_configs": [],
|
||||
"max_rir_configs": [],
|
||||
"rest_configs": [
|
||||
{
|
||||
"id": 2,
|
||||
"slot_entry": 2,
|
||||
"iteration": 1,
|
||||
"value": 120,
|
||||
"operation": "r",
|
||||
"step": "abs",
|
||||
"repeat": false,
|
||||
"requirements": null
|
||||
}
|
||||
],
|
||||
"max_rest_configs": []
|
||||
}
|
||||
],
|
||||
"config": null
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"routine": 2,
|
||||
"order": 2,
|
||||
"name": "",
|
||||
"description": "",
|
||||
"is_rest": true,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null,
|
||||
"slots": []
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"routine": 2,
|
||||
"order": 3,
|
||||
"name": "Arms day",
|
||||
"description": "Leg day",
|
||||
"is_rest": false,
|
||||
"need_logs_to_advance": false,
|
||||
"type": "custom",
|
||||
"config": null,
|
||||
"slots": [
|
||||
{
|
||||
"id": 3,
|
||||
"day": 10,
|
||||
"order": 1,
|
||||
"comment": "",
|
||||
"entries": [
|
||||
{
|
||||
"id": 3,
|
||||
"slot": 3,
|
||||
"exercise": 92,
|
||||
"order": 1,
|
||||
"comment": "",
|
||||
"type": "normal",
|
||||
"class_name": null,
|
||||
"config": null,
|
||||
"repetition_unit": 1,
|
||||
"repetition_rounding": null,
|
||||
"repetitions_configs": [
|
||||
{
|
||||
"id": 3,
|
||||
"slot_entry": 3,
|
||||
"iteration": 1,
|
||||
"value": "10.00",
|
||||
"operation": "r",
|
||||
"step": "abs",
|
||||
"repeat": false,
|
||||
"requirements": null
|
||||
}
|
||||
],
|
||||
"max_repetitions_configs": [],
|
||||
"weight_unit": 1,
|
||||
"weight_rounding": null,
|
||||
"weight_configs": [
|
||||
{
|
||||
"id": 2,
|
||||
"slot_entry": 3,
|
||||
"iteration": 1,
|
||||
"value": "20.00",
|
||||
"operation": "r",
|
||||
"step": "na",
|
||||
"repeat": false,
|
||||
"requirements": {
|
||||
"rules": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"slot_entry": 3,
|
||||
"iteration": 2,
|
||||
"value": "1.00",
|
||||
"operation": "+",
|
||||
"step": "abs",
|
||||
"repeat": true,
|
||||
"requirements": {
|
||||
"rules": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"slot_entry": 3,
|
||||
"iteration": 8,
|
||||
"value": "20.00",
|
||||
"operation": "r",
|
||||
"step": "na",
|
||||
"repeat": false,
|
||||
"requirements": {
|
||||
"rules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"max_weight_configs": [
|
||||
{
|
||||
"id": 1,
|
||||
"slot_entry": 3,
|
||||
"iteration": 1,
|
||||
"value": "22.00",
|
||||
"operation": "r",
|
||||
"step": "na",
|
||||
"repeat": false,
|
||||
"requirements": {
|
||||
"rules": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"slot_entry": 3,
|
||||
"iteration": 2,
|
||||
"value": "1.00",
|
||||
"operation": "+",
|
||||
"step": "abs",
|
||||
"repeat": true,
|
||||
"requirements": {
|
||||
"rules": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"slot_entry": 3,
|
||||
"iteration": 8,
|
||||
"value": "22.00",
|
||||
"operation": "r",
|
||||
"step": "na",
|
||||
"repeat": false,
|
||||
"requirements": {
|
||||
"rules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"set_nr_configs": [
|
||||
{
|
||||
"id": 3,
|
||||
"slot_entry": 3,
|
||||
"iteration": 1,
|
||||
"value": 4,
|
||||
"operation": "r",
|
||||
"step": "abs",
|
||||
"repeat": false,
|
||||
"requirements": null
|
||||
}
|
||||
],
|
||||
"max_set_nr_configs": [],
|
||||
"rir_configs": [],
|
||||
"max_rir_configs": [],
|
||||
"rest_configs": [
|
||||
{
|
||||
"id": 3,
|
||||
"slot_entry": 3,
|
||||
"iteration": 1,
|
||||
"value": 120,
|
||||
"operation": "r",
|
||||
"step": "abs",
|
||||
"repeat": false,
|
||||
"requirements": null
|
||||
}
|
||||
],
|
||||
"max_rest_configs": []
|
||||
}
|
||||
],
|
||||
"config": null
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
4
test/fixtures/routines/slot_entry.json
vendored
4
test/fixtures/routines/slot_entry.json
vendored
@@ -9,7 +9,7 @@
|
||||
"config": null,
|
||||
"repetition_unit": 1,
|
||||
"repetition_rounding": "1.25",
|
||||
"reps_configs": [
|
||||
"repetitions_configs": [
|
||||
{
|
||||
"id": 139,
|
||||
"slot_entry": 143,
|
||||
@@ -22,7 +22,7 @@
|
||||
"requirements": null
|
||||
}
|
||||
],
|
||||
"max_reps_configs": [
|
||||
"max_repetitions_configs": [
|
||||
{
|
||||
"id": 1,
|
||||
"slot_entry": 143,
|
||||
|
||||
@@ -107,6 +107,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i3.WeightUnit>[],
|
||||
) as List<_i3.WeightUnit>);
|
||||
|
||||
@override
|
||||
set weightUnits(List<_i3.WeightUnit>? weightUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#weightUnits, weightUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i3.WeightUnit get defaultWeightUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultWeightUnit),
|
||||
@@ -122,6 +128,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i4.RepetitionUnit>[],
|
||||
) as List<_i4.RepetitionUnit>);
|
||||
|
||||
@override
|
||||
set repetitionUnits(List<_i4.RepetitionUnit>? repetitionUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#repetitionUnits, repetitionUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i4.RepetitionUnit get defaultRepetitionUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultRepetitionUnit),
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 166 KiB |
@@ -37,7 +37,7 @@ void main() {
|
||||
const unit2 = RepetitionUnit(id: 2, name: 'another name');
|
||||
const unit3 = RepetitionUnit(id: 3, name: 'this is repetition number 3');
|
||||
|
||||
var result = -1;
|
||||
int? result;
|
||||
|
||||
final slotEntry = SlotEntry(
|
||||
slotId: 1,
|
||||
@@ -54,7 +54,7 @@ void main() {
|
||||
|
||||
setUp(() {
|
||||
mockWorkoutPlans = MockRoutinesProvider();
|
||||
result = -1;
|
||||
result = null;
|
||||
when(mockWorkoutPlans.repetitionUnits).thenAnswer((_) => [unit1, unit2, unit3]);
|
||||
when(mockWorkoutPlans.findRepetitionUnitById(1)).thenReturn(unit1);
|
||||
when(mockWorkoutPlans.findRepetitionUnitById(2)).thenReturn(unit2);
|
||||
|
||||
@@ -107,6 +107,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i3.WeightUnit>[],
|
||||
) as List<_i3.WeightUnit>);
|
||||
|
||||
@override
|
||||
set weightUnits(List<_i3.WeightUnit>? weightUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#weightUnits, weightUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i3.WeightUnit get defaultWeightUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultWeightUnit),
|
||||
@@ -122,6 +128,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i4.RepetitionUnit>[],
|
||||
) as List<_i4.RepetitionUnit>);
|
||||
|
||||
@override
|
||||
set repetitionUnits(List<_i4.RepetitionUnit>? repetitionUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#repetitionUnits, repetitionUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i4.RepetitionUnit get defaultRepetitionUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultRepetitionUnit),
|
||||
|
||||
@@ -107,6 +107,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i3.WeightUnit>[],
|
||||
) as List<_i3.WeightUnit>);
|
||||
|
||||
@override
|
||||
set weightUnits(List<_i3.WeightUnit>? weightUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#weightUnits, weightUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i3.WeightUnit get defaultWeightUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultWeightUnit),
|
||||
@@ -122,6 +128,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i4.RepetitionUnit>[],
|
||||
) as List<_i4.RepetitionUnit>);
|
||||
|
||||
@override
|
||||
set repetitionUnits(List<_i4.RepetitionUnit>? repetitionUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#repetitionUnits, repetitionUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i4.RepetitionUnit get defaultRepetitionUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultRepetitionUnit),
|
||||
|
||||
@@ -66,8 +66,8 @@ void main() {
|
||||
expect(find.text('first day'), findsNWidgets(2));
|
||||
expect(find.text('chest, shoulders'), findsNWidgets(2), reason: 'description');
|
||||
|
||||
expect(find.text('second day'), findsNWidgets(3));
|
||||
expect(find.text('legs'), findsNWidgets(3), reason: 'description');
|
||||
expect(find.text('second day'), findsNWidgets(2));
|
||||
expect(find.text('legs'), findsNWidgets(2), reason: 'description');
|
||||
|
||||
// Edit the first day
|
||||
expect(find.byElementType(DayFormWidget), findsNothing);
|
||||
|
||||
@@ -107,6 +107,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i3.WeightUnit>[],
|
||||
) as List<_i3.WeightUnit>);
|
||||
|
||||
@override
|
||||
set weightUnits(List<_i3.WeightUnit>? weightUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#weightUnits, weightUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i3.WeightUnit get defaultWeightUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultWeightUnit),
|
||||
@@ -122,6 +128,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i4.RepetitionUnit>[],
|
||||
) as List<_i4.RepetitionUnit>);
|
||||
|
||||
@override
|
||||
set repetitionUnits(List<_i4.RepetitionUnit>? repetitionUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#repetitionUnits, repetitionUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i4.RepetitionUnit get defaultRepetitionUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultRepetitionUnit),
|
||||
|
||||
@@ -107,6 +107,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i3.WeightUnit>[],
|
||||
) as List<_i3.WeightUnit>);
|
||||
|
||||
@override
|
||||
set weightUnits(List<_i3.WeightUnit>? weightUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#weightUnits, weightUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i3.WeightUnit get defaultWeightUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultWeightUnit),
|
||||
@@ -122,6 +128,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i4.RepetitionUnit>[],
|
||||
) as List<_i4.RepetitionUnit>);
|
||||
|
||||
@override
|
||||
set repetitionUnits(List<_i4.RepetitionUnit>? repetitionUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#repetitionUnits, repetitionUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i4.RepetitionUnit get defaultRepetitionUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultRepetitionUnit),
|
||||
|
||||
@@ -107,6 +107,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i3.WeightUnit>[],
|
||||
) as List<_i3.WeightUnit>);
|
||||
|
||||
@override
|
||||
set weightUnits(List<_i3.WeightUnit>? weightUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#weightUnits, weightUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i3.WeightUnit get defaultWeightUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultWeightUnit),
|
||||
@@ -122,6 +128,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i4.RepetitionUnit>[],
|
||||
) as List<_i4.RepetitionUnit>);
|
||||
|
||||
@override
|
||||
set repetitionUnits(List<_i4.RepetitionUnit>? repetitionUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#repetitionUnits, repetitionUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i4.RepetitionUnit get defaultRepetitionUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultRepetitionUnit),
|
||||
|
||||
@@ -85,10 +85,9 @@ void main() {
|
||||
expect(find.text('first day'), findsOneWidget);
|
||||
expect(find.text('chest, shoulders'), findsOneWidget);
|
||||
|
||||
// The second day is repeated
|
||||
expect(find.text('second day'), findsNWidgets(2));
|
||||
expect(find.text('legs'), findsNWidgets(2));
|
||||
expect(find.text('second day'), findsOneWidget);
|
||||
expect(find.text('legs'), findsOneWidget);
|
||||
|
||||
expect(find.byType(Card), findsNWidgets(3));
|
||||
expect(find.byType(Card), findsNWidgets(2));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -33,10 +33,12 @@ import 'package:wger/providers/base_provider.dart';
|
||||
import 'package:wger/providers/exercises.dart';
|
||||
import 'package:wger/providers/routines.dart';
|
||||
|
||||
import '../../test_data/exercises.dart';
|
||||
import '../../test_data/routines.dart';
|
||||
import '../fixtures/fixture_reader.dart';
|
||||
import 'routines_provider_test.mocks.dart';
|
||||
|
||||
@GenerateMocks([WgerBaseProvider])
|
||||
@GenerateMocks([WgerBaseProvider, ExercisesProvider])
|
||||
void main() {
|
||||
final mockBaseProvider = MockWgerBaseProvider();
|
||||
|
||||
@@ -59,7 +61,7 @@ void main() {
|
||||
'description': 'Test workout abcd',
|
||||
'start': '2021-12-20',
|
||||
'end': '2022-06-06',
|
||||
'fit_in_week': false
|
||||
'fit_in_week': false,
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -163,5 +165,62 @@ void main() {
|
||||
expect(true, DateTime.parse(prefsJson['date']).isBefore(DateTime.now()));
|
||||
expect(true, DateTime.parse(prefsJson['expiresIn']).isAfter(DateTime.now()));
|
||||
});
|
||||
|
||||
test('Smoke test fetchAndSetRoutineFull', () async {
|
||||
//Arrange
|
||||
final structureUri = Uri.https('localhost', 'api/v2/routine/101/structure/');
|
||||
when(mockBaseProvider.makeUrl('routine', objectMethod: 'structure', id: 101))
|
||||
.thenReturn(structureUri);
|
||||
when(mockBaseProvider.fetch(structureUri)).thenAnswer((_) async => Future.value(
|
||||
jsonDecode(fixture('routines/routine_structure.json')),
|
||||
));
|
||||
|
||||
final dateSequenceDisplayUri =
|
||||
Uri.https('localhost', 'api/v2/routine/101/date-sequence-display/');
|
||||
when(mockBaseProvider.makeUrl('routine', objectMethod: 'date-sequence-display', id: 101))
|
||||
.thenReturn(dateSequenceDisplayUri);
|
||||
when(mockBaseProvider.fetch(dateSequenceDisplayUri)).thenAnswer((_) async => Future.value(
|
||||
jsonDecode(fixture('routines/routine_date_sequence_display.json')),
|
||||
));
|
||||
|
||||
final dateSequenceGymUri = Uri.https('localhost', 'api/v2/routine/101/date-sequence-gym/');
|
||||
when(mockBaseProvider.makeUrl('routine', objectMethod: 'date-sequence-gym', id: 101))
|
||||
.thenReturn(dateSequenceGymUri);
|
||||
when(mockBaseProvider.fetch(dateSequenceGymUri)).thenAnswer((_) async => Future.value(
|
||||
jsonDecode(fixture('routines/routine_date_sequence_gym.json')),
|
||||
));
|
||||
|
||||
final logsUri = Uri.https('localhost', 'api/v2/routine/101/logs/');
|
||||
when(mockBaseProvider.makeUrl('routine', objectMethod: 'logs', id: 101)).thenReturn(logsUri);
|
||||
when(mockBaseProvider.fetch(logsUri)).thenAnswer((_) async => Future.value(
|
||||
jsonDecode(fixture('routines/routine_logs.json')),
|
||||
));
|
||||
|
||||
final mockExercisesProvider = MockExercisesProvider();
|
||||
when(mockExercisesProvider.fetchAndSetExercise(76)).thenAnswer(
|
||||
(_) async => Future.value(testBenchPress),
|
||||
);
|
||||
when(mockExercisesProvider.fetchAndSetExercise(92)).thenAnswer(
|
||||
(_) async => Future.value(testCrunches),
|
||||
);
|
||||
|
||||
final provider = RoutinesProvider(mockBaseProvider, mockExercisesProvider, []);
|
||||
provider.repetitionUnits = testRepetitionUnits;
|
||||
provider.weightUnits = testWeightUnits;
|
||||
|
||||
// Act
|
||||
final result = await provider.fetchAndSetRoutineFull(101);
|
||||
|
||||
// Assert
|
||||
expect(result, isA<Routine>());
|
||||
expect(result.id, 101);
|
||||
expect(result.sessions.length, 3);
|
||||
expect(result.days.length, 3);
|
||||
expect(result.logs.length, 12);
|
||||
expect(result.dayDataCurrentIteration.length, 8);
|
||||
expect(result.dayDataCurrentIterationGym.length, 8);
|
||||
expect(result.dayData.length, 32);
|
||||
expect(result.dayDataGym.length, 32);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3,12 +3,20 @@
|
||||
// Do not manually edit this file.
|
||||
|
||||
// ignore_for_file: no_leading_underscores_for_library_prefixes
|
||||
import 'dart:async' as _i5;
|
||||
import 'dart:async' as _i11;
|
||||
import 'dart:ui' as _i13;
|
||||
|
||||
import 'package:http/http.dart' as _i3;
|
||||
import 'package:mockito/mockito.dart' as _i1;
|
||||
import 'package:wger/database/exercises/exercise_database.dart' as _i5;
|
||||
import 'package:wger/models/exercises/category.dart' as _i7;
|
||||
import 'package:wger/models/exercises/equipment.dart' as _i8;
|
||||
import 'package:wger/models/exercises/exercise.dart' as _i6;
|
||||
import 'package:wger/models/exercises/language.dart' as _i10;
|
||||
import 'package:wger/models/exercises/muscle.dart' as _i9;
|
||||
import 'package:wger/providers/auth.dart' as _i2;
|
||||
import 'package:wger/providers/base_provider.dart' as _i4;
|
||||
import 'package:wger/providers/exercises.dart' as _i12;
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: avoid_redundant_argument_values
|
||||
@@ -40,6 +48,37 @@ class _FakeResponse_3 extends _i1.SmartFake implements _i3.Response {
|
||||
_FakeResponse_3(Object parent, Invocation parentInvocation) : super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeWgerBaseProvider_4 extends _i1.SmartFake implements _i4.WgerBaseProvider {
|
||||
_FakeWgerBaseProvider_4(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeExerciseDatabase_5 extends _i1.SmartFake implements _i5.ExerciseDatabase {
|
||||
_FakeExerciseDatabase_5(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeExercise_6 extends _i1.SmartFake implements _i6.Exercise {
|
||||
_FakeExercise_6(Object parent, Invocation parentInvocation) : super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeExerciseCategory_7 extends _i1.SmartFake implements _i7.ExerciseCategory {
|
||||
_FakeExerciseCategory_7(Object parent, Invocation parentInvocation)
|
||||
: super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeEquipment_8 extends _i1.SmartFake implements _i8.Equipment {
|
||||
_FakeEquipment_8(Object parent, Invocation parentInvocation) : super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeMuscle_9 extends _i1.SmartFake implements _i9.Muscle {
|
||||
_FakeMuscle_9(Object parent, Invocation parentInvocation) : super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
class _FakeLanguage_10 extends _i1.SmartFake implements _i10.Language {
|
||||
_FakeLanguage_10(Object parent, Invocation parentInvocation) : super(parent, parentInvocation);
|
||||
}
|
||||
|
||||
/// A class which mocks [WgerBaseProvider].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
@@ -104,46 +143,400 @@ class MockWgerBaseProvider extends _i1.Mock implements _i4.WgerBaseProvider {
|
||||
) as Uri);
|
||||
|
||||
@override
|
||||
_i5.Future<dynamic> fetch(Uri? uri) => (super.noSuchMethod(
|
||||
_i11.Future<dynamic> fetch(Uri? uri) => (super.noSuchMethod(
|
||||
Invocation.method(#fetch, [uri]),
|
||||
returnValue: _i5.Future<dynamic>.value(),
|
||||
) as _i5.Future<dynamic>);
|
||||
returnValue: _i11.Future<dynamic>.value(),
|
||||
) as _i11.Future<dynamic>);
|
||||
|
||||
@override
|
||||
_i5.Future<List<dynamic>> fetchPaginated(Uri? uri) => (super.noSuchMethod(
|
||||
_i11.Future<List<dynamic>> fetchPaginated(Uri? uri) => (super.noSuchMethod(
|
||||
Invocation.method(#fetchPaginated, [uri]),
|
||||
returnValue: _i5.Future<List<dynamic>>.value(<dynamic>[]),
|
||||
) as _i5.Future<List<dynamic>>);
|
||||
returnValue: _i11.Future<List<dynamic>>.value(<dynamic>[]),
|
||||
) as _i11.Future<List<dynamic>>);
|
||||
|
||||
@override
|
||||
_i5.Future<Map<String, dynamic>> post(Map<String, dynamic>? data, Uri? uri) =>
|
||||
_i11.Future<Map<String, dynamic>> post(
|
||||
Map<String, dynamic>? data,
|
||||
Uri? uri,
|
||||
) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#post, [data, uri]),
|
||||
returnValue: _i5.Future<Map<String, dynamic>>.value(
|
||||
returnValue: _i11.Future<Map<String, dynamic>>.value(
|
||||
<String, dynamic>{},
|
||||
),
|
||||
) as _i5.Future<Map<String, dynamic>>);
|
||||
) as _i11.Future<Map<String, dynamic>>);
|
||||
|
||||
@override
|
||||
_i5.Future<Map<String, dynamic>> patch(
|
||||
_i11.Future<Map<String, dynamic>> patch(
|
||||
Map<String, dynamic>? data,
|
||||
Uri? uri,
|
||||
) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#patch, [data, uri]),
|
||||
returnValue: _i5.Future<Map<String, dynamic>>.value(
|
||||
returnValue: _i11.Future<Map<String, dynamic>>.value(
|
||||
<String, dynamic>{},
|
||||
),
|
||||
) as _i5.Future<Map<String, dynamic>>);
|
||||
) as _i11.Future<Map<String, dynamic>>);
|
||||
|
||||
@override
|
||||
_i5.Future<_i3.Response> deleteRequest(String? url, int? id) => (super.noSuchMethod(
|
||||
_i11.Future<_i3.Response> deleteRequest(String? url, int? id) => (super.noSuchMethod(
|
||||
Invocation.method(#deleteRequest, [url, id]),
|
||||
returnValue: _i5.Future<_i3.Response>.value(
|
||||
returnValue: _i11.Future<_i3.Response>.value(
|
||||
_FakeResponse_3(
|
||||
this,
|
||||
Invocation.method(#deleteRequest, [url, id]),
|
||||
),
|
||||
),
|
||||
) as _i5.Future<_i3.Response>);
|
||||
) as _i11.Future<_i3.Response>);
|
||||
}
|
||||
|
||||
/// A class which mocks [ExercisesProvider].
|
||||
///
|
||||
/// See the documentation for Mockito's code generation for more information.
|
||||
class MockExercisesProvider extends _i1.Mock implements _i12.ExercisesProvider {
|
||||
MockExercisesProvider() {
|
||||
_i1.throwOnMissingStub(this);
|
||||
}
|
||||
|
||||
@override
|
||||
_i4.WgerBaseProvider get baseProvider => (super.noSuchMethod(
|
||||
Invocation.getter(#baseProvider),
|
||||
returnValue: _FakeWgerBaseProvider_4(
|
||||
this,
|
||||
Invocation.getter(#baseProvider),
|
||||
),
|
||||
) as _i4.WgerBaseProvider);
|
||||
|
||||
@override
|
||||
_i5.ExerciseDatabase get database => (super.noSuchMethod(
|
||||
Invocation.getter(#database),
|
||||
returnValue: _FakeExerciseDatabase_5(
|
||||
this,
|
||||
Invocation.getter(#database),
|
||||
),
|
||||
) as _i5.ExerciseDatabase);
|
||||
|
||||
@override
|
||||
set database(_i5.ExerciseDatabase? _database) => super.noSuchMethod(
|
||||
Invocation.setter(#database, _database),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
List<_i6.Exercise> get exercises => (super.noSuchMethod(
|
||||
Invocation.getter(#exercises),
|
||||
returnValue: <_i6.Exercise>[],
|
||||
) as List<_i6.Exercise>);
|
||||
|
||||
@override
|
||||
set exercises(List<_i6.Exercise>? _exercises) => super.noSuchMethod(
|
||||
Invocation.setter(#exercises, _exercises),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
List<_i6.Exercise> get filteredExercises => (super.noSuchMethod(
|
||||
Invocation.getter(#filteredExercises),
|
||||
returnValue: <_i6.Exercise>[],
|
||||
) as List<_i6.Exercise>);
|
||||
|
||||
@override
|
||||
set filteredExercises(List<_i6.Exercise>? newFilteredExercises) => super.noSuchMethod(
|
||||
Invocation.setter(#filteredExercises, newFilteredExercises),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
Map<int, List<_i6.Exercise>> get exerciseBasesByVariation => (super.noSuchMethod(
|
||||
Invocation.getter(#exerciseBasesByVariation),
|
||||
returnValue: <int, List<_i6.Exercise>>{},
|
||||
) as Map<int, List<_i6.Exercise>>);
|
||||
|
||||
@override
|
||||
List<_i7.ExerciseCategory> get categories => (super.noSuchMethod(
|
||||
Invocation.getter(#categories),
|
||||
returnValue: <_i7.ExerciseCategory>[],
|
||||
) as List<_i7.ExerciseCategory>);
|
||||
|
||||
@override
|
||||
List<_i9.Muscle> get muscles => (super.noSuchMethod(
|
||||
Invocation.getter(#muscles),
|
||||
returnValue: <_i9.Muscle>[],
|
||||
) as List<_i9.Muscle>);
|
||||
|
||||
@override
|
||||
List<_i8.Equipment> get equipment => (super.noSuchMethod(
|
||||
Invocation.getter(#equipment),
|
||||
returnValue: <_i8.Equipment>[],
|
||||
) as List<_i8.Equipment>);
|
||||
|
||||
@override
|
||||
List<_i10.Language> get languages => (super.noSuchMethod(
|
||||
Invocation.getter(#languages),
|
||||
returnValue: <_i10.Language>[],
|
||||
) as List<_i10.Language>);
|
||||
|
||||
@override
|
||||
set languages(List<_i10.Language>? languages) => super.noSuchMethod(
|
||||
Invocation.setter(#languages, languages),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
bool get hasListeners =>
|
||||
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool);
|
||||
|
||||
@override
|
||||
_i11.Future<void> setFilters(_i12.Filters? newFilters) => (super.noSuchMethod(
|
||||
Invocation.method(#setFilters, [newFilters]),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
void initFilters() => super.noSuchMethod(
|
||||
Invocation.method(#initFilters, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i11.Future<void> findByFilters() => (super.noSuchMethod(
|
||||
Invocation.method(#findByFilters, []),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
void clear() => super.noSuchMethod(
|
||||
Invocation.method(#clear, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i6.Exercise findExerciseById(int? id) => (super.noSuchMethod(
|
||||
Invocation.method(#findExerciseById, [id]),
|
||||
returnValue: _FakeExercise_6(
|
||||
this,
|
||||
Invocation.method(#findExerciseById, [id]),
|
||||
),
|
||||
) as _i6.Exercise);
|
||||
|
||||
@override
|
||||
List<_i6.Exercise> findExercisesByVariationId(
|
||||
int? id, {
|
||||
int? exerciseBaseIdToExclude,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#findExercisesByVariationId,
|
||||
[id],
|
||||
{#exerciseBaseIdToExclude: exerciseBaseIdToExclude},
|
||||
),
|
||||
returnValue: <_i6.Exercise>[],
|
||||
) as List<_i6.Exercise>);
|
||||
|
||||
@override
|
||||
_i7.ExerciseCategory findCategoryById(int? id) => (super.noSuchMethod(
|
||||
Invocation.method(#findCategoryById, [id]),
|
||||
returnValue: _FakeExerciseCategory_7(
|
||||
this,
|
||||
Invocation.method(#findCategoryById, [id]),
|
||||
),
|
||||
) as _i7.ExerciseCategory);
|
||||
|
||||
@override
|
||||
_i8.Equipment findEquipmentById(int? id) => (super.noSuchMethod(
|
||||
Invocation.method(#findEquipmentById, [id]),
|
||||
returnValue: _FakeEquipment_8(
|
||||
this,
|
||||
Invocation.method(#findEquipmentById, [id]),
|
||||
),
|
||||
) as _i8.Equipment);
|
||||
|
||||
@override
|
||||
_i9.Muscle findMuscleById(int? id) => (super.noSuchMethod(
|
||||
Invocation.method(#findMuscleById, [id]),
|
||||
returnValue: _FakeMuscle_9(
|
||||
this,
|
||||
Invocation.method(#findMuscleById, [id]),
|
||||
),
|
||||
) as _i9.Muscle);
|
||||
|
||||
@override
|
||||
_i10.Language findLanguageById(int? id) => (super.noSuchMethod(
|
||||
Invocation.method(#findLanguageById, [id]),
|
||||
returnValue: _FakeLanguage_10(
|
||||
this,
|
||||
Invocation.method(#findLanguageById, [id]),
|
||||
),
|
||||
) as _i10.Language);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetCategoriesFromApi() => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetCategoriesFromApi, []),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetMusclesFromApi() => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetMusclesFromApi, []),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetEquipmentsFromApi() => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetEquipmentsFromApi, []),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetLanguagesFromApi() => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetLanguagesFromApi, []),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<_i6.Exercise?> fetchAndSetExercise(int? exerciseId) => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetExercise, [exerciseId]),
|
||||
returnValue: _i11.Future<_i6.Exercise?>.value(),
|
||||
) as _i11.Future<_i6.Exercise?>);
|
||||
|
||||
@override
|
||||
_i11.Future<_i6.Exercise> handleUpdateExerciseFromApi(
|
||||
_i5.ExerciseDatabase? database,
|
||||
int? exerciseId,
|
||||
) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(#handleUpdateExerciseFromApi, [
|
||||
database,
|
||||
exerciseId,
|
||||
]),
|
||||
returnValue: _i11.Future<_i6.Exercise>.value(
|
||||
_FakeExercise_6(
|
||||
this,
|
||||
Invocation.method(#handleUpdateExerciseFromApi, [
|
||||
database,
|
||||
exerciseId,
|
||||
]),
|
||||
),
|
||||
),
|
||||
) as _i11.Future<_i6.Exercise>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> initCacheTimesLocalPrefs({dynamic forceInit = false}) => (super.noSuchMethod(
|
||||
Invocation.method(#initCacheTimesLocalPrefs, [], {
|
||||
#forceInit: forceInit,
|
||||
}),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> clearAllCachesAndPrefs() => (super.noSuchMethod(
|
||||
Invocation.method(#clearAllCachesAndPrefs, []),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetInitialData() => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetInitialData, []),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> setExercisesFromDatabase(
|
||||
_i5.ExerciseDatabase? database, {
|
||||
bool? forceDeleteCache = false,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#setExercisesFromDatabase,
|
||||
[database],
|
||||
{#forceDeleteCache: forceDeleteCache},
|
||||
),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> updateExerciseCache(_i5.ExerciseDatabase? database) => (super.noSuchMethod(
|
||||
Invocation.method(#updateExerciseCache, [database]),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetMuscles(_i5.ExerciseDatabase? database) => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetMuscles, [database]),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetCategories(_i5.ExerciseDatabase? database) => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetCategories, [database]),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetLanguages(_i5.ExerciseDatabase? database) => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetLanguages, [database]),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<void> fetchAndSetEquipments(_i5.ExerciseDatabase? database) => (super.noSuchMethod(
|
||||
Invocation.method(#fetchAndSetEquipments, [database]),
|
||||
returnValue: _i11.Future<void>.value(),
|
||||
returnValueForMissingStub: _i11.Future<void>.value(),
|
||||
) as _i11.Future<void>);
|
||||
|
||||
@override
|
||||
_i11.Future<List<_i6.Exercise>> searchExercise(
|
||||
String? name, {
|
||||
String? languageCode = 'en',
|
||||
bool? searchEnglish = false,
|
||||
}) =>
|
||||
(super.noSuchMethod(
|
||||
Invocation.method(
|
||||
#searchExercise,
|
||||
[name],
|
||||
{#languageCode: languageCode, #searchEnglish: searchEnglish},
|
||||
),
|
||||
returnValue: _i11.Future<List<_i6.Exercise>>.value(
|
||||
<_i6.Exercise>[],
|
||||
),
|
||||
) as _i11.Future<List<_i6.Exercise>>);
|
||||
|
||||
@override
|
||||
void addListener(_i13.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#addListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void removeListener(_i13.VoidCallback? listener) => super.noSuchMethod(
|
||||
Invocation.method(#removeListener, [listener]),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void dispose() => super.noSuchMethod(
|
||||
Invocation.method(#dispose, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
void notifyListeners() => super.noSuchMethod(
|
||||
Invocation.method(#notifyListeners, []),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -107,6 +107,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i3.WeightUnit>[],
|
||||
) as List<_i3.WeightUnit>);
|
||||
|
||||
@override
|
||||
set weightUnits(List<_i3.WeightUnit>? weightUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#weightUnits, weightUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i3.WeightUnit get defaultWeightUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultWeightUnit),
|
||||
@@ -122,6 +128,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i4.RepetitionUnit>[],
|
||||
) as List<_i4.RepetitionUnit>);
|
||||
|
||||
@override
|
||||
set repetitionUnits(List<_i4.RepetitionUnit>? repetitionUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#repetitionUnits, repetitionUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i4.RepetitionUnit get defaultRepetitionUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultRepetitionUnit),
|
||||
|
||||
@@ -37,9 +37,9 @@ void main() {
|
||||
expect(slotEntry.repetitionRounding, 1.25);
|
||||
expect(slotEntry.weightUnitId, 1);
|
||||
expect(slotEntry.weightRounding, 2.5);
|
||||
expect(slotEntry.repsConfigs.length, 1);
|
||||
expect(slotEntry.repsConfigs[0].id, 139);
|
||||
expect(slotEntry.maxRepsConfigs.length, 1);
|
||||
expect(slotEntry.repetitionsConfigs.length, 1);
|
||||
expect(slotEntry.repetitionsConfigs[0].id, 139);
|
||||
expect(slotEntry.maxRepetitionsConfigs.length, 1);
|
||||
expect(slotEntry.weightConfigs.length, 1);
|
||||
expect(slotEntry.maxWeightConfigs.length, 1);
|
||||
expect(slotEntry.nrOfSetsConfigs.length, 1);
|
||||
|
||||
@@ -33,7 +33,7 @@ import 'weight_unit_form_widget_test.mocks.dart';
|
||||
@GenerateMocks([RoutinesProvider])
|
||||
void main() {
|
||||
var mockWorkoutPlans = MockRoutinesProvider();
|
||||
var result = -1;
|
||||
int? result;
|
||||
|
||||
const unit1 = WeightUnit(id: 1, name: 'kg');
|
||||
const unit2 = WeightUnit(id: 2, name: 'donkeys');
|
||||
@@ -53,7 +53,7 @@ void main() {
|
||||
slotEntry.weightUnitObj = unit1;
|
||||
|
||||
setUp(() {
|
||||
result = -1;
|
||||
result = null;
|
||||
mockWorkoutPlans = MockRoutinesProvider();
|
||||
when(mockWorkoutPlans.weightUnits).thenAnswer((_) => [unit1, unit2, unit3]);
|
||||
when(mockWorkoutPlans.findWeightUnitById(1)).thenReturn(unit1);
|
||||
|
||||
@@ -107,6 +107,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i3.WeightUnit>[],
|
||||
) as List<_i3.WeightUnit>);
|
||||
|
||||
@override
|
||||
set weightUnits(List<_i3.WeightUnit>? weightUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#weightUnits, weightUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i3.WeightUnit get defaultWeightUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultWeightUnit),
|
||||
@@ -122,6 +128,12 @@ class MockRoutinesProvider extends _i1.Mock implements _i12.RoutinesProvider {
|
||||
returnValue: <_i4.RepetitionUnit>[],
|
||||
) as List<_i4.RepetitionUnit>);
|
||||
|
||||
@override
|
||||
set repetitionUnits(List<_i4.RepetitionUnit>? repetitionUnits) => super.noSuchMethod(
|
||||
Invocation.setter(#repetitionUnits, repetitionUnits),
|
||||
returnValueForMissingStub: null,
|
||||
);
|
||||
|
||||
@override
|
||||
_i4.RepetitionUnit get defaultRepetitionUnit => (super.noSuchMethod(
|
||||
Invocation.getter(#defaultRepetitionUnit),
|
||||
|
||||
@@ -50,7 +50,7 @@ const tEquipment3 = Equipment(id: 3, name: 'Bench');
|
||||
const tEquipment4 = Equipment(id: 10, name: 'Gym mat');
|
||||
const testEquipment = [tEquipment1, tEquipment2, tEquipment3];
|
||||
|
||||
final benchPress = Exercise(
|
||||
final testBenchPress = Exercise(
|
||||
id: 1,
|
||||
uuid: '364f196c-881b-4839-8bfc-9e8f651521b6',
|
||||
created: DateTime(2021, 09, 01),
|
||||
@@ -62,7 +62,7 @@ final benchPress = Exercise(
|
||||
translations: [benchPressEn, benchPressDe],
|
||||
);
|
||||
|
||||
final crunches = Exercise(
|
||||
final testCrunches = Exercise(
|
||||
id: 2,
|
||||
uuid: '82415754-fc4c-49ea-8ca7-1516dd36d5a0',
|
||||
created: DateTime(2021, 08, 01),
|
||||
@@ -74,7 +74,7 @@ final crunches = Exercise(
|
||||
translations: [crunchesEn, crunchesDe, crunchesFr],
|
||||
);
|
||||
|
||||
final deadLift = Exercise(
|
||||
final testDeadLift = Exercise(
|
||||
id: 3,
|
||||
uuid: 'ca84e2c5-5608-4d6d-ba57-6d4b6b5e7acd',
|
||||
created: DateTime(2021, 08, 01),
|
||||
@@ -86,7 +86,7 @@ final deadLift = Exercise(
|
||||
translations: [deadLiftEn],
|
||||
);
|
||||
|
||||
final curls = Exercise(
|
||||
final testCurls = Exercise(
|
||||
id: 4,
|
||||
uuid: '361f024c-fdf8-4146-b7d7-0c1b67c58141',
|
||||
created: DateTime(2021, 08, 01),
|
||||
@@ -98,7 +98,7 @@ final curls = Exercise(
|
||||
translations: [curlsEn],
|
||||
);
|
||||
|
||||
final squats = Exercise(
|
||||
final testSquats = Exercise(
|
||||
id: 5,
|
||||
uuid: '361f024c-fdf8-4146-b7d7-0c1b67c58141',
|
||||
created: DateTime(2021, 08, 01),
|
||||
@@ -110,7 +110,7 @@ final squats = Exercise(
|
||||
translations: [squatsEn],
|
||||
);
|
||||
|
||||
final sideRaises = Exercise(
|
||||
final testSideRaises = Exercise(
|
||||
id: 6,
|
||||
uuid: '721ff972-c568-41e3-8cf5-cf1e5c5c801c',
|
||||
created: DateTime(2022, 11, 01),
|
||||
@@ -213,16 +213,16 @@ final sideRaisesEn = Translation(
|
||||
);
|
||||
|
||||
List<Exercise> getTestExercises() {
|
||||
return [benchPress, crunches, deadLift, curls, squats, sideRaises];
|
||||
return [testBenchPress, testCrunches, testDeadLift, testCurls, testSquats, testSideRaises];
|
||||
}
|
||||
|
||||
List<Exercise> getScreenshotExercises() {
|
||||
benchPress.translations = benchPressTranslations;
|
||||
crunches.translations = crunchesTranslations;
|
||||
deadLift.translations = deadLiftTranslations;
|
||||
curls.translations = curlsTranslations;
|
||||
squats.translations = squatsTranslations;
|
||||
sideRaises.translations = raisesTranslations;
|
||||
testBenchPress.translations = benchPressTranslations;
|
||||
testCrunches.translations = crunchesTranslations;
|
||||
testDeadLift.translations = deadLiftTranslations;
|
||||
testCurls.translations = curlsTranslations;
|
||||
testSquats.translations = squatsTranslations;
|
||||
testSideRaises.translations = raisesTranslations;
|
||||
|
||||
return [benchPress, crunches, deadLift, curls, squats, sideRaises];
|
||||
return [testBenchPress, testCrunches, testDeadLift, testCurls, testSquats, testSideRaises];
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
nrOfSetsConfigs: [
|
||||
BaseConfig.firstIteration(4, 1),
|
||||
],
|
||||
repsConfigs: [
|
||||
repetitionsConfigs: [
|
||||
BaseConfig.firstIteration(3, 1),
|
||||
],
|
||||
weightConfigs: [
|
||||
@@ -138,7 +138,6 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
value: 5,
|
||||
operation: '+',
|
||||
step: 'abs',
|
||||
needLogToApply: false,
|
||||
requirements: null,
|
||||
repeat: true,
|
||||
),
|
||||
@@ -170,7 +169,7 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
weightConfigs: [
|
||||
BaseConfig.firstIteration(80, 1),
|
||||
],
|
||||
repsConfigs: [
|
||||
repetitionsConfigs: [
|
||||
BaseConfig.firstIteration(5, 1),
|
||||
],
|
||||
nrOfSetsConfigs: [
|
||||
@@ -198,7 +197,7 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
nrOfSetsConfigs: [
|
||||
BaseConfig.firstIteration(4, 1),
|
||||
],
|
||||
repsConfigs: [
|
||||
repetitionsConfigs: [
|
||||
BaseConfig.firstIteration(12, 1),
|
||||
],
|
||||
weightConfigs: [
|
||||
@@ -227,6 +226,172 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
slots: [slotSquat],
|
||||
);
|
||||
|
||||
final List<DayData> dayDataGym = [
|
||||
DayData(
|
||||
iteration: 1,
|
||||
date: DateTime(2024, 11, 01),
|
||||
label: '',
|
||||
day: dayChestShoulders,
|
||||
slots: [
|
||||
SlotData(
|
||||
comment: 'Make sure to warm up',
|
||||
isSuperset: false,
|
||||
exerciseIds: [testExercises[0].id!],
|
||||
setConfigs: [
|
||||
SetConfigData(
|
||||
exerciseId: 1,
|
||||
exercise: testExercises[0],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[0].id!,
|
||||
exercise: testExercises[0],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[0].id!,
|
||||
exercise: testExercises[0],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
],
|
||||
),
|
||||
SlotData(
|
||||
comment: 'Side rises',
|
||||
isSuperset: false,
|
||||
exerciseIds: [testExercises[5].id!],
|
||||
setConfigs: [
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[5].id!,
|
||||
exercise: testExercises[5],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 12,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 10,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 60,
|
||||
rir: '',
|
||||
rpe: '',
|
||||
textRepr: '12x10kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[5].id!,
|
||||
exercise: testExercises[5],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 12,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 10,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 60,
|
||||
rir: '',
|
||||
rpe: '',
|
||||
textRepr: '12x10kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[5].id!,
|
||||
exercise: testExercises[5],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 12,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 10,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 60,
|
||||
rir: '',
|
||||
rpe: '',
|
||||
textRepr: '12x10kg',
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
DayData(
|
||||
iteration: 1,
|
||||
date: DateTime(2024, 11, 02),
|
||||
label: '',
|
||||
day: dayLegs,
|
||||
slots: [
|
||||
SlotData(
|
||||
comment: 'Squats',
|
||||
isSuperset: false,
|
||||
exerciseIds: [testExercises[4].id!],
|
||||
setConfigs: [
|
||||
SetConfigData(
|
||||
exerciseId: 8,
|
||||
exercise: testExercises[4],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[4].id!,
|
||||
exercise: testExercises[4],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[4].id!,
|
||||
exercise: testExercises[4],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
];
|
||||
|
||||
final List<DayData> dayDataDisplay = [
|
||||
DayData(
|
||||
iteration: 1,
|
||||
@@ -245,7 +410,7 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 4,
|
||||
repetitions: 3,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
@@ -266,7 +431,7 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 4,
|
||||
repetitions: 12,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 10,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 60,
|
||||
@@ -295,7 +460,7 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 4,
|
||||
repetitions: 3,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
repetitionsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
@@ -333,203 +498,7 @@ Routine getTestRoutine({List<Exercise>? exercises}) {
|
||||
days: [dayChestShoulders, dayLegs],
|
||||
sessions: [session1, session2],
|
||||
dayData: dayDataDisplay,
|
||||
dayDataCurrentIteration: [
|
||||
...dayDataDisplay,
|
||||
DayData(
|
||||
iteration: 2,
|
||||
date: DateTime(2024, 11, 02),
|
||||
label: '',
|
||||
day: dayLegs,
|
||||
slots: [
|
||||
SlotData(
|
||||
comment: 'Squats',
|
||||
isSuperset: false,
|
||||
exerciseIds: [8],
|
||||
setConfigs: [
|
||||
SetConfigData(
|
||||
exerciseId: 8,
|
||||
exercise: testExercises[4],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 5,
|
||||
repetitions: 8,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 105,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1',
|
||||
rpe: '9',
|
||||
textRepr: '5 sets 8x105kg',
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
dayDataGym: [
|
||||
DayData(
|
||||
iteration: 1,
|
||||
date: DateTime(2024, 11, 01),
|
||||
label: '',
|
||||
day: dayChestShoulders,
|
||||
slots: [
|
||||
SlotData(
|
||||
comment: 'Make sure to warm up',
|
||||
isSuperset: false,
|
||||
exerciseIds: [testExercises[0].id!],
|
||||
setConfigs: [
|
||||
SetConfigData(
|
||||
exerciseId: 1,
|
||||
exercise: testExercises[0],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[0].id!,
|
||||
exercise: testExercises[0],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[0].id!,
|
||||
exercise: testExercises[0],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
],
|
||||
),
|
||||
SlotData(
|
||||
comment: 'Side rises',
|
||||
isSuperset: false,
|
||||
exerciseIds: [testExercises[5].id!],
|
||||
setConfigs: [
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[5].id!,
|
||||
exercise: testExercises[5],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 12,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 10,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 60,
|
||||
rir: '',
|
||||
rpe: '',
|
||||
textRepr: '12x10kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[5].id!,
|
||||
exercise: testExercises[5],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 12,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 10,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 60,
|
||||
rir: '',
|
||||
rpe: '',
|
||||
textRepr: '12x10kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[5].id!,
|
||||
exercise: testExercises[5],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 12,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 10,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 60,
|
||||
rir: '',
|
||||
rpe: '',
|
||||
textRepr: '12x10kg',
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
DayData(
|
||||
iteration: 1,
|
||||
date: DateTime(2024, 11, 02),
|
||||
label: '',
|
||||
day: dayLegs,
|
||||
slots: [
|
||||
SlotData(
|
||||
comment: 'Squats',
|
||||
isSuperset: false,
|
||||
exerciseIds: [testExercises[4].id!],
|
||||
setConfigs: [
|
||||
SetConfigData(
|
||||
exerciseId: 8,
|
||||
exercise: testExercises[4],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[4].id!,
|
||||
exercise: testExercises[4],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
SetConfigData(
|
||||
exerciseId: testExercises[4].id!,
|
||||
exercise: testExercises[4],
|
||||
slotEntryId: 1,
|
||||
nrOfSets: 1,
|
||||
repetitions: 3,
|
||||
repsUnit: testRepetitionUnit1,
|
||||
weight: 100,
|
||||
weightUnit: testWeightUnit1,
|
||||
restTime: 120,
|
||||
rir: '1.5',
|
||||
rpe: '8',
|
||||
textRepr: '3x100kg',
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
dayDataGym: dayDataGym,
|
||||
);
|
||||
|
||||
return routine;
|
||||
|
||||
Reference in New Issue
Block a user