From b116f8b9adab0dacc6008cfe2aff1afa6b294efd Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Thu, 5 Jul 2018 16:59:45 +0100 Subject: [PATCH] MDL-62811 question bank: rendering shouldn't load individual questions --- question/classes/bank/action_column_base.php | 6 +- question/classes/bank/view.php | 4 +- question/tests/bank_view_test.php | 73 ++++++++++++++++++++ 3 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 question/tests/bank_view_test.php diff --git a/question/classes/bank/action_column_base.php b/question/classes/bank/action_column_base.php index a785217fa3b..865a88b2fdf 100644 --- a/question/classes/bank/action_column_base.php +++ b/question/classes/bank/action_column_base.php @@ -38,8 +38,12 @@ abstract class action_column_base extends column_base { echo '' . $OUTPUT->pix_icon($icon, $title) . ''; } + public function get_extra_joins() { + return array('qc' => 'JOIN {question_categories} qc ON qc.id = q.category'); + } + public function get_required_fields() { // Createdby is required for permission checks. - return array('q.id', 'q.createdby'); + return array('q.id', 'q.createdby', 'qc.contextid'); } } diff --git a/question/classes/bank/view.php b/question/classes/bank/view.php index 518e36c0687..ec5b81f5c99 100644 --- a/question/classes/bank/view.php +++ b/question/classes/bank/view.php @@ -69,8 +69,8 @@ class view { /** * Constructor - * @param question_edit_contexts $contexts - * @param moodle_url $pageurl + * @param \question_edit_contexts $contexts + * @param \moodle_url $pageurl * @param object $course course settings * @param object $cm (optional) activity settings. */ diff --git a/question/tests/bank_view_test.php b/question/tests/bank_view_test.php new file mode 100644 index 00000000000..c9987ffb9cd --- /dev/null +++ b/question/tests/bank_view_test.php @@ -0,0 +1,73 @@ +. + +/** + * Unit tests for the question bank view class. + * + * @package core_question + * @category test + * @copyright 2018 the Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot . '/question/editlib.php'); + + +/** + * Unit tests for the question bank view class. + * + * @copyright 2018 the Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class core_question_bank_view_testcase extends advanced_testcase { + + public function test_viewing_question_bank_should_not_load_individual_questions() { + $this->resetAfterTest(); + $this->setAdminUser(); + $generator = $this->getDataGenerator(); + /** @var core_question_generator $questiongenerator */ + $questiongenerator = $generator->get_plugin_generator('core_question'); + + // Cerate a course. + $course = $generator->create_course(); + $context = context_course::instance($course->id); + + // Create a question in the default category. + $contexts = new question_edit_contexts($context); + $cat = question_make_default_categories($contexts->all()); + $questiondata = $questiongenerator->create_question('numerical', null, + ['name' => 'Example question', 'category' => $cat->id]); + + // Ensure the qusetion is not in the cache. + $cache = cache::make('core', 'questiondata'); + $cache->delete($questiondata->id); + + // Generate the view. + $view = new core_question\bank\view($contexts, new moodle_url('/'), $course); + ob_start(); + $view->display('editq', 0, 20, $cat->id . ',' . $context->id, false, false, false); + $html = ob_get_clean(); + + // Verify the output includes the expected question. + $this->assertContains('Example question', $html); + + // Verify the qusetion has not been loaded into the cache. + $this->assertFalse($cache->has($questiondata->id)); + } +}