MDL-62814 Question: Improve column base display_header
authorHuong Nguyen <huongnv13@gmail.com>
Wed, 27 Jun 2018 07:32:48 +0000 (14:32 +0700)
committerHuong Nguyen <huongnv13@gmail.com>
Fri, 6 Jul 2018 03:56:34 +0000 (10:56 +0700)
Column base does not support custom tip if sortable is an array

question/classes/bank/column_base.php
question/tests/fixtures/testable_core_question_column.php [new file with mode: 0644]
question/tests/question_bank_column_test.php [new file with mode: 0644]

index b300ec7..9994b9f 100644 (file)
@@ -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 '<div class="sorters">' . implode(' / ', $links) . '</div>';
         } 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 (file)
index 0000000..d467124
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Helper class to to test column_base class.
+ *
+ * @package core_question
+ * @copyright 2018 Huong Nguyen <huongnv13@gmail.com>
+ * @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 <huongnv13@gmail.com>
+ * @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 (file)
index 0000000..a263a6f
--- /dev/null
@@ -0,0 +1,109 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * This file contains tests for the question bank column class.
+ *
+ * @package core_question
+ * @copyright 2018 Huong Nguyen <huongnv13@gmail.com>
+ * @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 <huongnv13@gmail.com>
+ * @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</a>', $output);
+        $this->assertContains(' title="Sort by Banana ascending">Banana</a>', $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</a>', $output);
+        $this->assertContains(' title="Sort by Banana Tooltips ascending">Banana</a>', $output);
+    }
+}