[Pharo] Personal fitness tracker web app.
1
"
2
A MFTWorkoutLogBookTest is a test class for testing the behavior of MFTWorkoutLogBook
3
"
4
Class {
5
#name : 'MFTWorkoutLogBookTest',
6
#superclass : 'TestCase',
7
#category : 'MyFitnessTracker-Core-Tests-Logging',
8
#package : 'MyFitnessTracker-Core-Tests',
9
#tag : 'Logging'
10
}
11
12
{ #category : 'tests' }
13
MFTWorkoutLogBookTest >> testDurationSinceLastWorkoutIsNilWhenLogBookIsEmpty [
14
15
| logBook |
16
logBook := MFTWorkoutLogBook new.
17
18
self assert: logBook durationSinceLastWorkout isNil
19
]
20
21
{ #category : 'tests' }
22
MFTWorkoutLogBookTest >> testDurationSinceLastWorkoutUsesLastWorkoutFinish [
23
24
| logBook olderLog newerLog olderFinish newerFinish duration |
25
logBook := MFTWorkoutLogBook new.
26
olderFinish := DateAndTime now - 2 hours.
27
newerFinish := DateAndTime now - 1 minute.
28
olderLog := MFTWorkoutLog new.
29
newerLog := MFTWorkoutLog new.
30
olderLog finish: olderFinish.
31
newerLog finish: newerFinish.
32
33
logBook logWorkout: olderLog.
34
logBook logWorkout: newerLog.
35
duration := logBook durationSinceLastWorkout.
36
37
self assert: duration >= 1 minute.
38
self assert: duration < 2 minutes
39
]
40
41
{ #category : 'tests' }
42
MFTWorkoutLogBookTest >> testLastLogForPrescriptionIsNilWhenNoMatchingPrescriptionExists [
43
44
| logBook knownPrescription unknownPrescription log |
45
logBook := MFTWorkoutLogBook new.
46
knownPrescription := Object new.
47
unknownPrescription := Object new.
48
log := MFTWorkoutLog new.
49
log
50
prescription: knownPrescription;
51
finish: (DateAndTime
52
year: 2026
53
month: 5
54
day: 1
55
hour: 10
56
minute: 0
57
second: 0
58
offset: 0 hours).
59
logBook logWorkout: log.
60
61
self assert:
62
(logBook lastLogForPrescription: unknownPrescription) isNil
63
]
64
65
{ #category : 'tests' }
66
MFTWorkoutLogBookTest >> testLastLogForPrescriptionReturnsMostRecentMatchingWorkoutByFinish [
67
68
| logBook prescription olderMatching newerMatching otherLog |
69
logBook := MFTWorkoutLogBook new.
70
prescription := Object new.
71
olderMatching := MFTWorkoutLog new.
72
newerMatching := MFTWorkoutLog new.
73
otherLog := MFTWorkoutLog new.
74
olderMatching
75
prescription: prescription;
76
finish: (DateAndTime
77
year: 2026
78
month: 5
79
day: 1
80
hour: 10
81
minute: 0
82
second: 0
83
offset: 0 hours).
84
newerMatching
85
prescription: prescription;
86
finish: (DateAndTime
87
year: 2026
88
month: 5
89
day: 3
90
hour: 10
91
minute: 0
92
second: 0
93
offset: 0 hours).
94
otherLog
95
prescription: Object new;
96
finish: (DateAndTime
97
year: 2026
98
month: 5
99
day: 4
100
hour: 10
101
minute: 0
102
second: 0
103
offset: 0 hours).
104
105
logBook logWorkout: newerMatching.
106
logBook logWorkout: otherLog.
107
logBook logWorkout: olderMatching.
108
109
self
110
assert: (logBook lastLogForPrescription: prescription)
111
identicalTo: newerMatching
112
]
113
114
{ #category : 'tests' }
115
MFTWorkoutLogBookTest >> testLogWorkoutAppendsWorkoutLog [
116
117
| logBook firstLog secondLog |
118
logBook := MFTWorkoutLogBook new.
119
firstLog := MFTWorkoutLog new.
120
secondLog := MFTWorkoutLog new.
121
122
logBook logWorkout: firstLog.
123
logBook logWorkout: secondLog.
124
125
self assert: logBook workoutLogs asArray equals: {
126
firstLog.
127
secondLog }
128
]
129
130
{ #category : 'tests' }
131
MFTWorkoutLogBookTest >> testNewLogBookStartsWithEmptyWorkoutLogs [
132
133
| logBook |
134
logBook := MFTWorkoutLogBook new.
135
136
self assert: logBook workoutLogs isEmpty
137
]
138
139
{ #category : 'tests' }
140
MFTWorkoutLogBookTest >> testRemoveWorkoutLogRemovesExistingWorkoutLog [
141
142
| logBook firstLog secondLog |
143
logBook := MFTWorkoutLogBook new.
144
firstLog := MFTWorkoutLog new.
145
secondLog := MFTWorkoutLog new.
146
logBook logWorkout: firstLog.
147
logBook logWorkout: secondLog.
148
149
logBook removeWorkoutLog: firstLog.
150
151
self assert: logBook workoutLogs asArray equals: { secondLog }
152
]
153
154
{ #category : 'tests' }
155
MFTWorkoutLogBookTest >> testWorkoutLogIsInProgressWhenLastWorkoutHasNoFinish [
156
157
| logBook finishedLog unfinishedLog |
158
logBook := MFTWorkoutLogBook new.
159
finishedLog := MFTWorkoutLog new.
160
unfinishedLog := MFTWorkoutLog new.
161
finishedLog finish: (DateAndTime
162
year: 2026
163
month: 5
164
day: 1
165
hour: 10
166
minute: 0
167
second: 0
168
offset: 0 hours).
169
170
logBook logWorkout: finishedLog.
171
logBook logWorkout: unfinishedLog.
172
173
self assert: logBook workoutLogIsInProgress
174
]
175
176
{ #category : 'tests' }
177
MFTWorkoutLogBookTest >> testWorkoutLogIsNotInProgressIfNoWorkoutLogs [
178
179
| logBook |
180
logBook := MFTWorkoutLogBook new.
181
self deny: logBook workoutLogIsInProgress
182
]
183
184
{ #category : 'tests' }
185
MFTWorkoutLogBookTest >> testWorkoutLogIsNotInProgressWhenLastWorkoutHasFinish [
186
187
| logBook unfinishedLog finishedLog |
188
logBook := MFTWorkoutLogBook new.
189
unfinishedLog := MFTWorkoutLog new.
190
finishedLog := MFTWorkoutLog new.
191
finishedLog finish: (DateAndTime
192
year: 2026
193
month: 5
194
day: 1
195
hour: 10
196
minute: 0
197
second: 0
198
offset: 0 hours).
199
200
logBook logWorkout: unfinishedLog.
201
logBook logWorkout: finishedLog.
202
203
self deny: logBook workoutLogIsInProgress
204
]
205