View raw

1 " 2 A MFTDescriptorSystemTest is a test class for testing the behavior of MFTDescriptorSystem 3 " 4 Class { 5 #name : 'MFTDescriptorSystemTest', 6 #superclass : 'TestCase', 7 #instVars : [ 8 'session', 9 'login' 10 ], 11 #category : 'MyFitnessTracker-Glorp-Tests', 12 #package : 'MyFitnessTracker-Glorp-Tests' 13 } 14 15 { #category : 'running' } 16 MFTDescriptorSystemTest >> newInMemoryLogin [ 17 18 | dbFile | 19 dbFile := '/tmp/mft-test.db' asFileReference. 20 dbFile ifExists: [ dbFile delete ]. 21 22 ^ Login new 23 database: UDBCSQLite3Platform new; 24 host: ''; 25 databaseName: dbFile pathString; 26 yourself 27 ] 28 29 { #category : 'running' } 30 MFTDescriptorSystemTest >> persist: anObject [ 31 32 session transact: [ session register: anObject ]. 33 self assert: anObject id notNil. 34 ^ anObject id 35 ] 36 37 { #category : 'running' } 38 MFTDescriptorSystemTest >> readOneOf: aClass where: aBlock [ 39 40 ^ session readOneOf: aClass where: aBlock 41 ] 42 43 { #category : 'running' } 44 MFTDescriptorSystemTest >> sampleEquipment [ 45 46 ^ MFTEquipment new 47 englishName: 'test barbell'; 48 yourself 49 ] 50 51 { #category : 'running' } 52 MFTDescriptorSystemTest >> sampleExercise [ 53 54 ^ MFTExercise new 55 englishName: 'test bench press'; 56 frenchName: 'developpe couche test'; 57 equipment: self sampleEquipment; 58 yourself 59 ] 60 61 { #category : 'running' } 62 MFTDescriptorSystemTest >> sampleMuscle [ 63 64 ^ MFTMuscle new 65 latinName: 'musculus testus'; 66 englishName: 'test muscle'; 67 description: 'A muscle used only by persistence tests.'; 68 yourself 69 ] 70 71 { #category : 'running' } 72 MFTDescriptorSystemTest >> sampleMuscleGroup [ 73 74 ^ MFTMuscleGroup new 75 englishName: 'test group'; 76 frenchName: 'groupe test'; 77 muscles: { self sampleMuscle }; 78 yourself 79 ] 80 81 { #category : 'running' } 82 MFTDescriptorSystemTest >> sampleRepScheme [ 83 84 ^ MFTRepScheme from: 6 to: 10 85 ] 86 87 { #category : 'running' } 88 MFTDescriptorSystemTest >> sampleRoutine [ 89 90 ^ MFTRoutine new 91 title: 'Test Heavy Duty routine'; 92 workouts: { self sampleWorkoutPrescription }; 93 yourself 94 ] 95 96 { #category : 'running' } 97 MFTDescriptorSystemTest >> sampleSetGroupLog [ 98 99 | setGroupLog | 100 setGroupLog := MFTSetGroupLog forPrescription: 101 self sampleStraightSetGroupPrescription. 102 setGroupLog 103 notes: 'Reached positive failure with strict form.'; 104 sets: { self sampleSetLog }. 105 ^ setGroupLog 106 ] 107 108 { #category : 'running' } 109 MFTDescriptorSystemTest >> sampleSetLog [ 110 111 ^ (MFTSetLog forPrescription: self sampleSetPrescription) 112 reps: 8; 113 load: 100.5; 114 failureAchieved: true; 115 yourself 116 ] 117 118 { #category : 'running' } 119 MFTDescriptorSystemTest >> sampleSetPrescription [ 120 121 ^ MFTSetPrescription 122 exercise: self sampleExercise 123 repScheme: self sampleRepScheme 124 ] 125 126 { #category : 'running' } 127 MFTDescriptorSystemTest >> sampleStraightSetGroupPrescription [ 128 129 ^ MFTStraightSetGroupPrescription withSets: 130 { self sampleSetPrescription } 131 ] 132 133 { #category : 'running' } 134 MFTDescriptorSystemTest >> sampleTrainee [ 135 136 ^ MFTTrainee new 137 currentRoutine: self sampleRoutine; 138 logBook: self sampleWorkoutLogBook; 139 yourself 140 ] 141 142 { #category : 'running' } 143 MFTDescriptorSystemTest >> sampleWorkoutLog [ 144 145 ^ MFTWorkoutLog new 146 prescription: self sampleWorkoutPrescription; 147 start: (DateAndTime fromString: '2026-05-09T10:00:00+00:00'); 148 finish: (DateAndTime fromString: '2026-05-09T10:42:00+00:00'); 149 setGroups: { self sampleSetGroupLog }; 150 yourself 151 ] 152 153 { #category : 'running' } 154 MFTDescriptorSystemTest >> sampleWorkoutLogBook [ 155 156 | logBook | 157 logBook := MFTWorkoutLogBook new. 158 logBook logWorkout: self sampleWorkoutLog. 159 ^ logBook 160 ] 161 162 { #category : 'running' } 163 MFTDescriptorSystemTest >> sampleWorkoutPrescription [ 164 165 ^ MFTWorkoutPrescription new 166 title: 'Test Heavy Duty workout'; 167 setGroups: { self sampleStraightSetGroupPrescription }; 168 yourself 169 ] 170 171 { #category : 'running' } 172 MFTDescriptorSystemTest >> setUp [ 173 174 super setUp. 175 176 login := self newInMemoryLogin. 177 session := MFTDescriptorSystem sessionForLogin: login. 178 179 session login. 180 session dropTables: session system allTables. 181 session createTables: session system allTables 182 ] 183 184 { #category : 'running' } 185 MFTDescriptorSystemTest >> tearDown [ 186 187 session ifNotNil: [ session logout ]. 188 session := nil. 189 login := nil. 190 super tearDown 191 ] 192 193 { #category : 'running' } 194 MFTDescriptorSystemTest >> testDescriptorSystemCreatesAllDeclaredTables [ 195 196 | createdTableNames expectedTableNames | 197 createdTableNames := session system allTables collect: [ :each | 198 each name ]. 199 expectedTableNames := session system allTableNames. 200 201 expectedTableNames do: [ :each | 202 self 203 assert: (createdTableNames includes: each) 204 description: 'Missing table in descriptor system: ' , each ] 205 ] 206 207 { #category : 'tests' } 208 MFTDescriptorSystemTest >> testEquipmentCanBePersistedAndReloaded [ 209 210 | equipment loaded | 211 equipment := self sampleEquipment. 212 self persist: equipment. 213 214 loaded := session 215 readOneOf: MFTEquipment 216 where: [ :each | each id = equipment id ]. 217 218 self assert: loaded notNil. 219 self assert: loaded englishName equals: 'test barbell' 220 ] 221 222 { #category : 'running' } 223 MFTDescriptorSystemTest >> testExerciseReloadsItsEquipment [ 224 225 | exercise loaded | 226 exercise := self sampleExercise. 227 self persist: exercise. 228 229 loaded := self 230 readOneOf: MFTExercise 231 where: [ :each | each englishName = 'test bench press' ]. 232 233 self assert: loaded frenchName equals: 'developpe couche test'. 234 self assert: loaded equipment englishName equals: 'test barbell' 235 ] 236 237 { #category : 'running' } 238 MFTDescriptorSystemTest >> testMuscleCanBePersistedAndReloaded [ 239 240 | muscle loaded | 241 muscle := self sampleMuscle. 242 self persist: muscle. 243 session reset. 244 245 loaded := self 246 readOneOf: MFTMuscle 247 where: [ :each | each latinName = 'musculus testus' ]. 248 249 self deny: loaded identicalTo: muscle. 250 self assert: loaded englishName equals: 'test muscle'. 251 self assert: loaded description equals: muscle description 252 ] 253 254 { #category : 'running' } 255 MFTDescriptorSystemTest >> testMuscleGroupReloadsItsMuscles [ 256 257 | muscleGroup loaded | 258 muscleGroup := self sampleMuscleGroup. 259 self persist: muscleGroup. 260 261 loaded := self 262 readOneOf: MFTMuscleGroup 263 where: [ :each | each englishName = 'test group' ]. 264 265 self assert: loaded frenchName equals: 'groupe test'. 266 self assert: loaded muscles size equals: 1. 267 self assert: loaded muscles first latinName equals: 'musculus testus' 268 ] 269 270 { #category : 'running' } 271 MFTDescriptorSystemTest >> testRepSchemeCanBePersistedAndReloaded [ 272 273 | repScheme loaded | 274 repScheme := self sampleRepScheme. 275 self persist: repScheme. 276 277 loaded := self 278 readOneOf: MFTRepScheme 279 where: [ :each | each minReps = 6 ]. 280 281 self assert: loaded minReps equals: 6. 282 self assert: loaded maxReps equals: 10 283 ] 284 285 { #category : 'running' } 286 MFTDescriptorSystemTest >> testRoutineReloadsWorkoutPrescriptionsInOrder [ 287 288 | routine loaded | 289 routine := self sampleRoutine. 290 self persist: routine. 291 292 loaded := self 293 readOneOf: MFTRoutine 294 where: [ :each | each title = 'Test Heavy Duty routine' ]. 295 296 self assert: loaded workouts size equals: 1. 297 self 298 assert: loaded workouts first title 299 equals: 'Test Heavy Duty workout' 300 ] 301 302 { #category : 'running' } 303 MFTDescriptorSystemTest >> testSetLogReloadsPrescriptionAndExecutionData [ 304 305 | setLog loaded | 306 setLog := self sampleSetLog. 307 self persist: setLog. 308 309 loaded := self 310 readOneOf: MFTSetLog 311 where: [ :each | each id = setLog id ]. 312 313 self assert: loaded reps equals: 8. 314 self assert: loaded load equals: 100.5. 315 self assert: loaded failureAchieved. 316 self 317 assert: loaded prescription exercise englishName 318 equals: 'test bench press' 319 ] 320 321 { #category : 'running' } 322 MFTDescriptorSystemTest >> testSetPrescriptionReloadsExerciseAndRepScheme [ 323 324 | prescription loaded | 325 prescription := self sampleSetPrescription. 326 self persist: prescription. 327 328 loaded := self 329 readOneOf: MFTSetPrescription 330 where: [ :each | each id = prescription id ]. 331 332 self assert: loaded exercise englishName equals: 'test bench press'. 333 self assert: loaded repScheme minReps equals: 6. 334 self assert: loaded repScheme maxReps equals: 10 335 ] 336 337 { #category : 'running' } 338 MFTDescriptorSystemTest >> testWorkoutLogReloadsPrescriptionSetGroupsAndLoggedSets [ 339 340 | workoutLog loaded loadedSet | 341 workoutLog := self sampleWorkoutLog. 342 self persist: workoutLog. 343 344 loaded := self 345 readOneOf: MFTWorkoutLog 346 where: [ :each | each id = workoutLog id ]. 347 loadedSet := loaded sets first. 348 349 self 350 assert: loaded prescription title 351 equals: 'Test Heavy Duty workout'. 352 self assert: loaded setGroups size equals: 1. 353 self assert: loadedSet reps equals: 8. 354 self assert: loadedSet load equals: 100.5. 355 self assert: loadedSet failureAchieved 356 ] 357 358 { #category : 'running' } 359 MFTDescriptorSystemTest >> testWorkoutPrescriptionReloadsSetGroupsAndSets [ 360 361 | workout loaded | 362 workout := self sampleWorkoutPrescription. 363 self persist: workout. 364 365 loaded := self 366 readOneOf: MFTWorkoutPrescription 367 where: [ :each | each title = 'Test Heavy Duty workout' ]. 368 369 self assert: loaded setGroups size equals: 1. 370 self assert: loaded sets size equals: 1. 371 self 372 assert: loaded sets first exercise englishName 373 equals: 'test bench press' 374 ] 375