function ConfigTargetTest::testNested
Same name in this branch
- 11.x core/modules/system/tests/src/FunctionalJavascript/Form/ConfigTargetTest.php \Drupal\Tests\system\FunctionalJavascript\Form\ConfigTargetTest::testNested()
Same name in other branches
- 10 core/modules/system/tests/src/FunctionalJavascript/Form/ConfigTargetTest.php \Drupal\Tests\system\FunctionalJavascript\Form\ConfigTargetTest::testNested()
- 10 core/modules/system/tests/src/Functional/Form/ConfigTargetTest.php \Drupal\Tests\system\Functional\Form\ConfigTargetTest::testNested()
Tests #config_target where there is not a 1:1 property to element.
File
-
core/
modules/ system/ tests/ src/ Functional/ Form/ ConfigTargetTest.php, line 55
Class
- ConfigTargetTest
- Tests forms using #config_target.
Namespace
Drupal\Tests\system\Functional\FormCode
public function testNested() : void {
$most_favorite_fruit = 'Apple';
$second_favorite_fruit = 'Kiwi';
$nemesis_vegetable = 'Cauliflower';
$this->drupalGet('/form-test/nested-config-target');
$page = $this->getSession()
->getPage();
// Both invalid.
$page->fillField('First choice', '');
$page->fillField('Second choice', '');
$page->pressButton('Save configuration');
$assert_session = $this->assertSession();
$assert_session->statusMessageContains('This value should not be blank.', 'error');
$assert_session->elementAttributeNotExists('css', '#edit-favorites', 'aria-invalid');
$assert_session->elementAttributeExists('named', [
'field',
'First choice',
], 'aria-invalid');
$assert_session->elementAttributeExists('named', [
'field',
'Second choice',
], 'aria-invalid');
// Second invalid.
$page->fillField('First choice', $most_favorite_fruit);
$page->fillField('Second choice', '');
$page->pressButton('Save configuration');
$assert_session = $this->assertSession();
$assert_session->statusMessageContains('This value should not be blank.', 'error');
$assert_session->elementAttributeNotExists('css', '#edit-favorites', 'aria-invalid');
$assert_session->elementAttributeNotExists('named', [
'field',
'First choice',
], 'aria-invalid');
$assert_session->elementAttributeExists('named', [
'field',
'Second choice',
], 'aria-invalid');
// First invalid.
$page->fillField('First choice', '');
$page->fillField('Second choice', $second_favorite_fruit);
$page->pressButton('Save configuration');
$assert_session = $this->assertSession();
$assert_session->statusMessageContains('This value should not be blank.', 'error');
$assert_session->elementAttributeNotExists('css', '#edit-favorites', 'aria-invalid');
$assert_session->elementAttributeExists('named', [
'field',
'First choice',
], 'aria-invalid');
$assert_session->elementAttributeNotExists('named', [
'field',
'Second choice',
], 'aria-invalid');
// Both valid.
$page->fillField('First choice', $most_favorite_fruit);
$page->fillField('Second choice', $second_favorite_fruit);
$page->pressButton('Save configuration');
$assert_session->statusMessageContains('The configuration options have been saved.', 'status');
$this->assertSame([
'langcode' => 'en',
'favorite_fruits' => [
$most_favorite_fruit,
$second_favorite_fruit,
],
'favorite_vegetable' => 'Potato',
'nemesis_vegetable' => '',
], $this->config('form_test.object')
->getRawData());
// Now enter a nemesis vegetable too.
$this->drupalGet('/form-test/nested-config-target');
$page->fillField('First choice', $most_favorite_fruit);
$page->fillField('Second choice', $second_favorite_fruit);
$page->fillField('Nemesis', $nemesis_vegetable);
$page->pressButton('Save configuration');
// A new validation error has appeared, on the conditionally displayed
// "I could not live without" form field — this field must be filled out if
// all others are.
$assert_session->statusMessageContains('The value you selected is not a valid choice.', 'error');
$assert_session->elementAttributeExists('named', [
'field',
'I could not live without',
], 'aria-invalid');
$page->fillField('First choice', $most_favorite_fruit);
$page->fillField('Second choice', $second_favorite_fruit);
$page->fillField('Nemesis', $nemesis_vegetable);
$page->fillField('I could not live without', 'fruits');
$page->pressButton('Save configuration');
$assert_session->statusMessageContains('The configuration options have been saved.', 'status');
$this->assertSame([
'langcode' => 'en',
'favorite_fruits' => [
$most_favorite_fruit,
$second_favorite_fruit,
],
'favorite_vegetable' => 'Potato',
'nemesis_vegetable' => $nemesis_vegetable,
'could_not_live_without' => 'fruits',
], $this->config('form_test.object')
->getRawData());
// Remove the nemesis vegetable; this should cause the deletion of the
// `could_not_live_without` property path in the Config object.
$this->drupalGet('/form-test/nested-config-target');
$page->fillField('First choice', $most_favorite_fruit);
$page->fillField('Second choice', $second_favorite_fruit);
$page->fillField('Nemesis', '');
$page->pressButton('Save configuration');
$assert_session->statusMessageContains('The configuration options have been saved.', 'status');
$this->assertSame([
'langcode' => 'en',
'favorite_fruits' => [
$most_favorite_fruit,
$second_favorite_fruit,
],
'favorite_vegetable' => 'Potato',
'nemesis_vegetable' => '',
], $this->config('form_test.object')
->getRawData());
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.