Add descriptor system tests.

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