mirror of
https://github.com/moodle/moodle.git
synced 2025-04-13 12:32:08 +02:00
MDL-56233 forms library: Fixed form identifier when mocking a form.
If the plugin is using namespaces instead of frankenstyle class name, get_called_class() will return 'type\name' instead of 'type_name'. Added code to replace backslashes to underscores and fix that issue.
This commit is contained in:
parent
b182239f21
commit
518eb19337
@ -1362,6 +1362,7 @@ abstract class moodleform {
|
||||
$_FILES = $simulatedsubmittedfiles;
|
||||
if ($formidentifier === null) {
|
||||
$formidentifier = get_called_class();
|
||||
$formidentifier = str_replace('\\', '_', $formidentifier); // See MDL-56233 for more information.
|
||||
}
|
||||
$simulatedsubmitteddata['_qf__'.$formidentifier] = 1;
|
||||
$simulatedsubmitteddata['sesskey'] = sesskey();
|
||||
|
49
lib/tests/fixtures/namespaced_form.php
vendored
Normal file
49
lib/tests/fixtures/namespaced_form.php
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* A form inside a namespace to be used by unit tests.
|
||||
*
|
||||
* See issue MDL-56233
|
||||
*
|
||||
* @package core
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace local_unittests\namespaced_form;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* exampleform class.
|
||||
*
|
||||
* @package core
|
||||
* @author Daniel Thee Roperto <daniel.roperto@catalyst-au.net>
|
||||
* @copyright 2016 Catalyst IT
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class exampleform extends \moodleform {
|
||||
/**
|
||||
* Create a simple form definition.
|
||||
*/
|
||||
public function definition() {
|
||||
$mform = $this->_form;
|
||||
$mform->addElement('text', 'title', 'title_value');
|
||||
$mform->setType('title', PARAM_TEXT);
|
||||
}
|
||||
}
|
@ -629,6 +629,23 @@ class core_formslib_testcase extends advanced_testcase {
|
||||
$this->assertFalse($form->is_validated());
|
||||
$this->assertNull($form->get_data());
|
||||
}
|
||||
|
||||
/**
|
||||
* MDL-56233 - Tests mocking a form inside a namespace.
|
||||
*/
|
||||
public function test_mock_submit() {
|
||||
require_once(__DIR__.'/fixtures/namespaced_form.php');
|
||||
\local_unittests\namespaced_form\exampleform::mock_submit(['title' => 'Mocked Value']);
|
||||
$form = new \local_unittests\namespaced_form\exampleform();
|
||||
|
||||
// Here is the problem, this is the expected hidden field name.
|
||||
$expected = '_qf__local_unittests_namespaced_form_exampleform';
|
||||
self::assertArrayHasKey($expected, $_POST);
|
||||
|
||||
// This should work now, before it would fail.
|
||||
self::assertTrue($form->is_submitted());
|
||||
self::assertSame('Mocked Value', $form->get_data()->title);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user