QuizNavigationTestCase.test in Quiz 7.5
Same filename and directory in other branches
Unit tests for the quiz question Module.
File
tests/QuizNavigationTestCase.testView source
<?php
/**
* @file
* Unit tests for the quiz question Module.
*/
/**
* Base test class for Quiz questions.
*/
class QuizNavigationTestCase extends QuizTestCase {
public function setUp($modules = array(), $admin_permissions = array(), $user_permissions = array()) {
$modules[] = 'truefalse';
parent::setUp($modules);
}
public static function getInfo() {
return array(
'name' => t('Quiz navigation'),
'description' => t('Unit test for Quiz navigation.'),
'group' => t('Quiz'),
);
}
/**
* Test the question navigation and access.
*/
public function testQuestionNavigationBasic() {
$this
->drupalLogin($this->admin);
$quiz_node = $this
->drupalCreateQuiz();
// 3 questions.
$question_node1 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node1, $quiz_node);
$question_node2 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node2, $quiz_node);
$question_node3 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node3, $quiz_node);
// Testing basic navigation. Ensure next questions are not yet available.
$this
->drupalLogin($this->user);
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->drupalGet("node/{$quiz_node->nid}/take/1");
$this
->assertText("Page 1 of 3");
$this
->assertResponse(200);
$this
->drupalGet("node/{$quiz_node->nid}/take/2");
$this
->assertResponse(403);
$this
->drupalGet("node/{$quiz_node->nid}/take/3");
$this
->assertResponse(403);
// Answer a question, ensure next question is available.
$this
->drupalGet("node/{$quiz_node->nid}/take/1");
$this
->drupalPost(NULL, array(
"question[{$question_node1->nid}][answer]" => 1,
), t('Next'));
$this
->drupalGet("node/{$quiz_node->nid}/take/2");
$this
->assertText("Page 2 of 3");
$this
->assertResponse(200);
$this
->drupalGet("node/{$quiz_node->nid}/take/3");
$this
->assertResponse(403);
}
/**
* Test that all questions are available when quiz jumping is on.
*/
public function testQuestionNavigationJumping() {
$this
->drupalLogin($this->admin);
$quiz_node = $this
->drupalCreateQuiz(array(
'allow_jumping' => 1,
));
// 5 questions.
$question_node1 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node1, $quiz_node);
$question_node2 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node2, $quiz_node);
$question_node3 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node3, $quiz_node);
$question_node4 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node4, $quiz_node);
$question_node5 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node5, $quiz_node);
// Testing jumpable navigation.
$this
->drupalLogin($this->user);
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->drupalGet("node/{$quiz_node->nid}/take/1");
$this
->assertResponse(200);
$this
->drupalGet("node/{$quiz_node->nid}/take/2");
$this
->assertResponse(200);
$this
->drupalGet("node/{$quiz_node->nid}/take/3");
$this
->assertResponse(200);
// We should have a selectbox right now.
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->assertFieldById('edit-question-number', NULL);
// Check that the "first" pager link does not appear.
$this
->assertNoLinkByHref("node/{$quiz_node->nid}/take/1");
// Test the switch between select/pager.
variable_set('quiz_pager_start', 5);
// One on each side.
variable_set('quiz_pager_siblings', 2);
$this
->drupalGet("node/{$quiz_node->nid}/take/3");
$this
->assertNoFieldById('edit-question-number');
$this
->assertNoLink('1');
$this
->assertLinkByHref("node/{$quiz_node->nid}/take/2");
$this
->assertNoLinkByHref("node/{$quiz_node->nid}/take/3");
$this
->assertLinkByHref("node/{$quiz_node->nid}/take/4");
$this
->assertNoLink('5');
}
/**
* Test that a user can skip a question.
*/
public function testQuestionNavigationSkipping() {
$this
->drupalLogin($this->admin);
// Default behavior, anyway.
$quiz_node = $this
->drupalCreateQuiz(array(
'allow_skipping' => 1,
));
// 3 questions.
$question_node1 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node1, $quiz_node);
$question_node2 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node2, $quiz_node);
$question_node3 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node3, $quiz_node);
// Ensure next questions are blocked until skipped.
$this
->drupalLogin($this->user);
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->drupalGet("node/{$quiz_node->nid}/take/1");
$this
->assertResponse(200);
$this
->drupalGet("node/{$quiz_node->nid}/take/2");
$this
->assertResponse(403);
$this
->drupalGet("node/{$quiz_node->nid}/take/3");
$this
->assertResponse(403);
// Leave a question blank.
$this
->drupalGet("node/{$quiz_node->nid}/take/1");
$this
->drupalPost(NULL, array(), t('Leave blank'));
// Now question 2 is accessible.
$this
->drupalGet("node/{$quiz_node->nid}/take/2");
$this
->assertResponse(200);
$this
->drupalGet("node/{$quiz_node->nid}/take/3");
$this
->assertResponse(403);
}
/**
* Test preventing backwards navigation of questions.
*/
public function testQuestionNavigationBackwards() {
$this
->drupalLogin($this->admin);
$quiz_node = $this
->drupalCreateQuiz(array(
'backwards_navigation' => 0,
'allow_skipping' => 0,
'allow_jumping' => 0,
));
// 3 questions.
$question_node1 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node1, $quiz_node);
$question_node2 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node2, $quiz_node);
$question_node3 = $this
->drupalCreateNode(array(
'type' => 'truefalse',
'correct_answer' => 1,
));
$this
->linkQuestionToQuiz($question_node3, $quiz_node);
// Testing basic navigation.
$this
->drupalLogin($this->user);
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->drupalGet("node/{$quiz_node->nid}/take/1");
$this
->assertResponse(200);
$this
->drupalGet("node/{$quiz_node->nid}/take/2");
$this
->assertResponse(403);
$this
->drupalGet("node/{$quiz_node->nid}/take/3");
$this
->assertResponse(403);
// Answer a question, ensure next question is available. Ensure previous
// question is not.
$this
->drupalGet("node/{$quiz_node->nid}/take/1");
$this
->drupalPost(NULL, array(
"question[{$question_node1->nid}][answer]" => 1,
), t('Next'));
$this
->drupalGet("node/{$quiz_node->nid}/take/2");
$this
->assertResponse(200);
$this
->drupalGet("node/{$quiz_node->nid}/take/1");
$this
->assertResponse(403);
}
}
Classes
Name | Description |
---|---|
QuizNavigationTestCase | Base test class for Quiz questions. |