From 623e72a092d2252ba64b81b092ad4e7c40a6fb48 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 8 Nov 2021 12:05:07 +0000 Subject: [PATCH] MDL-72696 behat: support inplace editable fields of type select. If an inplace editable field is using the "select" type, we should treat it as a select field when setting it's value during scenarios. --- lib/behat/behat_field_manager.php | 7 ++- .../behat_form_inplaceeditable_select.php | 51 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 lib/behat/form_field/behat_form_inplaceeditable_select.php diff --git a/lib/behat/behat_field_manager.php b/lib/behat/behat_field_manager.php index 0f386b71514..1b78e535d27 100644 --- a/lib/behat/behat_field_manager.php +++ b/lib/behat/behat_field_manager.php @@ -181,7 +181,12 @@ class behat_field_manager { if ($tagname == 'span') { if ($node->hasAttribute('data-inplaceeditable') && $node->getAttribute('data-inplaceeditable')) { - return 'inplaceeditable'; + // Determine appropriate editable type of this field (text or select). + if ($node->getAttribute('data-type') == 'select') { + return 'inplaceeditable_select'; + } else { + return 'inplaceeditable'; + } } } diff --git a/lib/behat/form_field/behat_form_inplaceeditable_select.php b/lib/behat/form_field/behat_form_inplaceeditable_select.php new file mode 100644 index 00000000000..90b85a3dbe3 --- /dev/null +++ b/lib/behat/form_field/behat_form_inplaceeditable_select.php @@ -0,0 +1,51 @@ +. + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. + +require_once(__DIR__ . '/behat_form_select.php'); + +/** + * Custom interaction with inplace editable elements of type select + * + * @package core_form + * @copyright 2021 Paul Holden + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_form_inplaceeditable_select extends behat_form_select { + + /** + * Sets the value to a field + * + * @param string $value + */ + public function set_value($value): void { + // Require JS to run this step. + self::require_javascript(); + + // Enable editing. + self::execute('behat_general::i_click_on_in_the', [ + '[data-inplaceeditablelink]', + 'css_element', + $this->field, + 'NodeElement', + ]); + + // After editing is enabled, set the select field value. + $select = $this->field->find('css', 'select'); + $select->selectOption($value); + } +}