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