/** * Test two questions. Max score = 2 * @test * @dataProvider answerDataProvider * @param int $expected * @param array $answers */ public function calculateScoreForAnswersWorks($expected, $answers) { $exercise = new MultipleChoiceSameAnswerExercise(); $question = new MultipleChoiceQuestion(); $question->setText('Question'); $rightAnswer = new MultipleChoicePossibleAnswer(); $rightAnswer->setNumber(0); $rightAnswer->setText('Answer'); $rightAnswer->setIsCorrectAnswer(true); $question->addPossibleAnswer($rightAnswer); $wrongAnswer = new MultipleChoicePossibleAnswer(); $wrongAnswer->setNumber(1); $wrongAnswer->setText('Answer'); $wrongAnswer->setIsCorrectAnswer(false); $question->addPossibleAnswer($wrongAnswer); $exercise->addQuestion($question); $question = new MultipleChoiceQuestion(); $question->setText('Question'); $rightAnswer = new MultipleChoicePossibleAnswer(); $rightAnswer->setNumber(0); $rightAnswer->setText('Answer'); $rightAnswer->setIsCorrectAnswer(true); $question->addPossibleAnswer($rightAnswer); $rightAnswer = new MultipleChoicePossibleAnswer(); $rightAnswer->setNumber(1); $rightAnswer->setText('Answer'); $rightAnswer->setIsCorrectAnswer(false); $question->addPossibleAnswer($rightAnswer); $exercise->addQuestion($question); $this->assertSame($expected, $exercise->calculateScoreForAnswers($answers)); }
/** * @param array $possibleAnswersArray */ public function setPossibleAnswersFromArray($possibleAnswersArray) { $this->possibleAnswers->clear(); $correctAnswerHasBeenSet = FALSE; foreach ($possibleAnswersArray as $possibleAnswerData) { $possibleAnswer = new MultipleChoicePossibleAnswer(); $possibleAnswer->setText($possibleAnswerData['text']); $possibleAnswer->setIsCorrectAnswer($possibleAnswerData['correctAnswer'] ? TRUE : FALSE); if ($possibleAnswer->getIsCorrectAnswer()) { $correctAnswerHasBeenSet = TRUE; } if (isset($possibleAnswerData['new_image']) && is_a($possibleAnswerData['new_image'], '\\_OurBrand_\\Quiz\\Domain\\Model\\ImageResource')) { $possibleAnswer->setImage($possibleAnswerData['new_image']); } $this->addPossibleAnswer($possibleAnswer); } // Ensure there is a correct answer to this question. if ($this->possibleAnswers->count() && !$correctAnswerHasBeenSet) { $this->possibleAnswers->first()->setIsCorrectAnswer(TRUE); } }