feat(exécution): clarifie Durée et Temps réalisé, renomme Durée par défaut (s)
Sépare la notion de Durée (paramètre configuré) de Temps réalisé (résultat mesuré au chronomètre), renomme le champ « Temps par défaut (s) » en « Durée par défaut (s) » dans la bibliothèque d'exercices, et limite l'exécution à un seul chrono visible à la fois. Le mode Score chrono est conservé tel quel comme mode du score. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -19,6 +19,95 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
test('Exercise rejects manual score defaults on stopwatch score mode', () {
|
||||
expect(
|
||||
() => Exercise(
|
||||
metadata: _metadata('exercise-1'),
|
||||
name: 'Sprint',
|
||||
hasTimeMeasure: false,
|
||||
hasRepsMeasure: false,
|
||||
hasScoreMeasure: true,
|
||||
scoreInputMode: ScoreInputMode.stopwatch,
|
||||
defaultTargetScore: 10,
|
||||
),
|
||||
throwsA(isA<DomainException>()),
|
||||
);
|
||||
expect(
|
||||
() => Exercise(
|
||||
metadata: _metadata('exercise-2'),
|
||||
name: 'Sprint',
|
||||
hasTimeMeasure: false,
|
||||
hasRepsMeasure: false,
|
||||
hasScoreMeasure: true,
|
||||
scoreInputMode: ScoreInputMode.stopwatch,
|
||||
defaultTargetScore: 10,
|
||||
defaultTargetScoreTimeMs: 12000,
|
||||
),
|
||||
throwsA(isA<DomainException>()),
|
||||
);
|
||||
});
|
||||
|
||||
test('Program exercise allows reps or time with stopwatch score', () {
|
||||
final repsAndScore = ProgramExercise(
|
||||
metadata: _metadata('program-exercise-1'),
|
||||
programId: 'program-1',
|
||||
position: 0,
|
||||
exerciseNameSnapshot: 'Sprint reps',
|
||||
availableTimeSnapshot: false,
|
||||
availableRepsSnapshot: true,
|
||||
availableScoreSnapshot: true,
|
||||
scoreInputModeSnapshot: ScoreInputMode.stopwatch,
|
||||
setsCount: 3,
|
||||
timeEnabled: false,
|
||||
repsEnabled: true,
|
||||
scoreEnabled: true,
|
||||
targetReps: 10,
|
||||
targetScoreTimeMs: 12000,
|
||||
);
|
||||
final timeAndScore = ProgramExercise(
|
||||
metadata: _metadata('program-exercise-2'),
|
||||
programId: 'program-1',
|
||||
position: 1,
|
||||
exerciseNameSnapshot: 'Sprint time',
|
||||
availableTimeSnapshot: true,
|
||||
availableRepsSnapshot: false,
|
||||
availableScoreSnapshot: true,
|
||||
scoreInputModeSnapshot: ScoreInputMode.stopwatch,
|
||||
setsCount: 3,
|
||||
timeEnabled: true,
|
||||
repsEnabled: false,
|
||||
scoreEnabled: true,
|
||||
targetTimeSeconds: 30,
|
||||
targetScoreTimeMs: 12000,
|
||||
);
|
||||
|
||||
expect(repsAndScore.scoreInputModeSnapshot, ScoreInputMode.stopwatch);
|
||||
expect(timeAndScore.scoreInputModeSnapshot, ScoreInputMode.stopwatch);
|
||||
});
|
||||
|
||||
test('Program exercise rejects manual score target on stopwatch score', () {
|
||||
expect(
|
||||
() => ProgramExercise(
|
||||
metadata: _metadata('program-exercise-1'),
|
||||
programId: 'program-1',
|
||||
position: 0,
|
||||
exerciseNameSnapshot: 'Sprint score',
|
||||
availableTimeSnapshot: false,
|
||||
availableRepsSnapshot: true,
|
||||
availableScoreSnapshot: true,
|
||||
scoreInputModeSnapshot: ScoreInputMode.stopwatch,
|
||||
setsCount: 3,
|
||||
timeEnabled: false,
|
||||
repsEnabled: true,
|
||||
scoreEnabled: true,
|
||||
targetReps: 10,
|
||||
targetScore: 10,
|
||||
targetScoreTimeMs: 12000,
|
||||
),
|
||||
throwsA(isA<DomainException>()),
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'Exercise use case rejects active measures without default targets',
|
||||
() async {
|
||||
|
||||
Reference in New Issue
Block a user