From 5d307557cbf7cc5e59b017b34d4872427822a324 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Tue, 10 Apr 2018 14:00:39 +0100 Subject: [PATCH] MDL-61928 formslib: shortforms should work with non-editable forms --- lib/formslib.php | 2 +- lib/tests/behat/behat_forms.php | 13 ++++-- lib/tests/behat/readonlyform.feature | 34 ++++++++++++++ lib/tests/fixtures/readonlyform.php | 70 ++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 lib/tests/behat/readonlyform.feature create mode 100644 lib/tests/fixtures/readonlyform.php diff --git a/lib/formslib.php b/lib/formslib.php index e2c8b8ed21e..95f6e84c73e 100644 --- a/lib/formslib.php +++ b/lib/formslib.php @@ -2773,7 +2773,7 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{ $formid = $form->getAttribute('id'); parent::startForm($form); if ($form->isFrozen()){ - $this->_formTemplate = "\n
\n{content}\n
"; + $this->_formTemplate = "\n
\n{collapsebtns}\n{content}\n
"; } else { $this->_formTemplate = "\n\n\t
{hidden}
\n{collapsebtns}\n{content}\n"; $this->_hiddenHtml .= $form->_pageparams; diff --git a/lib/tests/behat/behat_forms.php b/lib/tests/behat/behat_forms.php index c7d8116532b..7b2024a8c48 100644 --- a/lib/tests/behat/behat_forms.php +++ b/lib/tests/behat/behat_forms.php @@ -117,11 +117,16 @@ class behat_forms extends behat_base { // so, we will use the reduced timeout as it is a common task and we should save time. try { - // Expand fieldsets link. - $xpath = "//div[@class='collapsible-actions']" . - "/descendant::a[contains(concat(' ', @class, ' '), ' collapseexpand ')]" . + // Expand all fieldsets link - which will only be there if there is more than one collapsible section. + $expandallxpath = "//div[@class='collapsible-actions']" . + "//a[contains(concat(' ', @class, ' '), ' collapseexpand ')]" . "[not(contains(concat(' ', @class, ' '), ' collapse-all '))]"; - $collapseexpandlink = $this->find('xpath', $xpath, false, false, self::REDUCED_TIMEOUT); + // Else, look for the first expand fieldset link. + $expandonlysection = "//legend[@class='ftoggler']" . + "//a[contains(concat(' ', @class, ' '), ' fheader ') and @aria-expanded = 'false']"; + + $collapseexpandlink = $this->find('xpath', $expandallxpath . '|' . $expandonlysection, + false, false, self::REDUCED_TIMEOUT); $collapseexpandlink->click(); } catch (ElementNotFoundException $e) { diff --git a/lib/tests/behat/readonlyform.feature b/lib/tests/behat/readonlyform.feature new file mode 100644 index 00000000000..269dc88c409 --- /dev/null +++ b/lib/tests/behat/readonlyform.feature @@ -0,0 +1,34 @@ +@core +Feature: Read-only forms should work + In order to use certain forms on large Moodle installations + As a user + Relevant featuers of non-editable forms should still work + + @javascript + Scenario: Shortforms expand collapsing should work for read-only forms - one-section form + Given the following "courses" exist: + | fullname | shortname | format | + | Course 1 | C1 | topics | + And the following "activities" exist: + | activity | name | intro | course | idnumber | + | label | L1 | Fixture link | C1 | label1 | + And I log in as "admin" + And I am on "Course 1" course homepage + And I follow "Fixture link" + When I expand all fieldsets + Then the field "Name" matches value "Important information" + + @javascript + Scenario: Shortforms expand collapsing should work for read-only forms - two-section form + Given the following "courses" exist: + | fullname | shortname | format | + | Course 1 | C1 | topics | + And the following "activities" exist: + | activity | name | intro | course | idnumber | + | label | L1 | Fixture link | C1 | label1 | + And I log in as "admin" + And I am on "Course 1" course homepage + And I follow "Fixture link" + When I expand all fieldsets + Then the field "Name" matches value "Important information" + Then the field "Other" matches value "Other information" diff --git a/lib/tests/fixtures/readonlyform.php b/lib/tests/fixtures/readonlyform.php new file mode 100644 index 00000000000..472623bb471 --- /dev/null +++ b/lib/tests/fixtures/readonlyform.php @@ -0,0 +1,70 @@ +. + +/** + * Fixture for testing the functionality of read-only forms. + * + * @package core + * @copyright 2018 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(__DIR__ . '/../../../config.php'); +require_once($CFG->libdir . '/formslib.php'); + +$sections = optional_param('sections', 2, PARAM_INT); +require_login(); + + +/** + * The form used for testing. + */ +class test_read_only_form extends moodleform { + protected function definition() { + $mform = $this->_form; + + $sections = $this->_customdata; + + $mform->addElement('header', 'sectionheader', 'First section'); + + $mform->addElement('text', 'name', 'Name'); + $mform->setDefault('name', 'Important information'); + $mform->setType('name', PARAM_RAW); + + $mform->setExpanded('sectionheader', false); + + if ($sections > 1) { + $mform->addElement('header', 'secondsection', 'Other section header'); + + $mform->addElement('text', 'other', 'Other'); + $mform->setDefault('other', 'Other information'); + $mform->setType('other', PARAM_RAW); + + $mform->setExpanded('secondsection', false); + } + + $this->add_action_buttons(); + } +} + +$PAGE->set_context(context_system::instance()); +$PAGE->set_url('/lib/tests/fixtures/readonlyform.php'); + +$form = new test_read_only_form(null, $sections, 'post', '', null, false); // The false here is $editable. + +echo $OUTPUT->header(); +echo $form->render(); +echo $OUTPUT->footer();