[Pharo] Personal fitness tracker web app.
Add descriptor system tests.
Changed files
src/MyFitnessTracker-Glorp-Tests/MFTDescriptorSystemTest.class.st
@@ -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
@@ -0,0 +1,1 @@
1
Added:
Package { #name : 'MyFitnessTracker-Glorp-Tests' }