annotate core/tests/Drupal/KernelTests/ConfigFormTestBase.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@16 1 <?php
Chris@16 2
Chris@16 3 namespace Drupal\KernelTests;
Chris@16 4
Chris@16 5 use Drupal\Core\Form\FormState;
Chris@16 6
Chris@16 7 /**
Chris@16 8 * Full generic test suite for any form that data with the configuration system.
Chris@16 9 *
Chris@16 10 * @see UserAdminSettingsFormTest
Chris@16 11 * For a full working implementation.
Chris@16 12 */
Chris@16 13 abstract class ConfigFormTestBase extends KernelTestBase {
Chris@16 14 /**
Chris@16 15 * Form ID to use for testing.
Chris@16 16 *
Chris@17 17 * @var \Drupal\Core\Form\FormInterface
Chris@16 18 */
Chris@16 19 protected $form;
Chris@16 20
Chris@16 21 /**
Chris@16 22 * Values to use for testing.
Chris@16 23 *
Chris@16 24 * Contains details for form key, configuration object name, and config key.
Chris@16 25 * Example:
Chris@16 26 * @code
Chris@16 27 * array(
Chris@16 28 * 'user_mail_cancel_confirm_body' => array(
Chris@16 29 * '#value' => $this->randomString(),
Chris@16 30 * '#config_name' => 'user.mail',
Chris@16 31 * '#config_key' => 'cancel_confirm.body',
Chris@16 32 * ),
Chris@16 33 * );
Chris@16 34 * @endcode
Chris@16 35 *
Chris@16 36 * @var array
Chris@16 37 */
Chris@16 38 protected $values;
Chris@16 39
Chris@16 40 /**
Chris@16 41 * Submit the system_config_form ensure the configuration has expected values.
Chris@16 42 */
Chris@16 43 public function testConfigForm() {
Chris@16 44 // Programmatically submit the given values.
Chris@16 45 $values = [];
Chris@16 46 foreach ($this->values as $form_key => $data) {
Chris@16 47 $values[$form_key] = $data['#value'];
Chris@16 48 }
Chris@16 49 $form_state = (new FormState())->setValues($values);
Chris@16 50 \Drupal::formBuilder()->submitForm($this->form, $form_state);
Chris@16 51
Chris@16 52 // Check that the form returns an error when expected, and vice versa.
Chris@16 53 $errors = $form_state->getErrors();
Chris@16 54 $valid_form = empty($errors);
Chris@16 55 $args = [
Chris@16 56 '%values' => print_r($values, TRUE),
Chris@16 57 '%errors' => $valid_form ? t('None') : implode(' ', $errors),
Chris@16 58 ];
Chris@16 59 $this->assertTrue($valid_form, format_string('Input values: %values<br/>Validation handler errors: %errors', $args));
Chris@16 60
Chris@16 61 foreach ($this->values as $data) {
Chris@16 62 $this->assertEqual($data['#value'], $this->config($data['#config_name'])->get($data['#config_key']));
Chris@16 63 }
Chris@16 64 }
Chris@16 65
Chris@16 66 }