/**
  * @param Questionnaire $questionnaire
  */
 protected function buildAmberMovingNarrative(Questionnaire $questionnaire)
 {
     $prefix = 'moving_amber';
     switch (true) {
         case AmberMovingGreenAerobicRedStrengthSpecification::isSatisfiedBy($questionnaire):
             $suffix = '_aerobic_green_strength_red';
             break;
         case AmberMovingAmberAerobicLowDaysGreenStrengthSpecification::isSatisfiedBy($questionnaire):
             $suffix = '_aerobic_amber_days_strength_green';
             break;
         case AmberMovingAmberAerobicLowDurationGreenStrengthSpecification::isSatisfiedBy($questionnaire):
             $suffix = '_aerobic_amber_duration_strength_green';
             break;
         case AmberMovingAmberAerobicLowDaysRedStrengthSpecification::isSatisfiedBy($questionnaire):
             $suffix = '_aerobic_amber_days_strength_red';
             break;
         default:
             $suffix = '_aerobic_amber_duration_strength_red';
             break;
     }
     $this->narrative->addMessages(self::SECTION_NAME, array($prefix . $suffix));
     $symptom = SymptomGenerator::generateRelatedSymptom($questionnaire->getAboutYou()->getFeelings()->getNormalisedValues());
     $value = $questionnaire->getAboutYou()->getFeelings()->getNormalisedValues()[$symptom];
     $this->generateSymptomMessages($value, self::SECTION_NAME, 'amber', $symptom);
 }
 /**
  * @param Questionnaire $questionnaire
  */
 protected function buildAmberEatingNarrative(Questionnaire $questionnaire)
 {
     $this->narrative->addMessages(self::SECTION_NAME, array('eating_amber'));
     $symptom = SymptomGenerator::generateRelatedSymptom($questionnaire->getAboutYou()->getFeelings()->getNormalisedValues(), self::$exclusions);
     $value = $questionnaire->getAboutYou()->getFeelings()->getNormalisedValues()[$symptom];
     $this->generateSymptomMessages($value, self::SECTION_NAME, 'amber', $symptom);
 }
 /**
  * @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));
 }
 /**
  * @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);
     }
 }