" A MFTWorkoutLogBookTest is a test class for testing the behavior of MFTWorkoutLogBook " Class { #name : 'MFTWorkoutLogBookTest', #superclass : 'TestCase', #category : 'MyFitnessTracker-Core-Tests-Logging', #package : 'MyFitnessTracker-Core-Tests', #tag : 'Logging' } { #category : 'tests' } MFTWorkoutLogBookTest >> testDurationSinceLastWorkoutIsNilWhenLogBookIsEmpty [ | logBook | logBook := MFTWorkoutLogBook new. self assert: logBook durationSinceLastWorkout isNil ] { #category : 'tests' } MFTWorkoutLogBookTest >> testDurationSinceLastWorkoutUsesLastWorkoutFinish [ | logBook olderLog newerLog olderFinish newerFinish duration | logBook := MFTWorkoutLogBook new. olderFinish := DateAndTime now - 2 hours. newerFinish := DateAndTime now - 1 minute. olderLog := MFTWorkoutLog new. newerLog := MFTWorkoutLog new. olderLog finish: olderFinish. newerLog finish: newerFinish. logBook logWorkout: olderLog. logBook logWorkout: newerLog. duration := logBook durationSinceLastWorkout. self assert: duration >= 1 minute. self assert: duration < 2 minutes ] { #category : 'tests' } MFTWorkoutLogBookTest >> testLastLogForPrescriptionIsNilWhenNoMatchingPrescriptionExists [ | logBook knownPrescription unknownPrescription log | logBook := MFTWorkoutLogBook new. knownPrescription := Object new. unknownPrescription := Object new. log := MFTWorkoutLog new. log prescription: knownPrescription; finish: (DateAndTime year: 2026 month: 5 day: 1 hour: 10 minute: 0 second: 0 offset: 0 hours). logBook logWorkout: log. self assert: (logBook lastLogForPrescription: unknownPrescription) isNil ] { #category : 'tests' } MFTWorkoutLogBookTest >> testLastLogForPrescriptionReturnsMostRecentMatchingWorkoutByFinish [ | logBook prescription olderMatching newerMatching otherLog | logBook := MFTWorkoutLogBook new. prescription := Object new. olderMatching := MFTWorkoutLog new. newerMatching := MFTWorkoutLog new. otherLog := MFTWorkoutLog new. olderMatching prescription: prescription; finish: (DateAndTime year: 2026 month: 5 day: 1 hour: 10 minute: 0 second: 0 offset: 0 hours). newerMatching prescription: prescription; finish: (DateAndTime year: 2026 month: 5 day: 3 hour: 10 minute: 0 second: 0 offset: 0 hours). otherLog prescription: Object new; finish: (DateAndTime year: 2026 month: 5 day: 4 hour: 10 minute: 0 second: 0 offset: 0 hours). logBook logWorkout: newerMatching. logBook logWorkout: otherLog. logBook logWorkout: olderMatching. self assert: (logBook lastLogForPrescription: prescription) identicalTo: newerMatching ] { #category : 'tests' } MFTWorkoutLogBookTest >> testLogWorkoutAppendsWorkoutLog [ | logBook firstLog secondLog | logBook := MFTWorkoutLogBook new. firstLog := MFTWorkoutLog new. secondLog := MFTWorkoutLog new. logBook logWorkout: firstLog. logBook logWorkout: secondLog. self assert: logBook workoutLogs asArray equals: { firstLog. secondLog } ] { #category : 'tests' } MFTWorkoutLogBookTest >> testNewLogBookStartsWithEmptyWorkoutLogs [ | logBook | logBook := MFTWorkoutLogBook new. self assert: logBook workoutLogs isEmpty ] { #category : 'tests' } MFTWorkoutLogBookTest >> testRemoveWorkoutLogRemovesExistingWorkoutLog [ | logBook firstLog secondLog | logBook := MFTWorkoutLogBook new. firstLog := MFTWorkoutLog new. secondLog := MFTWorkoutLog new. logBook logWorkout: firstLog. logBook logWorkout: secondLog. logBook removeWorkoutLog: firstLog. self assert: logBook workoutLogs asArray equals: { secondLog } ] { #category : 'tests' } MFTWorkoutLogBookTest >> testWorkoutLogIsInProgressWhenLastWorkoutHasNoFinish [ | logBook finishedLog unfinishedLog | logBook := MFTWorkoutLogBook new. finishedLog := MFTWorkoutLog new. unfinishedLog := MFTWorkoutLog new. finishedLog finish: (DateAndTime year: 2026 month: 5 day: 1 hour: 10 minute: 0 second: 0 offset: 0 hours). logBook logWorkout: finishedLog. logBook logWorkout: unfinishedLog. self assert: logBook workoutLogIsInProgress ] { #category : 'tests' } MFTWorkoutLogBookTest >> testWorkoutLogIsNotInProgressIfNoWorkoutLogs [ | logBook | logBook := MFTWorkoutLogBook new. self deny: logBook workoutLogIsInProgress ] { #category : 'tests' } MFTWorkoutLogBookTest >> testWorkoutLogIsNotInProgressWhenLastWorkoutHasFinish [ | logBook unfinishedLog finishedLog | logBook := MFTWorkoutLogBook new. unfinishedLog := MFTWorkoutLog new. finishedLog := MFTWorkoutLog new. finishedLog finish: (DateAndTime year: 2026 month: 5 day: 1 hour: 10 minute: 0 second: 0 offset: 0 hours). logBook logWorkout: unfinishedLog. logBook logWorkout: finishedLog. self deny: logBook workoutLogIsInProgress ]