[Pharo] Personal fitness tracker web app.
1
"
2
A MFTMuscleGroupTest is a test class for testing the behavior of MFTMuscleGroup
3
"
4
Class {
5
#name : 'MFTMuscleGroupTest',
6
#superclass : 'TestCase',
7
#category : 'MyFitnessTracker-Core-Tests-Anatomy',
8
#package : 'MyFitnessTracker-Core-Tests',
9
#tag : 'Anatomy'
10
}
11
12
{ #category : 'tests' }
13
MFTMuscleGroupTest >> muscleGroupFactorySelectors [
14
15
^ #( abdominal arm back calf chest forearm hips leg shoulder )
16
]
17
18
{ #category : 'tests' }
19
MFTMuscleGroupTest >> testBackFactoryIsComplete [
20
21
| group |
22
group := MFTMuscleGroup back.
23
24
self assert: group englishName equals: 'back'.
25
self assert: group muscles asBag equals: {
26
MFTMuscle latissimusDorsi.
27
MFTMuscle trapezius.
28
MFTMuscle erectorSpinae } asBag
29
]
30
31
{ #category : 'tests' }
32
MFTMuscleGroupTest >> testChestFactoryIsComplete [
33
34
| group |
35
group := MFTMuscleGroup chest.
36
37
self assert: group englishName equals: 'chest'.
38
self assert: group muscles asBag equals: {
39
MFTMuscle pectoralisMajor.
40
MFTMuscle pectoralisMinor } asBag
41
]
42
43
{ #category : 'tests' }
44
MFTMuscleGroupTest >> testEveryFactoryMuscleHasLatinName [
45
46
self muscleGroupFactorySelectors do: [ :selector |
47
| group musclesWithoutLatinName |
48
group := MFTMuscleGroup perform: selector.
49
musclesWithoutLatinName := group muscles select: [ :muscle |
50
muscle latinName isEmpty ].
51
self
52
assert: musclesWithoutLatinName isEmpty
53
description: (' ' join: {
54
selector asString.
55
'contains muscles without Latin name:'.
56
musclesWithoutLatinName printString }) ]
57
]
58
59
{ #category : 'tests' }
60
MFTMuscleGroupTest >> testFactoryGroupEnglishNamesAreUnique [
61
62
| groups duplicates |
63
groups := self muscleGroupFactorySelectors collect: [ :selector |
64
MFTMuscleGroup perform: selector ].
65
duplicates := groups groupedBy: #englishName.
66
67
self
68
assert: (duplicates associations noneSatisfy: [ :association |
69
association value size > 1 ])
70
description:
71
'Duplicate muscle group English names: ' , duplicates printString
72
]
73
74
{ #category : 'tests' }
75
MFTMuscleGroupTest >> testFactoryGroupsDoNotContainDuplicateMuscles [
76
77
self muscleGroupFactorySelectors do: [ :selector |
78
| group |
79
group := MFTMuscleGroup perform: selector.
80
self
81
assert: group muscles size = group muscles asSet size
82
description: ('' join: {
83
selector asString.
84
' should not contain duplicate muscles' }) ]
85
]
86
87
{ #category : 'tests' }
88
MFTMuscleGroupTest >> testFactoryGroupsHaveAtLeastOneMuscle [
89
90
self muscleGroupFactorySelectors do: [ :selector |
91
| group |
92
group := MFTMuscleGroup perform: selector.
93
self
94
deny: group muscles isEmpty
95
description:
96
selector asString , ' should contain at least one muscle' ]
97
]
98
99
{ #category : 'tests' }
100
MFTMuscleGroupTest >> testFactoryGroupsHaveEnglishName [
101
102
self muscleGroupFactorySelectors do: [ :selector |
103
| group |
104
group := MFTMuscleGroup perform: selector.
105
self
106
deny: group englishName isEmpty
107
description: selector asString , ' should set an English name' ]
108
]
109
110
{ #category : 'tests' }
111
MFTMuscleGroupTest >> testGroupsWithDifferentMusclesAreNotEqual [
112
113
self deny: MFTMuscleGroup chest equals: MFTMuscleGroup arm
114
]
115
116
{ #category : 'tests' }
117
MFTMuscleGroupTest >> testGroupsWithSameMusclesInDifferentOrderAreEqual [
118
"A muscle group represents membership, not display order.
119
This test intentionally protects against equality drifting back to ordered collection equality."
120
121
| first second |
122
first := MFTMuscleGroup new
123
englishName: 'chest';
124
muscles: {
125
MFTMuscle pectoralisMajor.
126
MFTMuscle pectoralisMinor };
127
yourself.
128
second := MFTMuscleGroup new
129
englishName: 'chest';
130
muscles: {
131
MFTMuscle pectoralisMinor.
132
MFTMuscle pectoralisMajor };
133
yourself.
134
self assert: first equals: second.
135
self assert: first hash equals: second hash
136
]
137
138
{ #category : 'tests' }
139
MFTMuscleGroupTest >> testGroupsWithSameMusclesInSameOrderAreEqual [
140
141
| first second |
142
first := MFTMuscleGroup chest.
143
second := MFTMuscleGroup chest.
144
145
self deny: first == second.
146
self assert: first equals: second.
147
self assert: first hash equals: second hash
148
]
149
150
{ #category : 'tests' }
151
MFTMuscleGroupTest >> testIncludesMuscleUsingMuscleEquality [
152
153
| group |
154
group := MFTMuscleGroup chest.
155
156
self assert: (group includes: MFTMuscle pectoralisMajor).
157
self assert: (group includes: MFTMuscle pectoralisMinor).
158
self deny: (group includes: MFTMuscle bicepsBrachii)
159
]
160
161
{ #category : 'tests' }
162
MFTMuscleGroupTest >> testLegFactoryIsComplete [
163
164
| group |
165
group := MFTMuscleGroup leg.
166
167
self assert: group englishName equals: 'leg'.
168
self assert: group muscles asBag equals: {
169
MFTMuscle quadricepsFemoris.
170
MFTMuscle hamstring } asBag
171
]
172
173
{ #category : 'tests' }
174
MFTMuscleGroupTest >> testMuscleGroupIsNotEqualToObjectOfAnotherClass [
175
176
self deny: MFTMuscleGroup chest equals: 'chest'
177
]
178
179
{ #category : 'tests' }
180
MFTMuscleGroupTest >> testMusclesAreStoredAsOrderedCollection [
181
182
| group muscles |
183
muscles := {
184
MFTMuscle pectoralisMajor.
185
MFTMuscle pectoralisMinor }.
186
group := MFTMuscleGroup new muscles: muscles.
187
188
self assert: group muscles class equals: OrderedCollection.
189
self assert: group muscles asArray equals: muscles
190
]
191
192
{ #category : 'tests' }
193
MFTMuscleGroupTest >> testNamesCanBeAssigned [
194
195
| group |
196
group := MFTMuscleGroup new.
197
198
group
199
englishName: 'chest';
200
frenchName: 'pectoraux'.
201
202
self assert: group englishName equals: 'chest'.
203
self assert: group frenchName equals: 'pectoraux'.
204
self assert: group canonicalName equals: 'chest'
205
]
206
207
{ #category : 'tests' }
208
MFTMuscleGroupTest >> testNewMuscleGroupHasEmptyNamesAndNoMuscles [
209
210
| group |
211
group := MFTMuscleGroup new.
212
213
self assert: group englishName equals: ''.
214
self assert: group frenchName equals: ''.
215
self assert: group canonicalName equals: ''.
216
self assert: group muscles isEmpty
217
]
218
219
{ #category : 'tests' }
220
MFTMuscleGroupTest >> testNewWithEnglishNameUsesCallingSelector [
221
222
| group |
223
group := MFTMuscleGroup chest.
224
225
self assert: group englishName equals: 'chest'.
226
self assert: group canonicalName equals: 'chest'
227
]
228