MDL-63185 mod_quiz: make CiBoT happy again

Part of MDL-62610
This commit is contained in:
Simey Lameze
2018-09-28 11:07:21 +08:00
parent bd92cfc6f9
commit 9b1fc262d8
11 changed files with 40 additions and 44 deletions
+6 -4
View File
@@ -948,9 +948,11 @@ class behat_base extends Behat\MinkExtension\Context\RawMinkContext {
/**
* Set current $USER, reset access cache.
* @static
*
* In some cases, behat will execute the code as admin but in many cases we need to set an specific user as some
* API's might rely on the logged user to take some action.
*
* @param null|int|stdClass $user user record, null or 0 means non-logged-in, positive integer means userid
* @return void
*/
public static function set_user($user = null) {
global $DB;
@@ -961,13 +963,13 @@ class behat_base extends Behat\MinkExtension\Context\RawMinkContext {
// Assign valid data to admin user (some generator-related code needs a valid user).
$user = $DB->get_record('user', array('username' => 'admin'));
} else {
$user = $DB->get_record('user', array('id'=> $user));
$user = $DB->get_record('user', array('id' => $user));
}
unset($user->description);
unset($user->access);
unset($user->preference);
// Enusre session is empty, as it may contain caches and user specific info.
// Ensure session is empty, as it may contain caches and user specific info.
\core\session\manager::init_empty_session();
\core\session\manager::set_user($user);
-1
View File
@@ -1833,7 +1833,6 @@ class quiz_attempt {
} else {
$simulatedpostdata = $simulatedresponses;
}
} else {
$simulatedpostdata = null;
}
@@ -21,14 +21,14 @@ Feature: Basic use of the Manual grading report
| contextlevel | reference | name |
| Course | C1 | Test questions |
And the following "questions" exist:
| questioncategory | qtype | name | questiontext | answer 1 | grade |
| Test questions | shortanswer | Short answer 001 | Where is the capital city of France? | Paris | 100% |
| questioncategory | qtype | name | questiontext | answer 1 | grade |
| Test questions | shortanswer | Short answer 001 | Where is the capital city of France? | Paris | 100% |
And the following "activities" exist:
| activity | name | course | idnumber |
| quiz | Quiz 1 | C1 | quiz1 |
And quiz "Quiz 1" contains the following questions:
| question | page |
| Short answer 001 | 1 |
| question | page |
| Short answer 001 | 1 |
# Check report shows nothing when there are no attempts.
When I log in as "teacher1"
@@ -37,12 +37,12 @@ Feature: Basic use of the Grades report
| TF2 | 1 | 3.0 |
And user "student1" has attempted "Quiz 1" with responses:
| slot | response |
| 1 | True |
| 1 | True |
| 2 | False |
And user "student2" has attempted "Quiz 1" with responses:
| slot | response |
| 1 | True |
| 2 | True |
| 1 | True |
| 2 | True |
# Basic check of the Grades report
When I log in as "teacher1"
@@ -48,14 +48,14 @@ Feature: Basic use of the Statistics report
And "Show chart data" "link" should not exist
When user "student1" has attempted "Quiz 1" with responses:
| slot | response |
| 1 | True |
| 1 | True |
| 2 | False |
| 3 | False |
And user "student2" has attempted "Quiz 1" with responses:
| slot | response |
| 1 | True |
| 2 | True |
| 3 | True |
| 1 | True |
| 2 | True |
| 3 | True |
And user "student3" has attempted "Quiz 1" with responses:
| slot | response |
| 1 | False |
+8 -12
View File
@@ -571,7 +571,7 @@ class behat_mod_quiz extends behat_question_base {
*
* slot The slot
* actualquestion This column is optional, and is only needed if the quiz contains
* random questions. If so, this will let you control which acutal
* random questions. If so, this will let you control which actual
* question gets picked when this slot is 'randomised' at the
* start of the attempt. If you don't specify, then one will be picked
* at random (which might make the reponse meaningless).
@@ -582,15 +582,15 @@ class behat_mod_quiz extends behat_question_base {
* made when the quiz is started.
* response The response that was submitted. How this is interpreted depends on
* the question type. It gets passed to
* {@link core_question_generator::get_simulated_post_data_for_question_attempt()
* {@link core_question_generator::get_simulated_post_data_for_question_attempt()}
* and therefore to the un_summarise_response method of the question to decode.
*
* Then there should be a number of rows of data, one for each question you want to add.
* There is no need to supply answers to all questions. If so, other qusetions will be
* left unanswered.
*
* @param string $quizname the name of the quiz the user will attempt.
* @param string $username the username of the user that will attempt.
* @param string $quizname the name of the quiz the user will attempt.
* @param TableNode $attemptinfo information about the questions to add, as above.
* @Given /^user "([^"]*)" has attempted "([^"]*)" with responses:$/
*/
@@ -644,8 +644,8 @@ class behat_mod_quiz extends behat_question_base {
* There is no need to supply answers to all questions. If so, other qusetions will be
* left unanswered.
*
* @param string $quizname the name of the quiz the user will attempt.
* @param string $username the username of the user that will attempt.
* @param string $quizname the name of the quiz the user will attempt.
* @Given /^user "([^"]*)" has started an attempt at quiz "([^"]*)"$/
*/
public function user_has_started_an_attempt_at_quiz($username, $quizname) {
@@ -664,8 +664,8 @@ class behat_mod_quiz extends behat_question_base {
/**
* Submit answers to an existing quiz attempt.
*
* @param string $quizname the name of the quiz the user will attempt.
* @param string $username the username of the user that will attempt.
* @param string $quizname the name of the quiz the user will attempt.
* @param TableNode $attemptinfo information about the questions to add, as above.
* @throws \Behat\Mink\Exception\ExpectationException
* @Given /^user "([^"]*)" has submitted answers in their attempt at quiz "([^"]*)":$/
@@ -678,7 +678,7 @@ class behat_mod_quiz extends behat_question_base {
$quizid = $DB->get_field('quiz', 'id', ['name' => $quizname], MUST_EXIST);
$user = $DB->get_record('user', ['username' => $username], '*', MUST_EXIST);
$forcedrandomquestions = [];
$forcedvariants = [];
$responses = [];
foreach ($attemptinfo->getHash() as $slotinfo) {
@@ -692,11 +692,6 @@ class behat_mod_quiz extends behat_question_base {
}
$responses[$slotinfo['slot']] = $slotinfo['response'];
if (!empty($slotinfo['actualquestion'])) {
$forcedrandomquestions[$slotinfo['slot']] = $DB->get_field('question', 'id',
['name' => $slotinfo['actualquestion']], MUST_EXIST);
}
if (!empty($slotinfo['variant'])) {
$forcedvariants[$slotinfo['slot']] = (int) $slotinfo['variant'];
}
@@ -715,8 +710,8 @@ class behat_mod_quiz extends behat_question_base {
/**
* Finish an existing quiz attempt.
*
* @param string $quizname the name of the quiz the user will attempt.
* @param string $username the username of the user that will attempt.
* @param string $quizname the name of the quiz the user will attempt.
* @Given /^user "([^"]*)" has finished an attempt at quiz "([^"]*)"$/
*/
public function user_has_finished_an_attempt_at_quiz($username, $quizname) {
@@ -732,6 +727,7 @@ class behat_mod_quiz extends behat_question_base {
$attemptobj->process_finish(time(), true);
break;
}
$this->set_user();
}
}
@@ -32,7 +32,7 @@ Feature: Set a quiz to be marked complete when the student uses all attempts all
| First question | 1 |
And user "student1" has attempted "Test quiz name" with responses:
| slot | response |
| 1 | False |
| 1 | False |
Scenario: student1 uses up both attempts without passing
When I log in as "student1"
+2 -3
View File
@@ -134,10 +134,9 @@ class mod_quiz_generator extends testing_module_generator {
* @param int $attemptid the id of the attempt which is being
* @param array $responses array responses to submit. See description on
* {@link core_question_generator::get_simulated_post_data_for_questions_in_usage()}.
* @param bool $finishattempt of true, the attempt will be submitted.
* @param bool $finishattempt if true, the attempt will be submitted.
*/
public function submit_responses($attemptid, array $responses, $finishattempt) {
/** @var $questiongenerator core_question_generator */
public function submit_responses($attemptid, array $responses, $checkbutton, $finishattempt) {
$questiongenerator = $this->datagenerator->get_plugin_generator('core_question');
$attemptobj = quiz_attempt::create($attemptid);
+1 -1
View File
@@ -190,7 +190,7 @@ class core_question_generator extends component_generator_base {
* are passed to the un_summarise_response method of the question to decode.
*
* @param question_attempt $qa the question attempt for which we are generating POST data.
* @param $responsesummary a textual summary of the resonse, as described above.
* @param string $responsesummary a textual summary of the resonse, as described above.
* @return array the sumulated post data that can be passed to $quba->process_all_actions.
*/
public function get_simulated_post_data_for_question_attempt(
+1 -1
View File
@@ -91,7 +91,7 @@ class qtype_essay_question extends question_with_responses {
public function un_summarise_response(string $summary) {
if (!empty($summary)) {
return ['answer' => $summary];
return ['answer' => text_to_html($summary)];
} else {
return [];
}
+10 -10
View File
@@ -85,18 +85,18 @@ class qtype_numerical_question extends question_graded_automatically {
return $resp;
}
public function un_summarise_response(string $response) {
if (!empty($response)) {
$resp = $response;
public function un_summarise_response(string $summary) {
if ($this->has_separate_unit_field()) {
throw new coding_exception('Sorry, but at the moment un_summarise_response cannot handle the
has_separate_unit_field case for numerical questions.
If you need this, you will have to implement it yourself.');
}
if (!empty($summary)) {
return ['answer' => $summary];
} else {
$resp = null;
return [];
}
if ($this->has_separate_unit_field() && !empty($response)) {
$resp = $this->ap->add_unit($resp, $response);
}
return $resp;
}
public function is_gradable_response(array $response) {