" A MFTWorkoutLogTest is a test class for testing the behavior of MFTWorkoutLog " Class { #name : 'MFTWorkoutLogTest', #superclass : 'TestCase', #category : 'MyFitnessTracker-Core-Tests-Logging', #package : 'MyFitnessTracker-Core-Tests', #tag : 'Logging' } { #category : 'tests' } MFTWorkoutLogTest >> testAddSetGroupAppendsGroupLog [ | workoutLog firstGroup secondGroup | workoutLog := MFTWorkoutLog new. firstGroup := MFTSetGroupLog new. secondGroup := MFTSetGroupLog new. workoutLog addSetGroup: firstGroup. workoutLog addSetGroup: secondGroup. self assert: workoutLog setGroups asArray equals: { firstGroup. secondGroup } ] { #category : 'tests' } MFTWorkoutLogTest >> testCanonicalNameWithoutPrescription [ | workoutLog | workoutLog := MFTWorkoutLog new. self assert: workoutLog canonicalName equals: 'no prescription' ] { #category : 'tests' } MFTWorkoutLogTest >> testDurationIsZeroWhenWorkoutHasNotStarted [ | workoutLog | workoutLog := MFTWorkoutLog new. self assert: workoutLog duration equals: Duration zero ] { #category : 'tests' } MFTWorkoutLogTest >> testDurationRunsFromStartToNowWhenFinishIsMissing [ | workoutLog start | workoutLog := MFTWorkoutLog new. start := DateAndTime now - 1 minute. workoutLog start: start. self assert: workoutLog duration >= 1 minute ] { #category : 'tests' } MFTWorkoutLogTest >> testDurationUsesFinishWhenPresent [ | workoutLog start finish | workoutLog := MFTWorkoutLog new. start := DateAndTime year: 2026 month: 5 day: 1 hour: 10 minute: 0 second: 0 offset: 0 hours. finish := DateAndTime year: 2026 month: 5 day: 1 hour: 11 minute: 30 second: 0 offset: 0 hours. workoutLog start: start; finish: finish. self assert: workoutLog duration equals: 90 minutes ] { #category : 'tests' } MFTWorkoutLogTest >> testEmptyWorkoutLogIsCompletelyLogged [ | workoutLog | workoutLog := MFTWorkoutLog new. self assert: workoutLog isCompletelyLogged ] { #category : 'tests' } MFTWorkoutLogTest >> testFinishNowRecordsFinishDateAndTime [ | workoutLog | workoutLog := MFTWorkoutLog new. workoutLog finishNow. self assert: workoutLog finish isNotNil. self assert: (workoutLog finish isKindOf: DateAndTime) ] { #category : 'tests' } MFTWorkoutLogTest >> testNewWorkoutLogStartsWithEmptySetGroups [ | workoutLog | workoutLog := MFTWorkoutLog new. self assert: workoutLog setGroups isEmpty ] { #category : 'tests' } MFTWorkoutLogTest >> testPrescriptionCanBeRecorded [ | workoutLog prescription | workoutLog := MFTWorkoutLog new. prescription := Object new. workoutLog prescription: prescription. self assert: workoutLog prescription identicalTo: prescription ] { #category : 'tests' } MFTWorkoutLogTest >> testSetForPrescriptionRaisesErrorWhenPrescriptionIsUnknown [ | workoutLog knownPrescription unknownPrescription knownSet groupLog | workoutLog := MFTWorkoutLog new. knownPrescription := Object new. unknownPrescription := Object new. knownSet := MFTSetLog forPrescription: knownPrescription. groupLog := MFTSetGroupLog new. groupLog addSet: knownSet. workoutLog addSetGroup: groupLog. self should: [ workoutLog setForPrescription: unknownPrescription ] raise: Error ] { #category : 'tests' } MFTWorkoutLogTest >> testSetForPrescriptionReturnsMatchingSetLogByEquality [ | workoutLog firstPrescription secondPrescription firstSet secondSet groupLog | workoutLog := MFTWorkoutLog new. firstPrescription := Object new. secondPrescription := Object new. firstSet := MFTSetLog forPrescription: firstPrescription. secondSet := MFTSetLog forPrescription: secondPrescription. groupLog := MFTSetGroupLog new. groupLog sets: { firstSet. secondSet }. workoutLog addSetGroup: groupLog. self assert: (workoutLog setForPrescription: secondPrescription) identicalTo: secondSet ] { #category : 'tests' } MFTWorkoutLogTest >> testSetGroupsSetterCopiesAsOrderedCollection [ | workoutLog firstGroup secondGroup sourceCollection | workoutLog := MFTWorkoutLog new. firstGroup := MFTSetGroupLog new. secondGroup := MFTSetGroupLog new. sourceCollection := { firstGroup. secondGroup }. workoutLog setGroups: sourceCollection. self assert: workoutLog setGroups class equals: OrderedCollection. self assert: workoutLog setGroups asArray equals: sourceCollection ] { #category : 'tests' } MFTWorkoutLogTest >> testSetsFlattensAllGroupSetsInOrder [ | workoutLog firstGroup secondGroup firstSet secondSet thirdSet | workoutLog := MFTWorkoutLog new. firstGroup := MFTSetGroupLog new. secondGroup := MFTSetGroupLog new. firstSet := MFTSetLog new. secondSet := MFTSetLog new. thirdSet := MFTSetLog new. firstGroup sets: { firstSet. secondSet }. secondGroup sets: { thirdSet }. workoutLog setGroups: { firstGroup. secondGroup }. self assert: workoutLog sets asArray equals: { firstSet. secondSet. thirdSet } ] { #category : 'tests' } MFTWorkoutLogTest >> testStartAndFinishCanBeRecorded [ | workoutLog start finish | workoutLog := MFTWorkoutLog new. start := DateAndTime year: 2026 month: 5 day: 1 hour: 10 minute: 0 second: 0 offset: 0 hours. finish := DateAndTime year: 2026 month: 5 day: 1 hour: 10 minute: 45 second: 0 offset: 0 hours. workoutLog start: start; finish: finish. self assert: workoutLog start equals: start. self assert: workoutLog finish equals: finish ] { #category : 'tests' } MFTWorkoutLogTest >> testStartNowRecordsStartDateAndTime [ | workoutLog | workoutLog := MFTWorkoutLog new. workoutLog startNow. self assert: workoutLog start isNotNil. self assert: (workoutLog start isKindOf: DateAndTime) ] { #category : 'tests' } MFTWorkoutLogTest >> testWorkoutLogIsCompletelyLoggedWhenAllGroupsAreLogged [ | workoutLog firstGroup secondGroup | workoutLog := MFTWorkoutLog new. firstGroup := MFTSetGroupLog new. secondGroup := MFTSetGroupLog new. firstGroup sets: { (MFTSetLog reps: 6 load: 100) }. secondGroup sets: { (MFTSetLog reps: 5 load: 110) }. workoutLog setGroups: { firstGroup. secondGroup }. self assert: workoutLog isCompletelyLogged ] { #category : 'tests' } MFTWorkoutLogTest >> testWorkoutLogIsNotCompletelyLoggedWhenAnyGroupIsIncomplete [ | workoutLog completeGroup incompleteGroup | workoutLog := MFTWorkoutLog new. completeGroup := MFTSetGroupLog new. incompleteGroup := MFTSetGroupLog new. completeGroup sets: { (MFTSetLog reps: 6 load: 100) }. incompleteGroup sets: { MFTSetLog new }. workoutLog setGroups: { completeGroup. incompleteGroup }. self deny: workoutLog isCompletelyLogged ]