Mercurial > hg > isophonics-drupal-site
comparison core/modules/user/tests/src/FunctionalJavascript/RegistrationWithUserFieldsTest.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
16:c2387f117808 | 17:129ea1e6d783 |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\user\FunctionalJavascript; | |
4 | |
5 use Drupal\FunctionalJavascriptTests\WebDriverTestBase; | |
6 use Drupal\Core\Field\FieldStorageDefinitionInterface; | |
7 use Drupal\field\Entity\FieldConfig; | |
8 use Drupal\field\Entity\FieldStorageConfig; | |
9 | |
10 /** | |
11 * Tests user registration forms with additional fields. | |
12 * | |
13 * @group user | |
14 */ | |
15 class RegistrationWithUserFieldsTest extends WebDriverTestBase { | |
16 | |
17 /** | |
18 * WebAssert object. | |
19 * | |
20 * @var \Drupal\Tests\WebAssert | |
21 */ | |
22 protected $webAssert; | |
23 | |
24 /** | |
25 * DocumentElement object. | |
26 * | |
27 * @var \Behat\Mink\Element\DocumentElement | |
28 */ | |
29 protected $page; | |
30 | |
31 /** | |
32 * {@inheritdoc} | |
33 */ | |
34 public static $modules = ['field_test']; | |
35 | |
36 /** | |
37 * {@inheritdoc} | |
38 */ | |
39 protected function setUp() { | |
40 parent::setUp(); | |
41 $this->page = $this->getSession()->getPage(); | |
42 $this->webAssert = $this->assertSession(); | |
43 } | |
44 | |
45 /** | |
46 * Tests Field API fields on user registration forms. | |
47 */ | |
48 public function testRegistrationWithUserFields() { | |
49 // Create a field on 'user' entity type. | |
50 $field_storage = FieldStorageConfig::create([ | |
51 'field_name' => 'test_user_field', | |
52 'entity_type' => 'user', | |
53 'type' => 'test_field', | |
54 'cardinality' => 1, | |
55 ]); | |
56 $field_storage->save(); | |
57 $field = FieldConfig::create([ | |
58 'field_storage' => $field_storage, | |
59 'label' => 'Some user field', | |
60 'bundle' => 'user', | |
61 'required' => TRUE, | |
62 ]); | |
63 $field->save(); | |
64 | |
65 entity_get_form_display('user', 'user', 'default') | |
66 ->setComponent('test_user_field', ['type' => 'test_field_widget']) | |
67 ->save(); | |
68 $user_registration_form = entity_get_form_display('user', 'user', 'register'); | |
69 $user_registration_form->save(); | |
70 | |
71 // Check that the field does not appear on the registration form. | |
72 $this->drupalGet('user/register'); | |
73 $this->webAssert->pageTextNotContains($field->label()); | |
74 | |
75 // Have the field appear on the registration form. | |
76 $user_registration_form->setComponent('test_user_field', ['type' => 'test_field_widget'])->save(); | |
77 | |
78 $this->drupalGet('user/register'); | |
79 $this->webAssert->pageTextContains($field->label()); | |
80 | |
81 // In order to check the server side validation the native browser | |
82 // validation for required fields needs to be circumvented. | |
83 $session = $this->getSession(); | |
84 $session->executeScript("jQuery('#edit-test-user-field-0-value').prop('required', false);"); | |
85 | |
86 // Check that validation errors are correctly reported. | |
87 $name = $this->randomMachineName(); | |
88 $this->page->fillField('edit-name', $name); | |
89 $this->page->fillField('edit-mail', $name . '@example.com'); | |
90 | |
91 $this->page->pressButton('edit-submit'); | |
92 $this->webAssert->pageTextContains(t('@name field is required.', ['@name' => $field->label()])); | |
93 | |
94 // Invalid input. | |
95 $this->page->fillField('edit-test-user-field-0-value', '-1'); | |
96 $this->page->pressButton('edit-submit'); | |
97 $this->webAssert->pageTextContains($field->label() . ' does not accept the value -1.'); | |
98 | |
99 // Submit with valid data. | |
100 $value = (string) mt_rand(1, 255); | |
101 $this->page->fillField('edit-test-user-field-0-value', $value); | |
102 $this->page->pressButton('edit-submit'); | |
103 // Check user fields. | |
104 $accounts = $this->container->get('entity_type.manager')->getStorage('user') | |
105 ->loadByProperties(['name' => $name, 'mail' => $name . '@example.com']); | |
106 $new_user = reset($accounts); | |
107 $this->assertEquals($value, $new_user->test_user_field->value, 'The field value was correctly saved.'); | |
108 | |
109 // Check that the 'add more' button works. | |
110 $field_storage->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED); | |
111 $field_storage->save(); | |
112 $name = $this->randomMachineName(); | |
113 $this->drupalGet('user/register'); | |
114 $this->page->fillField('edit-name', $name); | |
115 $this->page->fillField('edit-mail', $name . '@example.com'); | |
116 $this->page->fillField('test_user_field[0][value]', $value); | |
117 // Add two inputs. | |
118 $this->page->pressButton('test_user_field_add_more'); | |
119 $this->webAssert->waitForElement('css', 'input[name="test_user_field[1][value]"]'); | |
120 $this->page->fillField('test_user_field[1][value]', $value . '1'); | |
121 $this->page->pressButton('test_user_field_add_more'); | |
122 $this->webAssert->waitForElement('css', 'input[name="test_user_field[2][value]"]'); | |
123 $this->page->fillField('test_user_field[2][value]', $value . '2'); | |
124 | |
125 // Submit with three values. | |
126 $this->page->pressButton('edit-submit'); | |
127 | |
128 // Check user fields. | |
129 $accounts = $this->container->get('entity_type.manager') | |
130 ->getStorage('user') | |
131 ->loadByProperties(['name' => $name, 'mail' => $name . '@example.com']); | |
132 $new_user = reset($accounts); | |
133 $this->assertEquals($value, $new_user->test_user_field[0]->value, t('The field value was correctly saved.')); | |
134 $this->assertEquals($value . '1', $new_user->test_user_field[1]->value, t('The field value was correctly saved.')); | |
135 $this->assertEquals($value . '2', $new_user->test_user_field[2]->value, t('The field value was correctly saved.')); | |
136 } | |
137 | |
138 } |