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 }
|