[Pharo] Personal fitness tracker web app.
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