View raw

1 " 2 A MFTWorkoutLogBookTest is a test class for testing the behavior of MFTWorkoutLogBook 3 " 4 Class { 5 #name : 'MFTWorkoutLogBookTest', 6 #superclass : 'TestCase', 7 #category : 'MyFitnessTracker-Core-Tests-Logging', 8 #package : 'MyFitnessTracker-Core-Tests', 9 #tag : 'Logging' 10 } 11 12 { #category : 'tests' } 13 MFTWorkoutLogBookTest >> testDurationSinceLastWorkoutIsNilWhenLogBookIsEmpty [ 14 15 | logBook | 16 logBook := MFTWorkoutLogBook new. 17 18 self assert: logBook durationSinceLastWorkout isNil 19 ] 20 21 { #category : 'tests' } 22 MFTWorkoutLogBookTest >> testDurationSinceLastWorkoutUsesLastWorkoutFinish [ 23 24 | logBook olderLog newerLog olderFinish newerFinish duration | 25 logBook := MFTWorkoutLogBook new. 26 olderFinish := DateAndTime now - 2 hours. 27 newerFinish := DateAndTime now - 1 minute. 28 olderLog := MFTWorkoutLog new. 29 newerLog := MFTWorkoutLog new. 30 olderLog finish: olderFinish. 31 newerLog finish: newerFinish. 32 33 logBook logWorkout: olderLog. 34 logBook logWorkout: newerLog. 35 duration := logBook durationSinceLastWorkout. 36 37 self assert: duration >= 1 minute. 38 self assert: duration < 2 minutes 39 ] 40 41 { #category : 'tests' } 42 MFTWorkoutLogBookTest >> testLastLogForPrescriptionIsNilWhenNoMatchingPrescriptionExists [ 43 44 | logBook knownPrescription unknownPrescription log | 45 logBook := MFTWorkoutLogBook new. 46 knownPrescription := Object new. 47 unknownPrescription := Object new. 48 log := MFTWorkoutLog new. 49 log 50 prescription: knownPrescription; 51 finish: (DateAndTime 52 year: 2026 53 month: 5 54 day: 1 55 hour: 10 56 minute: 0 57 second: 0 58 offset: 0 hours). 59 logBook logWorkout: log. 60 61 self assert: 62 (logBook lastLogForPrescription: unknownPrescription) isNil 63 ] 64 65 { #category : 'tests' } 66 MFTWorkoutLogBookTest >> testLastLogForPrescriptionReturnsMostRecentMatchingWorkoutByFinish [ 67 68 | logBook prescription olderMatching newerMatching otherLog | 69 logBook := MFTWorkoutLogBook new. 70 prescription := Object new. 71 olderMatching := MFTWorkoutLog new. 72 newerMatching := MFTWorkoutLog new. 73 otherLog := MFTWorkoutLog new. 74 olderMatching 75 prescription: prescription; 76 finish: (DateAndTime 77 year: 2026 78 month: 5 79 day: 1 80 hour: 10 81 minute: 0 82 second: 0 83 offset: 0 hours). 84 newerMatching 85 prescription: prescription; 86 finish: (DateAndTime 87 year: 2026 88 month: 5 89 day: 3 90 hour: 10 91 minute: 0 92 second: 0 93 offset: 0 hours). 94 otherLog 95 prescription: Object new; 96 finish: (DateAndTime 97 year: 2026 98 month: 5 99 day: 4 100 hour: 10 101 minute: 0 102 second: 0 103 offset: 0 hours). 104 105 logBook logWorkout: newerMatching. 106 logBook logWorkout: otherLog. 107 logBook logWorkout: olderMatching. 108 109 self 110 assert: (logBook lastLogForPrescription: prescription) 111 identicalTo: newerMatching 112 ] 113 114 { #category : 'tests' } 115 MFTWorkoutLogBookTest >> testLogWorkoutAppendsWorkoutLog [ 116 117 | logBook firstLog secondLog | 118 logBook := MFTWorkoutLogBook new. 119 firstLog := MFTWorkoutLog new. 120 secondLog := MFTWorkoutLog new. 121 122 logBook logWorkout: firstLog. 123 logBook logWorkout: secondLog. 124 125 self assert: logBook workoutLogs asArray equals: { 126 firstLog. 127 secondLog } 128 ] 129 130 { #category : 'tests' } 131 MFTWorkoutLogBookTest >> testNewLogBookStartsWithEmptyWorkoutLogs [ 132 133 | logBook | 134 logBook := MFTWorkoutLogBook new. 135 136 self assert: logBook workoutLogs isEmpty 137 ] 138 139 { #category : 'tests' } 140 MFTWorkoutLogBookTest >> testRemoveWorkoutLogRemovesExistingWorkoutLog [ 141 142 | logBook firstLog secondLog | 143 logBook := MFTWorkoutLogBook new. 144 firstLog := MFTWorkoutLog new. 145 secondLog := MFTWorkoutLog new. 146 logBook logWorkout: firstLog. 147 logBook logWorkout: secondLog. 148 149 logBook removeWorkoutLog: firstLog. 150 151 self assert: logBook workoutLogs asArray equals: { secondLog } 152 ] 153 154 { #category : 'tests' } 155 MFTWorkoutLogBookTest >> testWorkoutLogIsInProgressWhenLastWorkoutHasNoFinish [ 156 157 | logBook finishedLog unfinishedLog | 158 logBook := MFTWorkoutLogBook new. 159 finishedLog := MFTWorkoutLog new. 160 unfinishedLog := MFTWorkoutLog new. 161 finishedLog finish: (DateAndTime 162 year: 2026 163 month: 5 164 day: 1 165 hour: 10 166 minute: 0 167 second: 0 168 offset: 0 hours). 169 170 logBook logWorkout: finishedLog. 171 logBook logWorkout: unfinishedLog. 172 173 self assert: logBook workoutLogIsInProgress 174 ] 175 176 { #category : 'tests' } 177 MFTWorkoutLogBookTest >> testWorkoutLogIsNotInProgressIfNoWorkoutLogs [ 178 179 | logBook | 180 logBook := MFTWorkoutLogBook new. 181 self deny: logBook workoutLogIsInProgress 182 ] 183 184 { #category : 'tests' } 185 MFTWorkoutLogBookTest >> testWorkoutLogIsNotInProgressWhenLastWorkoutHasFinish [ 186 187 | logBook unfinishedLog finishedLog | 188 logBook := MFTWorkoutLogBook new. 189 unfinishedLog := MFTWorkoutLog new. 190 finishedLog := MFTWorkoutLog new. 191 finishedLog finish: (DateAndTime 192 year: 2026 193 month: 5 194 day: 1 195 hour: 10 196 minute: 0 197 second: 0 198 offset: 0 hours). 199 200 logBook logWorkout: unfinishedLog. 201 logBook logWorkout: finishedLog. 202 203 self deny: logBook workoutLogIsInProgress 204 ] 205