public function testGetSetAboutYou() { $expected = new AboutYou($this->instance); $this->assertNotEmpty($this->instance->getAboutYou()); $this->assertTrue($this->instance->setAboutYou($expected) instanceof Questionnaire); $this->assertEquals($expected, $this->instance->getAboutYou()); }
public function testExtractMotivations() { $expectedKeys = array("motivationsWeight", "motivationsEnergy", "motivationsBodyPain", "motivationsFeelYounger", "motivationsIndependence", "motivationsAlertness", "motivationsSocialLife", "motivationsAppearance", "motivationsFamily", "motivationsCompleted"); $export = HowAreYouHelper::extractMotivations($this->instance->getAboutYou()->getMotivations()); foreach ($expectedKeys as $key) { $this->assertArrayHasKey($key, $export); } }
public function testSpecificationReturnsTrue() { $questionnaire = new Questionnaire(new Person()); $questionnaire->getAboutYou()->getDependants()->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getHindrances()->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getFeelings()->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getMotivations()->setCompletedDate(new \DateTime()); $this->assertTrue($this->instance->isSatisfiedBy($questionnaire)); }
public function testIGetARedNarrative() { $expectedNarrative = array('about_you' => array("about_you_red", "who_depends_on_you_red", "about_you_hindrance_red_none", "about_you_red_closing")); $questionnaire = new Questionnaire(new Person()); $questionnaire->getAboutYou()->getHindrances()->setNotRelevant(true)->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getMotivations()->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getDependants()->setPets(true)->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getFeelings()->setEnergy(10)->setMood(10)->setWeight(10)->setCompletedDate(new \DateTime()); $narrative = $this->instance->buildNarrative($questionnaire); $this->assertEquals($expectedNarrative, $narrative->getMessages()); }
/** * @inheritdoc */ protected function generateFemaleOption() { $person = new Person(); $person->setGender(Person::GENDER_FEMALE)->setFirstName('Patti')->setLastName('Cline')->setAge(65); $questionnaire = new Questionnaire($person); $questionnaire->setDateCreated($this->creationDate)->getAboutYou()->getFeelings()->setEnergy(100)->setWeight(60)->setMood(75)->setFatigue(10)->setFitness(10)->setStress(25)->setCompletedDate($this->creationDate); $questionnaire->getAboutYou()->getHindrances()->setNotRelevant(true)->setCompletedDate($this->creationDate); $questionnaire->getAboutYou()->getMotivations()->setAppearance(true)->setCompletedDate($this->creationDate); $questionnaire->getAboutYou()->getDependants()->setGrandChildren(true)->setCompletedDate($this->creationDate); return $questionnaire; }
public function setUp() { $this->builder = new NarrativeBuilder(); $person = new Person(); $person->setGender('male')->setAge('40')->setFirstName(uniqid('FN_')); $this->questionnaire = new Questionnaire($person); $this->questionnaire->getAboutYou()->setCompletedDate(new \DateTime()); $this->questionnaire->getAboutYou()->getFeelings()->setEnergy(100)->setFatigue(100)->setMood(100)->setFitness(100)->setStress(100)->setWeight(80)->setCompletedDate(new \DateTime()); $this->questionnaire->getEating()->setDrinksChoice('water')->setBreakfastChoice('other')->setCheeseChoice('other')->setProteinChoice('5')->setFruitAndVegChoice('5')->setPotatoesChoice('other')->setDailySnackChoice('')->setCompletedDate(new \DateTime()); $this->questionnaire->getSmoking()->setDoYouSmoke('yes')->setCompletedDate(new \DateTime()); $this->questionnaire->getDrinking()->setDoYouDrink(Drinking::DO_NOT_DRINK)->setWhichDaysDoYouDrink('mon, tue, wed, thur, fri, sat, sun')->setCompletedDate(new \DateTime()); $moving = array('mon' => 30, 'tue' => 30, 'wed' => 30, 'thur' => 30, 'fri' => 30, 'sat' => 30, 'sun' => 30); $this->questionnaire->getMoving()->setAerobicActivityDays($moving)->setStrengtheningActivityDays($moving)->setCompletedDate(new \DateTime()); }
public function setUp() { $this->builder = new NarrativeBuilder(); $person = new Person(); $person->setGender('male')->setAge('40')->setFirstName(uniqid('FN_')); $this->questionnaire = new Questionnaire($person); $this->questionnaire->getAboutYou()->setCompletedDate(new \DateTime()); $this->questionnaire->getAboutYou()->getFeelings()->setEnergy(100)->setFatigue(100)->setMood(100)->setFitness(100)->setStress(100)->setWeight(35)->setCompletedDate(new \DateTime()); $this->questionnaire->getEating()->setDrinksChoice('water')->setBreakfastChoice('other')->setCheeseChoice('other')->setProteinChoice('5')->setFruitAndVegChoice('5')->setPotatoesChoice('other')->setDailySnackChoice('')->setCompletedDate(new \DateTime()); $this->questionnaire->getSmoking()->setDoYouSmoke('no')->setCompletedDate(new \DateTime()); $this->questionnaire->getDrinking()->setDoYouDrink(Drinking::DRINK_TWO_TO_FOUR_TIMES_A_MONTH)->setBingingFrequency(Drinking::BINGE_L_T_MONTHLY)->setCompletedDate(new \DateTime()); $moving = array('mon' => 30, 'wed' => 30, 'fri' => 30, 'sun' => 30); $this->questionnaire->getMoving()->setAerobicActivityDays($moving)->setStrengtheningActivityDays($moving)->setCompletedDate(new \DateTime()); }
public function setUp() { $this->builder = new NarrativeBuilder(); $person = new Person(); $person->setGender('male')->setAge('40')->setFirstName(uniqid('FN_')); $this->questionnaire = new Questionnaire($person); $this->questionnaire->getAboutYou()->setCompletedDate(new \DateTime()); $this->questionnaire->getAboutYou()->getFeelings()->setEnergy(30)->setFatigue(30)->setMood(30)->setFitness(30)->setStress(30)->setWeight(0)->setCompletedDate(new \DateTime()); $this->questionnaire->getEating()->setDrinksChoice('water')->setBreakfastChoice('other')->setCheeseChoice('other')->setProteinChoice('5')->setFruitAndVegChoice('5')->setPotatoesChoice('other')->setDailySnackChoice('')->setCompletedDate(new \DateTime()); $this->questionnaire->getSmoking()->setDoYouSmoke('no')->setCompletedDate(new \DateTime()); $drinks = new Drinks(); $drinks->setBeerCiderPintAmount(2); $this->questionnaire->getDrinking()->setDoYouDrink(Drinking::DOES_DRINK)->setWeekdayDrinks($drinks)->setWeekendDrinks($drinks)->setWhichDaysDoYouDrink('mon, wed, fri, sun')->setCompletedDate(new \DateTime()); $this->questionnaire->getMoving()->setCompletedDate(new \DateTime()); }
public function setUp() { $this->builder = new NarrativeBuilder(); $person = new Person(); $person->setGender('female')->setAge('40')->setFirstName(uniqid('FN_')); $this->questionnaire = new Questionnaire($person); $this->questionnaire->getAboutYou()->setCompletedDate(new \DateTime()); $this->questionnaire->getAboutYou()->getFeelings()->setEnergy(100)->setFatigue(100)->setMood(100)->setFitness(100)->setStress(100)->setWeight(35)->setCompletedDate(new \DateTime()); $this->questionnaire->getEating()->setDrinksChoice('sugary drink')->setBreakfastChoice('sugary cereal')->setCheeseChoice('hard cheese')->setProteinChoice('ham')->setFruitAndVegChoice('0')->setPotatoesChoice('chips')->setDailySnackChoice('sweets, crisps, cake, biscuits')->setCompletedDate(new \DateTime()); $this->questionnaire->getSmoking()->setDoYouSmoke('no')->setCompletedDate(new \DateTime()); $drinks = (new Drinks())->setBeerCiderPintAmount(5)->setBeerCiderBottleAmount(5); $this->questionnaire->getDrinking()->setDoYouDrink(Drinking::DOES_DRINK)->setWhichDaysDoYouDrink('thur, fri, sat')->setWeekendDrinks($drinks)->setWeekdayDrinks($drinks)->setCompletedDate(new \DateTime()); $moving = array('mon' => 40, 'tue' => 40, 'wed' => 40, 'sun' => 40); $this->questionnaire->getMoving()->setAerobicActivityDays($moving)->setStrengtheningActivityDays($moving)->setCompletedDate(new \DateTime()); }
public function setUp() { $this->builder = new NarrativeBuilder(); $person = new Person(); $person->setGender('female')->setAge('40')->setFirstName(uniqid('FN_')); $this->questionnaire = new Questionnaire($person); $this->questionnaire->getAboutYou()->setCompletedDate(new \DateTime()); $this->questionnaire->getAboutYou()->getFeelings()->setWeight(0)->setCompletedDate(new \DateTime()); $this->questionnaire->getEating()->setDrinksChoice('sugary drink')->setBreakfastChoice('sugary cereals')->setCheeseChoice('hard cheese')->setProteinChoice('ham')->setFruitAndVegChoice('0')->setPotatoesChoice('chips')->setDailySnackChoice('cake, biscuits, crisps, sweets')->setCompletedDate(new \DateTime()); $this->questionnaire->getSmoking()->setDoYouSmoke('yes')->setCompletedDate(new \DateTime()); $drinks = new Drinks(); $drinks->setBeerCiderPintAmount(5)->setWineAmount(3)->setSpiritsAmount(5)->setCompletedDate(new \DateTime()); $this->questionnaire->getDrinking()->setDoYouDrink(Drinking::DOES_DRINK)->setWhichDaysDoYouDrink('mon, tue, wed, thur, fri, sat, sun')->setWeekendDrinks($drinks)->setWeekdayDrinks($drinks)->setCompletedDate(new \DateTime()); $this->questionnaire->getMoving()->setCompletedDate(new \DateTime()); }
public function testIGetARedMessageWithFitnessQuestionForMoving() { $questionnaire = new Questionnaire(new Person()); $questionnaire->getMoving()->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getFeelings()->setFitness(21); $expected = array('moving' => array('moving_red', 'moving_red_low_fitness')); $this->assertEquals($expected, $this->instance->buildNarrative($questionnaire)->getMessages()); }
public function testICanGetAPositiveNarrativeAfterQuitting() { $questionnaire = new Questionnaire(new Person()); $questionnaire->getAboutYou()->getFeelings()->setEnergy(100)->setMood(20); $questionnaire->getSmoking()->setDoYouSmoke('quit')->setCompletedDate(new \DateTime()); $expected = array('smoking' => array('smoking_green_quit')); $this->assertEquals($expected, $this->instance->buildNarrative($questionnaire)->getMessages()); }
public function testIGetARedMessageWithSnacksWarningEating() { $questionnaire = new Questionnaire(new Person()); $questionnaire->getEating()->setProteinChoice('ham')->setCheeseChoice('hard cheese')->setPotatoesChoice('chips')->setDailySnackChoice('sweets, crisps, biscuits, cake')->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getFeelings()->setWeight(25); $expected = array('eating' => array('eating_red', 'eating_red_low_weight')); $this->assertEquals($expected, $this->instance->buildNarrative($questionnaire)->getMessages()); }
/** * @param Questionnaire $questionnaire */ protected function buildRedSmokingBehaviours(Questionnaire $questionnaire) { $symptom = SymptomGenerator::generateRelatedSymptom($questionnaire->getAboutYou()->getFeelings()->getNormalisedValues()); if (SmokingIsOccasionalSpecification::isSatisfiedBy($questionnaire)) { $this->getMessageForOccasionalSmoker($questionnaire->getAboutYou()->getFeelings()->getNormalisedValues()[$symptom], $symptom); } else { $this->getMessageForSmoker($questionnaire->getAboutYou()->getFeelings()->getNormalisedValues()[$symptom], $symptom); } }
public function testICanExcludeAndGetTheSameSymptom() { $questionnaire = new Questionnaire(new Person()); $possibles = $questionnaire->getAboutYou()->getFeelings()->getNormalisedValues(); $exclusions = array_keys($possibles); array_shift($exclusions); $expected = array_keys($possibles)[0]; $this->assertEquals($expected, SymptomGenerator::generateRelatedSymptom($possibles, $exclusions)); }
public function testICanGetANarrativeWithMaxFeeling() { $questionnaire = new Questionnaire(new Person()); $questionnaire->getAboutYou()->getFeelings()->setEnergy(100)->setMood(100)->setWeight(100)->setFatigue(100)->setFitness(100)->setStress(100); $questionnaire->getSmoking()->setDoYouSmoke('sometimes')->setCompletedDate(new \DateTime()); $expected = array('smoking_red_sometimes'); $results = $this->instance->buildNarrative($questionnaire)->getMessages()['smoking']; foreach ($expected as $value) { $this->assertTrue(in_array($value, $results)); } }
public function testIGetANonEmptyResultsNarrativeOnACompleteQuiz() { $person = (new Person())->setFirstName('test')->setGender('female'); $completedDate = new \DateTime(); $questionnaire = new Questionnaire($person); $aboutYou = $questionnaire->getAboutYou(); $aboutYou->getFeelings()->setCompletedDate($completedDate); $aboutYou->getHindrances()->setCompletedDate($completedDate); $aboutYou->getMotivations()->setCompletedDate($completedDate); $aboutYou->getDependants()->setCompletedDate($completedDate); $questionnaire->setAboutYou($aboutYou->setCompletedDate($completedDate)); $questionnaire->getDrinking()->setCompletedDate($completedDate); $questionnaire->getEating()->setCompletedDate($completedDate); $questionnaire->getMoving()->setCompletedDate($completedDate); $questionnaire->getSmoking()->setCompletedDate($completedDate); $results = ResultsNarrativeHelper::extractResultsNarrative($questionnaire, $this->translator); foreach ($results as $result) { $this->assertEquals(base64_encode(self::TRANS_STRING), $result); } }
/** * @inheritDoc */ public static function isSatisfiedBy(Questionnaire $questionnaire) { return $questionnaire->getAboutYou()->isCompleted(); }
public function testAboutYouFeelingsAreAllZeroSpecificationReturnsFalse() { $questionnaire = new Questionnaire(new Person()); $questionnaire->getAboutYou()->getFeelings()->setMood(100)->setWeight(0); $this->assertFalse(AboutYouFeelingsAreAllZeroSpecification::isSatisfiedBy($questionnaire)); }
/** * @inheritDoc */ public static function isSatisfiedBy(Questionnaire $questionnaire) { $normalisedFeelings = $questionnaire->getAboutYou()->getFeelings()->getNormalisedValues(); return 0 === count(array_filter($normalisedFeelings)); }
/** * @param Questionnaire $questionnaire * @return string */ protected function randomizeHindrances(Questionnaire $questionnaire) { $hindrances = array($questionnaire->getAboutYou()->getHindrances()->isNoTime() ? self::IS_TIME : null, $questionnaire->getAboutYou()->getHindrances()->isOtherPeople() ? self::IS_OTHERS : null, $questionnaire->getAboutYou()->getHindrances()->isInsecurity() ? self::IS_INSECURITY : null, $questionnaire->getAboutYou()->getHindrances()->isNoMoney() ? self::IS_MONEY : null, $questionnaire->getAboutYou()->getHindrances()->isLackMotivation() ? self::IS_MOTIVATION : null); $hindrances = array_filter($hindrances); if (count($hindrances) > 2) { shuffle($hindrances); $hindrances = array_slice($hindrances, 0, 2); } return implode(' or ', $hindrances); }
/** * @param Questionnaire $questionnaire * @param string $rag * @param string $suffix */ protected function buildDrinkingBehaviours(Questionnaire $questionnaire, $rag, $suffix = '') { $symptom = SymptomGenerator::generateRelatedSymptom($questionnaire->getAboutYou()->getFeelings()->getNormalisedValues()); $value = $questionnaire->getAboutYou()->getFeelings()->getNormalisedValues()[$symptom]; if ($symptom !== 'weight') { $this->generateSymptomMessages($value, self::SECTION_NAME, $rag, $symptom, $suffix); } else { $gender = $suffix . '_' . Person::GENDER_FEMALE; if (RespondentIsMaleSpecification::isSatisfiedBy($questionnaire)) { $gender = $suffix . '_' . Person::GENDER_MALE; } $this->generateSymptomMessages($value, self::SECTION_NAME, $rag, $symptom, $gender); } }
/** * @param Questionnaire $questionnaire */ protected function buildGreenMovingNarrative(Questionnaire $questionnaire) { $this->narrative->addMessages(self::SECTION_NAME, array('moving_green')); $this->buildGreenRagBehaviours($questionnaire->getAboutYou()->getFeelings()->getNormalisedValues()); }
/** * @inheritDoc */ public static function isSatisfiedBy(Questionnaire $questionnaire) { return $questionnaire->getAboutYou()->getDependants()->isNotRelevant() === false; }
public function testICanGetAnRedNarrativeAsAMaleDrinker() { $questionnaire = new Questionnaire(new Person()); $questionnaire->getPerson()->setGender('male'); $questionnaire->getAboutYou()->getFeelings()->setEnergy(100)->setWeight(20); $drinks = new Drinks(); $drinks->setBeerCiderPintAmount(80)->setSpiritsAmount(30); $questionnaire->getDrinking()->setDoYouDrink(Drinking::DOES_DRINK)->setWhichDaysDoYouDrink('mon, tues, wed, thurs, fri, sat, sun')->setWeekdayDrinks($drinks)->setWeekendDrinks($drinks)->setCompletedDate(new \DateTime()); $expected = array('drinking' => array('drinking_red_min_weight_gt_5_days_male')); $this->assertEquals($expected, $this->instance->buildNarrative($questionnaire)->getMessages()); }
/** * @param Questionnaire $questionnaire * @return array */ protected function randomizePriorities(Questionnaire $questionnaire) { $motivationPriorities = $questionnaire->getAboutYou()->getMotivations(); $motivations = array($motivationPriorities->isWeight() ? self::MOTIVATIONS_WEIGHT : null, $motivationPriorities->isEnergy() ? self::MOTIVATIONS_ENERGY : null, $motivationPriorities->isBodyPain() ? self::MOTIVATIONS_BODY_PAIN : null, $motivationPriorities->isFeelYounger() ? self::MOTIVATIONS_FEEL_YOUNGER : null, $motivationPriorities->isIndependence() ? self::MOTIVATIONS_INDEPENDENCE : null, $motivationPriorities->isAlertness() ? self::MOTIVATIONS_ALERTNESS : null, $motivationPriorities->isSocialLife() ? self::MOTIVATIONS_SOCIAL_LIFE : null, $motivationPriorities->isAppearance() ? self::MOTIVATIONS_APPEARANCE : null, $motivationPriorities->isFamily() ? self::MOTIVATIONS_FAMILY : null); $motivations = array_filter($motivations); if (count($motivations) > 3) { shuffle($motivations); $motivations = array_slice($motivations, 0, 3); } return $motivations; }
public function testSubstitutionOfThreeOrMoreMotivations() { $questionnaire = new Questionnaire(new Person()); $questionnaire->getPerson()->setGender('male'); $questionnaire->getMoving()->setCompletedDate(new \DateTime()); $questionnaire->getEating()->setCompletedDate(new \DateTime()); $questionnaire->getDrinking()->setCompletedDate(new \DateTime()); $questionnaire->getSmoking()->setCompletedDate(new \DateTime()); $questionnaire->getAboutYou()->getMotivations()->setAlertness(true)->setAppearance(true)->setWeight(true)->setEnergy(true); $priorityCopy = $this->instance->buildNarrative($questionnaire)->getSubstitutions()['{{PRIORITY_COPY}}']; $this->assertEquals(1, substr_count($priorityCopy, 'and')); $this->assertEquals(1, substr_count($priorityCopy, ', ')); }
/** * @inheritDoc */ public static function isSatisfiedBy(Questionnaire $questionnaire) { return $questionnaire->getAboutYou()->getFeelings()->getNormalisedScore() <= self::NEGATIVE_NARRATIVE_CUTOFF; }