Mercurial > hg > cmmr2012-drupal-site
diff core/tests/Drupal/KernelTests/ConfigFormTestBase.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | a9cd425dd02b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/tests/Drupal/KernelTests/ConfigFormTestBase.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,66 @@ +<?php + +namespace Drupal\KernelTests; + +use Drupal\Core\Form\FormState; + +/** + * Full generic test suite for any form that data with the configuration system. + * + * @see UserAdminSettingsFormTest + * For a full working implementation. + */ +abstract class ConfigFormTestBase extends KernelTestBase { + /** + * Form ID to use for testing. + * + * @var \Drupal\Core\Form\FormInterface. + */ + protected $form; + + /** + * Values to use for testing. + * + * Contains details for form key, configuration object name, and config key. + * Example: + * @code + * array( + * 'user_mail_cancel_confirm_body' => array( + * '#value' => $this->randomString(), + * '#config_name' => 'user.mail', + * '#config_key' => 'cancel_confirm.body', + * ), + * ); + * @endcode + * + * @var array + */ + protected $values; + + /** + * Submit the system_config_form ensure the configuration has expected values. + */ + public function testConfigForm() { + // Programmatically submit the given values. + $values = []; + foreach ($this->values as $form_key => $data) { + $values[$form_key] = $data['#value']; + } + $form_state = (new FormState())->setValues($values); + \Drupal::formBuilder()->submitForm($this->form, $form_state); + + // Check that the form returns an error when expected, and vice versa. + $errors = $form_state->getErrors(); + $valid_form = empty($errors); + $args = [ + '%values' => print_r($values, TRUE), + '%errors' => $valid_form ? t('None') : implode(' ', $errors), + ]; + $this->assertTrue($valid_form, format_string('Input values: %values<br/>Validation handler errors: %errors', $args)); + + foreach ($this->values as $data) { + $this->assertEqual($data['#value'], $this->config($data['#config_name'])->get($data['#config_key'])); + } + } + +}