" A MFTMuscleGroupTest is a test class for testing the behavior of MFTMuscleGroup " Class { #name : 'MFTMuscleGroupTest', #superclass : 'TestCase', #category : 'MyFitnessTracker-Core-Tests-Anatomy', #package : 'MyFitnessTracker-Core-Tests', #tag : 'Anatomy' } { #category : 'tests' } MFTMuscleGroupTest >> muscleGroupFactorySelectors [ ^ #( abdominal arm back calf chest forearm hips leg shoulder ) ] { #category : 'tests' } MFTMuscleGroupTest >> testBackFactoryIsComplete [ | group | group := MFTMuscleGroup back. self assert: group englishName equals: 'back'. self assert: group muscles asBag equals: { MFTMuscle latissimusDorsi. MFTMuscle trapezius. MFTMuscle erectorSpinae } asBag ] { #category : 'tests' } MFTMuscleGroupTest >> testChestFactoryIsComplete [ | group | group := MFTMuscleGroup chest. self assert: group englishName equals: 'chest'. self assert: group muscles asBag equals: { MFTMuscle pectoralisMajor. MFTMuscle pectoralisMinor } asBag ] { #category : 'tests' } MFTMuscleGroupTest >> testEveryFactoryMuscleHasLatinName [ self muscleGroupFactorySelectors do: [ :selector | | group musclesWithoutLatinName | group := MFTMuscleGroup perform: selector. musclesWithoutLatinName := group muscles select: [ :muscle | muscle latinName isEmpty ]. self assert: musclesWithoutLatinName isEmpty description: (' ' join: { selector asString. 'contains muscles without Latin name:'. musclesWithoutLatinName printString }) ] ] { #category : 'tests' } MFTMuscleGroupTest >> testFactoryGroupEnglishNamesAreUnique [ | groups duplicates | groups := self muscleGroupFactorySelectors collect: [ :selector | MFTMuscleGroup perform: selector ]. duplicates := groups groupedBy: #englishName. self assert: (duplicates associations noneSatisfy: [ :association | association value size > 1 ]) description: 'Duplicate muscle group English names: ' , duplicates printString ] { #category : 'tests' } MFTMuscleGroupTest >> testFactoryGroupsDoNotContainDuplicateMuscles [ self muscleGroupFactorySelectors do: [ :selector | | group | group := MFTMuscleGroup perform: selector. self assert: group muscles size = group muscles asSet size description: ('' join: { selector asString. ' should not contain duplicate muscles' }) ] ] { #category : 'tests' } MFTMuscleGroupTest >> testFactoryGroupsHaveAtLeastOneMuscle [ self muscleGroupFactorySelectors do: [ :selector | | group | group := MFTMuscleGroup perform: selector. self deny: group muscles isEmpty description: selector asString , ' should contain at least one muscle' ] ] { #category : 'tests' } MFTMuscleGroupTest >> testFactoryGroupsHaveEnglishName [ self muscleGroupFactorySelectors do: [ :selector | | group | group := MFTMuscleGroup perform: selector. self deny: group englishName isEmpty description: selector asString , ' should set an English name' ] ] { #category : 'tests' } MFTMuscleGroupTest >> testGroupsWithDifferentMusclesAreNotEqual [ self deny: MFTMuscleGroup chest equals: MFTMuscleGroup arm ] { #category : 'tests' } MFTMuscleGroupTest >> testGroupsWithSameMusclesInDifferentOrderAreEqual [ "A muscle group represents membership, not display order. This test intentionally protects against equality drifting back to ordered collection equality." | first second | first := MFTMuscleGroup new englishName: 'chest'; muscles: { MFTMuscle pectoralisMajor. MFTMuscle pectoralisMinor }; yourself. second := MFTMuscleGroup new englishName: 'chest'; muscles: { MFTMuscle pectoralisMinor. MFTMuscle pectoralisMajor }; yourself. self assert: first equals: second. self assert: first hash equals: second hash ] { #category : 'tests' } MFTMuscleGroupTest >> testGroupsWithSameMusclesInSameOrderAreEqual [ | first second | first := MFTMuscleGroup chest. second := MFTMuscleGroup chest. self deny: first == second. self assert: first equals: second. self assert: first hash equals: second hash ] { #category : 'tests' } MFTMuscleGroupTest >> testIncludesMuscleUsingMuscleEquality [ | group | group := MFTMuscleGroup chest. self assert: (group includes: MFTMuscle pectoralisMajor). self assert: (group includes: MFTMuscle pectoralisMinor). self deny: (group includes: MFTMuscle bicepsBrachii) ] { #category : 'tests' } MFTMuscleGroupTest >> testLegFactoryIsComplete [ | group | group := MFTMuscleGroup leg. self assert: group englishName equals: 'leg'. self assert: group muscles asBag equals: { MFTMuscle quadricepsFemoris. MFTMuscle hamstring } asBag ] { #category : 'tests' } MFTMuscleGroupTest >> testMuscleGroupIsNotEqualToObjectOfAnotherClass [ self deny: MFTMuscleGroup chest equals: 'chest' ] { #category : 'tests' } MFTMuscleGroupTest >> testMusclesAreStoredAsOrderedCollection [ | group muscles | muscles := { MFTMuscle pectoralisMajor. MFTMuscle pectoralisMinor }. group := MFTMuscleGroup new muscles: muscles. self assert: group muscles class equals: OrderedCollection. self assert: group muscles asArray equals: muscles ] { #category : 'tests' } MFTMuscleGroupTest >> testNamesCanBeAssigned [ | group | group := MFTMuscleGroup new. group englishName: 'chest'; frenchName: 'pectoraux'. self assert: group englishName equals: 'chest'. self assert: group frenchName equals: 'pectoraux'. self assert: group canonicalName equals: 'chest' ] { #category : 'tests' } MFTMuscleGroupTest >> testNewMuscleGroupHasEmptyNamesAndNoMuscles [ | group | group := MFTMuscleGroup new. self assert: group englishName equals: ''. self assert: group frenchName equals: ''. self assert: group canonicalName equals: ''. self assert: group muscles isEmpty ] { #category : 'tests' } MFTMuscleGroupTest >> testNewWithEnglishNameUsesCallingSelector [ | group | group := MFTMuscleGroup chest. self assert: group englishName equals: 'chest'. self assert: group canonicalName equals: 'chest' ]