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;
 }