AutorÃa | Ultima modificación | Ver Log |
<?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/>.
declare(strict_types=1);
namespace customfield_number;
use advanced_testcase;
use core_customfield_generator;
use core_customfield\field_config_form;
/**
* Tests for the field controller
*
* @package customfield_number
* @covers \customfield_number\field_controller
* @copyright 2024 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
final class field_controller_test extends advanced_testcase {
/**
* Test that using base field controller returns our number type
*/
public function test_create(): void {
$this->resetAfterTest();
/** @var core_customfield_generator $generator */
$generator = $this->getDataGenerator()->get_plugin_generator('core_customfield');
$category = $generator->create_category();
$field = $generator->create_field(['categoryid' => $category->get('id'), 'type' => 'number']);
$this->assertInstanceOf(field_controller::class, \core_customfield\field_controller::create((int) $field->get('id')));
$this->assertInstanceOf(field_controller::class, \core_customfield\field_controller::create(0, $field->to_record()));
}
/**
* Data provider for {@see test_form_definition}
*
* @return array[]
*/
public static function form_definition_provider(): array {
return [
'Defaults' => ['', '', '', '{value}', true],
'Minimum greater than maximum' => ['', 12, 10, '{value}', false],
'Default value less than minimum' => [1, 10, 12, '{value}', false],
'Default value greater than maximum' => [13, 10, 12, '{value}', false],
'Valid' => [11, 10, 12, '{value}', true],
'Display valid single placeholder' => ['', '', '', '{value}', true],
'Display invalid single placeholder' => ['', '', '', '111', false],
];
}
/**
* Test submitting field definition form
*
* @param float|string $defaultvalue
* @param float|string $minimumvalue
* @param float|string $maximumvalue
* @param string $display
* @param bool $expected
*
* @dataProvider form_definition_provider
*/
public function test_form_definition(
float|string $defaultvalue,
float|string $minimumvalue,
float|string $maximumvalue,
string $display,
bool $expected,
): void {
$this->resetAfterTest();
$this->setAdminUser();
/** @var core_customfield_generator $generator */
$generator = $this->getDataGenerator()->get_plugin_generator('core_customfield');
$category = $generator->create_category();
$field = $generator->create_field(['categoryid' => $category->get('id'), 'type' => 'number']);
$submitdata = (array) $field->to_record();
$submitdata['configdata'] = array_merge($field->get('configdata'), [
'defaultvalue' => $defaultvalue,
'minimumvalue' => $minimumvalue,
'maximumvalue' => $maximumvalue,
'display' => $display,
]);
$formdata = field_config_form::mock_ajax_submit($submitdata);
$form = new field_config_form(null, null, 'post', '', null, true, $formdata, true);
$form->set_data_for_dynamic_submission();
$this->assertEquals($expected, $form->is_validated());
if ($expected) {
$form->process_dynamic_submission();
}
}
}