quiz-6.0.0-alpha4/tests/src/Functional/QuizBuildOnLastTest.php

tests/src/Functional/QuizBuildOnLastTest.php
<?php

namespace Drupal\Tests\quiz\Functional;

use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\quiz\Util\QuizUtil;

/**
 * Test quiz results behavior.
 *
 * @group Quiz
 */
class QuizBuildOnLastTest extends QuizTestBase {

  use StringTranslationTrait;

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['quiz_truefalse', 'quiz_multichoice'];

  /**
   * Test the build on last attempt functionality.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   * @throws \Behat\Mink\Exception\ExpectationException
   */
  public function testBuildOnLastAttempt() {
    $this->drupalLogin($this->admin);

    // Prepopulate correct answers.
    $quiz = $this->createQuiz([
      'build_on_last' => 'correct',
    ]);

    $question1 = $this->createQuestion([
      'type' => 'truefalse',
      'truefalse_correct' => 1,
    ]);
    $this->linkQuestionToQuiz($question1, $quiz);
    $question2 = $this->createQuestion([
      'type' => 'truefalse',
      'truefalse_correct' => 1,
    ]);
    $this->linkQuestionToQuiz($question2, $quiz);
    $question3 = $this->createQuestion([
      'type' => 'truefalse',
      'truefalse_correct' => 1,
    ]);
    $this->linkQuestionToQuiz($question3, $quiz);
    $question4 = $this->createQuestion([
      'type' => 'truefalse',
      'truefalse_correct' => 1,
    ]);
    $this->linkQuestionToQuiz($question4, $quiz);

    $this->drupalLogin($this->user);

    // Take the quiz.
    $this->drupalGet("quiz/{$quiz->id()}/take");
    // No build on last form here.
    $this->submitForm([
      "question[{$question1->id()}][answer]" => '1',
    ], (string) $this->t('Next'));
    $this->submitForm([
      "question[{$question2->id()}][answer]" => '0',
    ], (string) $this->t('Next'));
    $this->submitForm([
      "question[{$question3->id()}][answer]" => '1',
    ], (string) $this->t('Next'));
    $this->submitForm([
      "question[{$question4->id()}][answer]" => '0',
    ], (string) $this->t('Finish'));

    // Take it again, ensure the correct answers are prefilled.
    $this->drupalGet("quiz/{$quiz->id()}/take");
    $this->submitForm([
      'build_on_last' => 'correct',
    ], (string) $this->t('Start @quiz', ['@quiz' => QuizUtil::getQuizName()]));
    $this->assertSession()->checkboxChecked("edit-question-{$question1->id()}-answer-1");
    $this->submitForm([
      "question[{$question1->id()}][answer]" => '1',
    ], (string) $this->t('Next'));
    $this->assertSession()->checkboxNotChecked("edit-question-{$question2->id()}-answer-1");
    $this->submitForm([
      "question[{$question2->id()}][answer]" => '0',
    ], (string) $this->t('Next'));
    $this->assertSession()->checkboxChecked("edit-question-{$question3->id()}-answer-1");
    $this->submitForm([
      "question[{$question3->id()}][answer]" => '1',
    ], (string) $this->t('Next'));
    $this->assertSession()->checkboxNotChecked("edit-question-{$question4->id()}-answer-1");
    $this->submitForm([
      "question[{$question4->id()}][answer]" => '0',
    ], (string) $this->t('Finish'));

    // Switch the build option.
    $quiz->set('build_on_last', 'all');
    $quiz->setNewRevision();
    $quiz->save();

    // @todo the change above would have forced a new revision, need to account
    // for this in D8. User is getting a screen, they should not because there
    // shouldn't be an existing attempt for this version.
    // Take the quiz with this revision.
    $this->drupalGet("quiz/{$quiz->id()}/take");
    $this->submitForm([
      "question[{$question1->id()}][answer]" => '1',
    ], (string) $this->t('Skip'));
    $this->submitForm([
      "question[{$question2->id()}][answer]" => '0',
    ], (string) $this->t('Next'));
    $this->submitForm([
      "question[{$question3->id()}][answer]" => '1',
    ], (string) $this->t('Next'));
    $this->submitForm([
      "question[{$question4->id()}][answer]" => '0',
    ], (string) $this->t('Finish'));

    // Take it again, ensure all the answers are prefilled.
    $this->drupalGet("quiz/{$quiz->id()}/take");
    $this->submitForm([
      'build_on_last' => 'all',
    ], (string) $this->t('Start @quiz', ['@quiz' => QuizUtil::getQuizName()]));
    $this->assertSession()->checkboxNotChecked("edit-question-{$question1->id()}-answer-1");
    $this->assertSession()->checkboxNotChecked("edit-question-{$question1->id()}-answer-0");
    $this->submitForm([
      "question[{$question1->id()}][answer]" => '1',
    ], (string) $this->t('Next'));
    $this->assertSession()->checkboxChecked("edit-question-{$question2->id()}-answer-0");
    $this->submitForm([
      "question[{$question2->id()}][answer]" => '0',
    ], (string) $this->t('Next'));
    $this->assertSession()->checkboxChecked("edit-question-{$question3->id()}-answer-1");
    $this->submitForm([
      "question[{$question3->id()}][answer]" => '1',
    ], (string) $this->t('Next'));
    $this->assertSession()->checkboxChecked("edit-question-{$question4->id()}-answer-0");
    $this->submitForm([
      "question[{$question4->id()}][answer]" => '0',
    ], (string) $this->t('Finish'));
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc