public function testSpecificationIsTrue()
 {
     $questionnaire = new Questionnaire(new Person());
     $drinks = $questionnaire->getDrinking()->getWeekdayDrinks()->setBeerCiderBottleAmount(1);
     $questionnaire->getDrinking()->setDoYouDrink(Drinking::DOES_DRINK)->setWhichDaysDoYouDrink('mon, tues')->setBingingFrequency(Drinking::BINGE_NEVER)->setWeekdayDrinks($drinks);
     $this->assertTrue(DrinkingLTE2DaysLTE3UnitsSpecification::isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsTrue()
 {
     $questionnaire = new Questionnaire(new Person());
     $questionnaire->getDrinking()->setWhichDaysDoYouDrink('sat, sun');
     $questionnaire->getDrinking()->getWeekendDrinks()->setBeerCiderPintAmount(2);
     $this->assertTrue(DrinkingExceedsThreeUnitsSpecification::isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsFalse()
 {
     $questionnaire = new Questionnaire((new Person())->setGender(Person::GENDER_FEMALE));
     $questionnaire->getDrinking()->setWhichDaysDoYouDrink('mon');
     $questionnaire->getDrinking()->getWeekdayDrinks()->setSpiritsAmount(8);
     $this->assertFalse(DrinkingDoesNotExceedDailyLimitsForGenderSpecification::isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsTrue()
 {
     $questionnaire = new Questionnaire((new Person())->setGender(Person::GENDER_MALE));
     $drinks = $questionnaire->getDrinking()->getWeekdayDrinks()->setBeerCiderBottleAmount(2);
     $questionnaire->getDrinking()->setDoYouDrink(Drinking::DOES_DRINK)->setWhichDaysDoYouDrink('mon, tues, wed, thur')->setBingingFrequency(Drinking::BINGE_NEVER)->setWeekdayDrinks($drinks);
     $this->assertTrue(DrinkingBetween3And5DaysWithinSuggestedLimitsSpecification::isSatisfiedBy($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(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(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('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 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 testSpecificationIsFalseAndIAmMale()
 {
     $questionnaire = new Questionnaire((new Person())->setGender(Person::GENDER_MALE));
     $drinks = (new Drinks())->setBeerCiderPintAmount(3);
     $questionnaire->getDrinking()->setDoYouDrink(Drinking::DOES_DRINK)->setWhichDaysDoYouDrink('mon, tue, wed')->setWeekdayDrinks($drinks);
     $this->assertFalse(DrinkingUnitsInLowerRiskForGenderSpecification::isSatisfiedBy($questionnaire));
 }
 /**
  * @inheritDoc
  */
 public function calculateScore(Questionnaire $questionnaire)
 {
     if ($questionnaire->getDrinking()->isCompleted()) {
         $this->extractDrinkingScore($questionnaire);
     }
     return $this->getRag();
 }
 public function testCompletedSectionsButNoQuestionnaireDate()
 {
     $this->instance->getDrinking()->setCompletedDate(new \DateTime());
     $this->instance->getEating()->setCompletedDate(new \DateTime());
     $this->instance->getMoving()->setCompletedDate(new \DateTime());
     $this->instance->getSmoking()->setCompletedDate(new \DateTime());
     $this->assertTrue($this->instance->isCompleted());
 }
 public function testGetDrinking()
 {
     $expectedKeys = array("drinkingDoYouDrink", "drinkingFrequency", "weekdayDrinksBeerCiderPintAmount", "weekdayDrinksBeerCiderBottleAmount", "weekdayDrinksWineAmount", "weekdayDrinksSpiritsPintAmount", "weekdayDrinksCompleted", "weekendDrinksBeerCiderPintAmount", "weekendDrinksBeerCiderBottleAmount", "weekendDrinksWineAmount", "weekendDrinksSpiritsPintAmount", "weekendDrinksCompleted", "occasionalDrinksBeerCiderPintAmount", "occasionalDrinksBeerCiderBottleAmount", "occasionalDrinksWineAmount", "occasionalDrinksSpiritsPintAmount", "occasionalDrinksCompleted", "hasBinged", "drinkingCompleted", "drinkingRag");
     $questionnaire = new Questionnaire(new Person());
     $export = DrinkingHelper::extractDrinking($questionnaire->getDrinking());
     foreach ($expectedKeys as $key) {
         $this->assertArrayHasKey($key, $export);
     }
 }
 /**
  * @inheritDoc
  */
 public static function isSatisfiedBy(Questionnaire $questionnaire)
 {
     $maxUnits = DrinkingScore::getDailyMaxUnits($questionnaire->getDrinking());
     $gender = $questionnaire->getPerson()->getGender();
     switch ($gender) {
         case Person::GENDER_FEMALE:
             return $maxUnits > DrinkingScore::DAILY_CUTOFF_UNITS_FEMALE;
         case Person::GENDER_MALE:
             return $maxUnits > DrinkingScore::DAILY_CUTOFF_UNITS_MALE;
     }
 }
 /**
  * @param Questionnaire $questionnaire
  * @return int
  */
 protected function generateScore(Questionnaire $questionnaire)
 {
     $result = 0;
     $result += $questionnaire->getDrinking()->getRagScore()['value'];
     $result += $questionnaire->getMoving()->getRagScore()['value'];
     $result += $questionnaire->getEating()->getRagScore()['value'];
     $result += $questionnaire->getSmoking()->getRagScore()['value'];
     if ($questionnaire->getSmoking()->getRagScore()['rag'] === RagScore::RAG_RED) {
         if ($result > self::RED_CUTOFF) {
             return self::RED_CUTOFF;
         }
     }
     return $result;
 }
 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);
     }
 }
 public function testSpecificationIsTrue()
 {
     $questionnaire = new Questionnaire((new Person())->setGender(Person::GENDER_MALE));
     $questionnaire->getDrinking()->setWhichDaysDoYouDrink('mon, tue, wed, thur, fri, sat')->setDoYouDrink(Drinking::DOES_DRINK)->setWeekdayDrinks((new Drinks())->setSpiritsAmount(1));
     $this->assertTrue(DrinkingExceeds5DaysButNot14UnitsSpecification::isSatisfiedBy($questionnaire));
 }
 /**
  * @inheritDoc
  */
 public static function isSatisfiedBy(Questionnaire $questionnaire)
 {
     return $questionnaire->getDrinking()->getBingingFrequency() === Drinking::BINGE_NEVER || DrinkingDoesNotExceedDailyLimitsForGenderSpecification::isSatisfiedBy($questionnaire);
 }
 public function testSpecificationReturnsTrue()
 {
     $questionnaire = new Questionnaire(new Person());
     $questionnaire->getDrinking()->setCompletedDate(new \DateTime());
     $this->assertTrue($this->instance->isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsFalse()
 {
     $questionnaire = new Questionnaire((new Person())->setGender(Person::GENDER_MALE));
     $questionnaire->getDrinking()->setDoYouDrink(Drinking::DRINK_MONTHLY_OR_LESS)->setBingingFrequency(Drinking::BINGE_NEVER);
     $this->assertFalse(DrinkingIsLTMonthlyAndHasBingeSpecification::isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsTrue()
 {
     $questionnaire = new Questionnaire(new Person());
     $questionnaire->getDrinking()->setDoYouDrink(Drinking::DRINK_MONTHLY_OR_LESS);
     $this->assertTrue(DrinkingMonthlyOrLessSpecification::isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsTrue()
 {
     $questionnaire = new Questionnaire((new Person())->setGender(Person::GENDER_MALE));
     $questionnaire->getDrinking()->setWhichDaysDoYouDrink('mon, tue, wed, thur')->setBingingFrequency(Drinking::BINGE_MONTHLY)->setDoYouDrink(Drinking::DOES_DRINK)->setWeekdayDrinks((new Drinks())->setSpiritsAmount(1));
     $this->assertTrue(DrinkingDoesNotExceed14UnitsAWeekButHasBingedSpecification::isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsTrue()
 {
     $questionnaire = new Questionnaire((new Person())->setGender(Person::GENDER_MALE));
     $questionnaire->getDrinking()->setDoYouDrink(Drinking::DRINK_TWO_TO_FOUR_TIMES_A_MONTH)->setBingingFrequency(Drinking::BINGE_L_T_MONTHLY);
     $this->assertTrue(Drinking2to4TimesAMonthWithBingeSpecification::isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsFalse()
 {
     $questionnaire = new Questionnaire(new Person());
     $questionnaire->getDrinking()->setWhichDaysDoYouDrink('mon, tue, wed, thur');
     $this->assertFalse(DrinkingDaysLTE2Specification::isSatisfiedBy($questionnaire));
 }
 public function testSpecificationIsFalse()
 {
     $questionnaire = new Questionnaire(new Person());
     $questionnaire->getDrinking()->setDoYouDrink(Drinking::DRINK_MONTHLY_OR_LESS)->setBingingFrequency(Drinking::BINGE_MONTHLY);
     $this->assertFalse(DrinkingLessThanMonthlyAndDoesNotBingeSpecification::isSatisfiedBy($questionnaire));
 }
 /**
  * @inheritDoc
  */
 public static function isSatisfiedBy(Questionnaire $questionnaire)
 {
     return self::unitsInLowRiskForGender($questionnaire->getPerson(), $questionnaire->getDrinking());
 }
 /**
  * @inheritDoc
  */
 public static function isSatisfiedBy(Questionnaire $questionnaire)
 {
     return $questionnaire->getDrinking()->getRagScore()['rag'] === RagScore::RAG_AMBER;
 }
 /**
  * @inheritDoc
  */
 public static function isSatisfiedBy(Questionnaire $questionnaire)
 {
     $drinking = $questionnaire->getDrinking();
     return DrinkingScore::RAG_GREEN_CUTOFF >= DrinkingScore::getWeeklyUnits($drinking) && DrinkingHasBingeSpecification::isSatisfiedBy($questionnaire);
 }
 public function testGetFavouriteDrinkTypeWhenDuplicated()
 {
     $person = new Person();
     $person->setGender(Person::GENDER_MALE);
     $questionnaire = new Questionnaire($person);
     $drinking = $questionnaire->getDrinking();
     $drinking->setDoYouDrink(Drinking::DOES_DRINK)->setWhichDaysDoYouDrink('sat, sun')->setWeekendDrinks((new Drinks())->setBeerCiderPintAmount(3)->setWineAmount(3))->setCompletedDate(new \DateTime());
     $this->assertEquals(Drinking::DRINK_TYPE_PINT, DrinkingScore::calculatePreferredDrinkType($drinking));
 }
 /**
  * @inheritDoc
  */
 public static function isSatisfiedBy(Questionnaire $questionnaire)
 {
     return $questionnaire->getDrinking()->isCompleted();
 }