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']));
+    }
+  }
+
+}