From 39cf5561113f41b6051a97082b10e8deb3afd025 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Thu, 13 Apr 2023 21:13:41 +0100 Subject: [PATCH] MDL-77913 qbank_previewquestion: deterministic ordering of versions. Ensure the ordering of loaded question versions is consistent, avoids random Oracle failures. --- question/bank/previewquestion/classes/helper.php | 3 ++- .../tests/qbank_preview_helper_test.php | 15 +++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/question/bank/previewquestion/classes/helper.php b/question/bank/previewquestion/classes/helper.php index 84aa19efd85..9e1a1ff9cec 100644 --- a/question/bank/previewquestion/classes/helper.php +++ b/question/bank/previewquestion/classes/helper.php @@ -311,7 +311,8 @@ class helper { $questionids = []; $sql = 'SELECT version, questionid FROM {question_versions} - WHERE questionbankentryid = ?'; + WHERE questionbankentryid = ? + ORDER BY version'; $versions = $DB->get_records_sql($sql, [$questionbankentryid]); foreach ($versions as $key => $version) { diff --git a/question/bank/previewquestion/tests/qbank_preview_helper_test.php b/question/bank/previewquestion/tests/qbank_preview_helper_test.php index 3a94150cad2..dbb4d509d13 100644 --- a/question/bank/previewquestion/tests/qbank_preview_helper_test.php +++ b/question/bank/previewquestion/tests/qbank_preview_helper_test.php @@ -221,21 +221,28 @@ class qbank_preview_helper_test extends \advanced_testcase { * @covers ::load_versions */ public function test_load_versions() { - global $DB; $this->resetAfterTest(); + $generator = $this->getDataGenerator()->get_plugin_generator('core_question'); $qcat1 = $generator->create_question_category(['name' => 'My category', 'sortorder' => 1, 'idnumber' => 'myqcat']); $questiongenerated = $generator->create_question('description', null, ['name' => 'q1', 'category' => $qcat1->id]); + $qtypeobj = question_bank::get_qtype($questiongenerated->qtype); $question = question_bank::load_question($questiongenerated->id); $versionids = helper::load_versions($question->questionbankentryid); - $this->assertCount(1, $versionids); + $this->assertEquals([ + $question->id => 1, + ], $versionids); + $fromform = new stdClass(); $fromform->name = 'Name edited'; $fromform->category = $qcat1->id; - $qtypeobj->save_question($questiongenerated, $fromform); + $questiontwo = $qtypeobj->save_question($questiongenerated, $fromform); $versionids = helper::load_versions($question->questionbankentryid); - $this->assertCount(2, $versionids); + $this->assertSame([ + $question->id => 1, + $questiontwo->id => 2, + ], $versionids); } /**