You are here

public function QuizFeedbackTest::testAnswerFeedback in Quiz 8.5

Same name and namespace in other branches
  1. 8.6 tests/src/Functional/QuizFeedbackTest.php \Drupal\Tests\quiz\Functional\QuizFeedbackTest::testAnswerFeedback()
  2. 6.x tests/src/Functional/QuizFeedbackTest.php \Drupal\Tests\quiz\Functional\QuizFeedbackTest::testAnswerFeedback()

Test question feedback.

Note that we are only testing if any feedback displays, each question type has its own tests for testing feedback returned from that question type.

File

tests/src/Functional/QuizFeedbackTest.php, line 22

Class

QuizFeedbackTest
Test quiz feedback.

Namespace

Drupal\Tests\quiz\Functional

Code

public function testAnswerFeedback() {
  $this
    ->drupalLogin($this->admin);
  $quiz = $this
    ->createQuiz();

  // 2 questions.
  $question1 = $this
    ->createQuestion(array(
    'type' => 'truefalse',
    'truefalse_correct' => 1,
  ));
  $this
    ->linkQuestionToQuiz($question1, $quiz);
  $question2 = $this
    ->createQuestion(array(
    'type' => 'truefalse',
    'truefalse_correct' => 1,
  ));
  $this
    ->linkQuestionToQuiz($question2, $quiz);
  $review_options = array(
    'attempt' => t('Your answer'),
    'correct' => t('Correct?'),
    'score' => t('Score'),
    'answer_feedback' => t('Feedback'),
    'solution' => t('Correct answer'),
  );
  $this
    ->drupalLogin($this->user);

  // Answer the first question.
  $this
    ->drupalGet("quiz/{$quiz->id()}/take");
  $this
    ->drupalPostForm(NULL, array(
    "question[{$question1->id()}][answer]" => 1,
  ), t('Next'));

  // Check feedback after the Question.
  foreach ($review_options as $option => $text) {
    $quiz->review_options = array(
      'question' => array(
        $option => $option,
      ),
    );
    $quiz
      ->save();
    $this
      ->drupalGet("quiz/{$quiz->id()}/take/1/feedback");
    $this
      ->assertText('Question 1');
    $this
      ->assertRaw('<th>' . $text . '</th>');
    foreach ($review_options as $option2 => $text2) {
      if ($option != $option2) {
        $this
          ->assertNoRaw('<th>' . $text2 . '</th>');
      }
    }
  }

  // Feedback only after the quiz.
  $this
    ->drupalGet("quiz/{$quiz->id()}/take/1/feedback");
  $this
    ->drupalPostForm(NULL, array(), t('Next question'));
  $this
    ->drupalPostForm(NULL, array(
    "question[{$question2->id()}][answer]" => 1,
  ), t('Finish'));

  // Check feedback after the Quiz.
  foreach ($review_options as $option => $text) {
    $quiz->review_options = array(
      'end' => array(
        $option => $option,
      ),
    );
    $quiz
      ->save();
    $this
      ->drupalGet("quiz/{$quiz->id()}/result/1");
    $this
      ->assertRaw('<th>' . $text . '</th>');
    foreach ($review_options as $option2 => $text2) {
      if ($option != $option2) {
        $this
          ->assertNoRaw('<th>' . $text2 . '</th>');
      }
    }
  }
}