View raw

1 " 2 A MFTWorkoutLogTest is a test class for testing the behavior of MFTWorkoutLog 3 " 4 Class { 5 #name : 'MFTWorkoutLogTest', 6 #superclass : 'TestCase', 7 #category : 'MyFitnessTracker-Core-Tests-Logging', 8 #package : 'MyFitnessTracker-Core-Tests', 9 #tag : 'Logging' 10 } 11 12 { #category : 'tests' } 13 MFTWorkoutLogTest >> testAddSetGroupAppendsGroupLog [ 14 15 | workoutLog firstGroup secondGroup | 16 workoutLog := MFTWorkoutLog new. 17 firstGroup := MFTSetGroupLog new. 18 secondGroup := MFTSetGroupLog new. 19 20 workoutLog addSetGroup: firstGroup. 21 workoutLog addSetGroup: secondGroup. 22 23 self assert: workoutLog setGroups asArray equals: { 24 firstGroup. 25 secondGroup } 26 ] 27 28 { #category : 'tests' } 29 MFTWorkoutLogTest >> testCanonicalNameWithoutPrescription [ 30 31 | workoutLog | 32 workoutLog := MFTWorkoutLog new. 33 34 self assert: workoutLog canonicalName equals: 'no prescription' 35 ] 36 37 { #category : 'tests' } 38 MFTWorkoutLogTest >> testDurationIsZeroWhenWorkoutHasNotStarted [ 39 40 | workoutLog | 41 workoutLog := MFTWorkoutLog new. 42 43 self assert: workoutLog duration equals: Duration zero 44 ] 45 46 { #category : 'tests' } 47 MFTWorkoutLogTest >> testDurationRunsFromStartToNowWhenFinishIsMissing [ 48 49 | workoutLog start | 50 workoutLog := MFTWorkoutLog new. 51 start := DateAndTime now - 1 minute. 52 workoutLog start: start. 53 54 self assert: workoutLog duration >= 1 minute 55 ] 56 57 { #category : 'tests' } 58 MFTWorkoutLogTest >> testDurationUsesFinishWhenPresent [ 59 60 | workoutLog start finish | 61 workoutLog := MFTWorkoutLog new. 62 start := DateAndTime 63 year: 2026 64 month: 5 65 day: 1 66 hour: 10 67 minute: 0 68 second: 0 69 offset: 0 hours. 70 finish := DateAndTime 71 year: 2026 72 month: 5 73 day: 1 74 hour: 11 75 minute: 30 76 second: 0 77 offset: 0 hours. 78 79 workoutLog 80 start: start; 81 finish: finish. 82 83 self assert: workoutLog duration equals: 90 minutes 84 ] 85 86 { #category : 'tests' } 87 MFTWorkoutLogTest >> testEmptyWorkoutLogIsCompletelyLogged [ 88 89 | workoutLog | 90 workoutLog := MFTWorkoutLog new. 91 92 self assert: workoutLog isCompletelyLogged 93 ] 94 95 { #category : 'tests' } 96 MFTWorkoutLogTest >> testFinishNowRecordsFinishDateAndTime [ 97 98 | workoutLog | 99 workoutLog := MFTWorkoutLog new. 100 101 workoutLog finishNow. 102 103 self assert: workoutLog finish isNotNil. 104 self assert: (workoutLog finish isKindOf: DateAndTime) 105 ] 106 107 { #category : 'tests' } 108 MFTWorkoutLogTest >> testNewWorkoutLogStartsWithEmptySetGroups [ 109 110 | workoutLog | 111 workoutLog := MFTWorkoutLog new. 112 113 self assert: workoutLog setGroups isEmpty 114 ] 115 116 { #category : 'tests' } 117 MFTWorkoutLogTest >> testPrescriptionCanBeRecorded [ 118 119 | workoutLog prescription | 120 workoutLog := MFTWorkoutLog new. 121 prescription := Object new. 122 workoutLog prescription: prescription. 123 124 self assert: workoutLog prescription identicalTo: prescription 125 ] 126 127 { #category : 'tests' } 128 MFTWorkoutLogTest >> testSetForPrescriptionRaisesErrorWhenPrescriptionIsUnknown [ 129 130 | workoutLog knownPrescription unknownPrescription knownSet groupLog | 131 workoutLog := MFTWorkoutLog new. 132 knownPrescription := Object new. 133 unknownPrescription := Object new. 134 knownSet := MFTSetLog forPrescription: knownPrescription. 135 groupLog := MFTSetGroupLog new. 136 groupLog addSet: knownSet. 137 workoutLog addSetGroup: groupLog. 138 139 self 140 should: [ workoutLog setForPrescription: unknownPrescription ] 141 raise: Error 142 ] 143 144 { #category : 'tests' } 145 MFTWorkoutLogTest >> testSetForPrescriptionReturnsMatchingSetLogByEquality [ 146 147 | workoutLog firstPrescription secondPrescription firstSet secondSet groupLog | 148 workoutLog := MFTWorkoutLog new. 149 firstPrescription := Object new. 150 secondPrescription := Object new. 151 firstSet := MFTSetLog forPrescription: firstPrescription. 152 secondSet := MFTSetLog forPrescription: secondPrescription. 153 groupLog := MFTSetGroupLog new. 154 groupLog sets: { 155 firstSet. 156 secondSet }. 157 workoutLog addSetGroup: groupLog. 158 159 self 160 assert: (workoutLog setForPrescription: secondPrescription) 161 identicalTo: secondSet 162 ] 163 164 { #category : 'tests' } 165 MFTWorkoutLogTest >> testSetGroupsSetterCopiesAsOrderedCollection [ 166 167 | workoutLog firstGroup secondGroup sourceCollection | 168 workoutLog := MFTWorkoutLog new. 169 firstGroup := MFTSetGroupLog new. 170 secondGroup := MFTSetGroupLog new. 171 sourceCollection := { 172 firstGroup. 173 secondGroup }. 174 175 workoutLog setGroups: sourceCollection. 176 177 self assert: workoutLog setGroups class equals: OrderedCollection. 178 self assert: workoutLog setGroups asArray equals: sourceCollection 179 ] 180 181 { #category : 'tests' } 182 MFTWorkoutLogTest >> testSetsFlattensAllGroupSetsInOrder [ 183 184 | workoutLog firstGroup secondGroup firstSet secondSet thirdSet | 185 workoutLog := MFTWorkoutLog new. 186 firstGroup := MFTSetGroupLog new. 187 secondGroup := MFTSetGroupLog new. 188 firstSet := MFTSetLog new. 189 secondSet := MFTSetLog new. 190 thirdSet := MFTSetLog new. 191 firstGroup sets: { 192 firstSet. 193 secondSet }. 194 secondGroup sets: { thirdSet }. 195 196 workoutLog setGroups: { 197 firstGroup. 198 secondGroup }. 199 200 self assert: workoutLog sets asArray equals: { 201 firstSet. 202 secondSet. 203 thirdSet } 204 ] 205 206 { #category : 'tests' } 207 MFTWorkoutLogTest >> testStartAndFinishCanBeRecorded [ 208 209 | workoutLog start finish | 210 workoutLog := MFTWorkoutLog new. 211 start := DateAndTime 212 year: 2026 213 month: 5 214 day: 1 215 hour: 10 216 minute: 0 217 second: 0 218 offset: 0 hours. 219 finish := DateAndTime 220 year: 2026 221 month: 5 222 day: 1 223 hour: 10 224 minute: 45 225 second: 0 226 offset: 0 hours. 227 228 workoutLog 229 start: start; 230 finish: finish. 231 232 self assert: workoutLog start equals: start. 233 self assert: workoutLog finish equals: finish 234 ] 235 236 { #category : 'tests' } 237 MFTWorkoutLogTest >> testStartNowRecordsStartDateAndTime [ 238 239 | workoutLog | 240 workoutLog := MFTWorkoutLog new. 241 242 workoutLog startNow. 243 244 self assert: workoutLog start isNotNil. 245 self assert: (workoutLog start isKindOf: DateAndTime) 246 ] 247 248 { #category : 'tests' } 249 MFTWorkoutLogTest >> testWorkoutLogIsCompletelyLoggedWhenAllGroupsAreLogged [ 250 251 | workoutLog firstGroup secondGroup | 252 workoutLog := MFTWorkoutLog new. 253 firstGroup := MFTSetGroupLog new. 254 secondGroup := MFTSetGroupLog new. 255 firstGroup sets: { (MFTSetLog reps: 6 load: 100) }. 256 secondGroup sets: { (MFTSetLog reps: 5 load: 110) }. 257 258 workoutLog setGroups: { 259 firstGroup. 260 secondGroup }. 261 262 self assert: workoutLog isCompletelyLogged 263 ] 264 265 { #category : 'tests' } 266 MFTWorkoutLogTest >> testWorkoutLogIsNotCompletelyLoggedWhenAnyGroupIsIncomplete [ 267 268 | workoutLog completeGroup incompleteGroup | 269 workoutLog := MFTWorkoutLog new. 270 completeGroup := MFTSetGroupLog new. 271 incompleteGroup := MFTSetGroupLog new. 272 completeGroup sets: { (MFTSetLog reps: 6 load: 100) }. 273 incompleteGroup sets: { MFTSetLog new }. 274 275 workoutLog setGroups: { 276 completeGroup. 277 incompleteGroup }. 278 279 self deny: workoutLog isCompletelyLogged 280 ] 281