View raw

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