From 9d7ccae2d520937ebbcb8faa75a80d84c5c207de Mon Sep 17 00:00:00 2001 From: Huong Nguyen Date: Wed, 27 Jun 2018 14:32:48 +0700 Subject: [PATCH] MDL-62814 Question: Improve column base display_header Column base does not support custom tip if sortable is an array --- question/classes/bank/column_base.php | 2 +- .../testable_core_question_column.php | 66 +++++++++++ question/tests/question_bank_column_test.php | 109 ++++++++++++++++++ 3 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 question/tests/fixtures/testable_core_question_column.php create mode 100644 question/tests/question_bank_column_test.php diff --git a/question/classes/bank/column_base.php b/question/classes/bank/column_base.php index b300ec7df67..9994b9f1813 100644 --- a/question/classes/bank/column_base.php +++ b/question/classes/bank/column_base.php @@ -84,7 +84,7 @@ abstract class column_base { $links = array(); foreach ($sortable as $subsort => $details) { $links[] = $this->make_sort_link($name . '-' . $subsort, - $details['title'], '', !empty($details['reverse'])); + $details['title'], isset($details['tip']) ? $details['tip'] : '', !empty($details['reverse'])); } echo '
' . implode(' / ', $links) . '
'; } else if ($sortable) { diff --git a/question/tests/fixtures/testable_core_question_column.php b/question/tests/fixtures/testable_core_question_column.php new file mode 100644 index 00000000000..d467124479d --- /dev/null +++ b/question/tests/fixtures/testable_core_question_column.php @@ -0,0 +1,66 @@ +. + +/** + * Helper class to to test column_base class. + * + * @package core_question + * @copyright 2018 Huong Nguyen + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Helper class to to test column_base class. + * + * @package core_question + * @copyright 2018 Huong Nguyen + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class testable_core_question_column extends \core_question\bank\column_base { + + /** @var array sortable columns. */ + private $sortable = []; + + /** + * Output the column header cell. + */ + public function is_sortable() { + return $this->sortable; + } + + /** + * Set the sortable columns for testing. + * + * @param array $sortable + */ + public function set_sortable(array $sortable) { + $this->sortable = $sortable; + } + + protected function display_content($question, $rowclasses) { + echo 'Test Column'; + } + + public function get_name() { + return 'test_column'; + } + + protected function get_title() { + return 'Test Column'; + } +} diff --git a/question/tests/question_bank_column_test.php b/question/tests/question_bank_column_test.php new file mode 100644 index 00000000000..a263a6fd1fe --- /dev/null +++ b/question/tests/question_bank_column_test.php @@ -0,0 +1,109 @@ +. + +/** + * This file contains tests for the question bank column class. + * + * @package core_question + * @copyright 2018 Huong Nguyen + * @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'); +require_once($CFG->dirroot . '/question/tests/fixtures/testable_core_question_column.php'); + +/** + * Unit tests for the question bank column class. + * + * @package core_question + * @copyright 2018 Huong Nguyen + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class question_bank_column_testcase extends advanced_testcase { + + /** + * Test function display_header multiple sorts with no custom tooltips. + * + */ + public function test_column_header_multi_sort_no_tooltips() { + $this->resetAfterTest(); + $course = $this->getDataGenerator()->create_course(); + $questionbank = new core_question\bank\view( + new question_edit_contexts(context_course::instance($course->id)), + new moodle_url('/'), + $course + ); + $columnbase = new testable_core_question_column($questionbank); + + $sortable = [ + 'apple' => [ + 'field' => 'apple', + 'title' => 'Apple' + ], + 'banana' => [ + 'field' => 'banana', + 'title' => 'Banana' + ] + ]; + $columnbase->set_sortable($sortable); + + ob_start(); + $columnbase->display_header(); + $output = ob_get_clean(); + + $this->assertContains(' title="Sort by Apple ascending">Apple', $output); + $this->assertContains(' title="Sort by Banana ascending">Banana', $output); + } + + /** + * Test function display_header multiple sorts with custom tooltips. + * + */ + public function test_column_header_multi_sort_with_tooltips() { + $this->resetAfterTest(); + $course = $this->getDataGenerator()->create_course(); + $questionbank = new core_question\bank\view( + new question_edit_contexts(context_course::instance($course->id)), + new moodle_url('/'), + $course + ); + $columnbase = new testable_core_question_column($questionbank); + + $sortable = [ + 'apple' => [ + 'field' => 'apple', + 'title' => 'Apple', + 'tip' => 'Apple Tooltips' + ], + 'banana' => [ + 'field' => 'banana', + 'title' => 'Banana', + 'tip' => 'Banana Tooltips' + ] + ]; + $columnbase->set_sortable($sortable); + + ob_start(); + $columnbase->display_header(); + $output = ob_get_clean(); + + $this->assertContains(' title="Sort by Apple Tooltips ascending">Apple', $output); + $this->assertContains(' title="Sort by Banana Tooltips ascending">Banana', $output); + } +}