QuizCreationTestCase.test in Quiz 7.6
Same filename and directory in other branches
Unit tests for the quiz question Module.
File
tests/QuizCreationTestCase.testView source
<?php
/**
* @file
* Unit tests for the quiz question Module.
*/
/**
* Test aspects of quiz creation including global and user defaults.
*/
class QuizCreationTestCase extends QuizTestCase {
function setUp($modules = array(), $admin_permissions = array(), $user_permissions = array()) {
$modules[] = 'truefalse';
$admin_permissions[] = "edit any truefalse content";
parent::setUp($modules, $admin_permissions, $user_permissions);
}
public static function getInfo() {
return array(
'name' => t('Quiz creation'),
'description' => t('Unit test for Quiz creation.'),
'group' => t('Quiz'),
);
}
/**
* Test basic quiz creation.
*/
public function testQuizCreation() {
$this
->drupalLogin($this->admin);
$this
->drupalGet("node/add/quiz");
$this
->drupalPost(NULL, array(
'title' => 'Test quiz creation',
), t('Save'));
$this
->assertText('has been created');
}
/**
* Test system, global, and user defaults.
*/
public function testQuizDefaults() {
// We need another admin user here.
$admin_permissions = array();
$admin_permissions[] = 'administer quiz configuration';
$admin_permissions[] = 'create quiz content';
$admin_permissions[] = 'edit any quiz content';
$admin_permissions[] = 'edit question titles';
$admin_permissions[] = 'access quiz';
$this->admin2 = $this
->drupalCreateUser(array_unique($admin_permissions));
$this
->drupalLogin($this->admin);
$this
->drupalGet("node/add/quiz");
// These are the basic system defaults.
$this
->assertFieldChecked('edit-allow-resume');
$this
->assertFieldChecked('edit-allow-skipping');
$this
->assertNoFieldChecked('edit-allow-jumping');
$this
->assertFieldChecked('edit-allow-change');
$this
->assertFieldChecked('edit-backwards-navigation');
$this
->assertNoFieldChecked('edit-repeat-until-correct');
$this
->assertNoFieldChecked('edit-mark-doubtful');
$this
->assertFieldChecked('edit-show-passed');
$this
->drupalGet('admin/quiz/settings/quiz-form');
// Verify the same ones show up.
$this
->assertFieldChecked('edit-allow-resume');
$this
->assertFieldChecked('edit-allow-skipping');
$this
->assertNoFieldChecked('edit-allow-jumping');
$this
->assertFieldChecked('edit-allow-change');
$this
->assertFieldChecked('edit-backwards-navigation');
$this
->assertNoFieldChecked('edit-repeat-until-correct');
$this
->assertNoFieldChecked('edit-mark-doubtful');
$this
->assertFieldChecked('edit-show-passed');
// Change a default.
$this
->drupalPost(NULL, array(
'allow_resume' => FALSE,
), t('Save'));
$this
->drupalGet('admin/quiz/settings/quiz-form');
$this
->assertNoFieldChecked('edit-allow-resume');
// Check that the default carried over. Check that other options remained
// set.
$this
->drupalGet("node/add/quiz");
$this
->assertNoFieldChecked('edit-allow-resume');
$this
->assertFieldChecked('edit-allow-skipping');
// Check defaults for another user.
$this
->drupalLogin($this->admin2);
$this
->drupalGet("node/add/quiz");
$this
->assertNoFieldChecked('edit-allow-resume');
$this
->assertFieldChecked('edit-allow-skipping');
// Set allow skipping to off as a user default.
$this
->drupalGet("node/add/quiz");
$this
->drupalPost(NULL, array(
'title' => 'Test quiz',
'allow_skipping' => FALSE,
'remember_settings' => TRUE,
), t('Save'));
$this
->drupalGet("node/add/quiz");
$this
->assertNoFieldChecked('edit-allow-resume');
$this
->assertNoFieldChecked('edit-allow-skipping');
// Ensure it didn't affect another user.
$this
->drupalLogin($this->admin);
$this
->drupalGet("node/add/quiz");
$this
->assertNoFieldChecked('edit-allow-resume');
$this
->assertFieldChecked('edit-allow-skipping');
}
/**
* Test quiz revisioning.
*/
function testQuizRevisioning() {
$this
->drupalLogin($this->admin);
$question_node = $this
->drupalCreateNode(array(
'title' => 'Revision 1',
'body' => array(
LANGUAGE_NONE => array(
array(
'value' => 'Revision 1',
),
),
),
'type' => 'truefalse',
'correct_answer' => 1,
));
$quiz_node = $this
->linkQuestionToQuiz($question_node);
// Set feedback.
$entities = entity_load('quiz_question', FALSE, array(
'nid' => $question_node->nid,
'vid' => $question_node->vid,
));
$quiz_question = reset($entities);
$quiz_question->feedback = 'Question feedback for Revision 1';
$quiz_question->feedback_format = filter_default_format();
entity_save('quiz_question', $quiz_question);
// Check for first revision.
$this
->drupalLogin($this->user);
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->assertText("Revision 1");
// Update question. There are already attempts now so we expect a new
// revision.
$this
->drupalLogin($this->admin);
$this
->drupalGet("node/{$question_node->nid}/edit");
$this
->drupalPost(NULL, array(
'title' => 'Revision 2',
'body[und][0][value]' => 'Revision 2',
'correct_answer' => 0,
'feedback[value]' => 'Question feedback for Revision 2',
), t('Save'));
// Finish on same revision.
$this
->drupalLogin($this->user);
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->assertText("Revision 1");
$this
->drupalPost(NULL, array(
"question[{$question_node->nid}][answer]" => 1,
), t('Finish'));
$this
->assertText('You got 1 of 1 possible points.');
$this
->assertText('Question feedback for Revision 1');
// Take quiz again. Should be on SAME revision. We have not yet updated the
// Quiz.
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->assertText("Revision 1");
// Update the quiz to use the latest revision.
$this
->drupalLogin($this->admin);
$this
->drupalGet("node/{$quiz_node->nid}/quiz/questions");
$this
->drupalPost(NULL, array(
"revision[{$question_node->nid}-{$question_node->vid}]" => TRUE,
), t('Submit'));
// Take quiz again. Should be on SAME revision. We have not yet finished
// this attempt.
$this
->drupalLogin($this->user);
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->assertText("Revision 1");
// Finish the attempt.
$this
->drupalPost(NULL, array(
"question[{$question_node->nid}][answer]" => 1,
), t('Finish'));
$this
->assertText('You got 1 of 1 possible points.');
$this
->assertText('Question feedback for Revision 1');
// Take quiz again we should be on the new result, finally.
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->assertText("Revision 2");
// Finish the attempt.
$this
->drupalPost(NULL, array(
"question[{$question_node->nid}][answer]" => 1,
), t('Finish'));
$this
->assertText('You got 0 of 1 possible points.');
$this
->assertText('Question feedback for Revision 2');
}
/**
* Test cloning quizzes with questions.
*/
public function testCloneQuiz() {
$this
->drupalLogin($this->admin);
$question_node = $this
->drupalCreateNode(array(
'title' => 'TF 1',
'body' => array(
LANGUAGE_NONE => array(
array(
'value' => 'TF 1',
),
),
),
'type' => 'truefalse',
'correct_answer' => 1,
));
$quiz_node = $this
->linkQuestionToQuiz($question_node);
$old = $quiz_node->nid;
// Simulate the clone module.
$quiz_node->clone_from_original_nid = $old;
unset($quiz_node->vid);
unset($quiz_node->nid);
node_save($quiz_node);
$this
->drupalLogin($this->user);
$this
->drupalGet("node/{$old}/take");
$this
->assertText('TF 1');
$this
->drupalGet("node/{$quiz_node->nid}/take");
$this
->assertText('TF 1');
}
}
Classes
Name![]() |
Description |
---|---|
QuizCreationTestCase | Test aspects of quiz creation including global and user defaults. |