diff --git a/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php b/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php index 09e8b3c..aadf3ea 100644 --- a/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php +++ b/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php @@ -2,6 +2,7 @@ namespace Drupal\Tests\field_layout\FunctionalJavascript; +use Drupal\entity_test\Entity\EntityTest; use Drupal\FunctionalJavascriptTests\JavascriptTestBase; /** @@ -14,7 +15,7 @@ class FieldLayoutTest extends JavascriptTestBase { /** * {@inheritdoc} */ - public static $modules = ['field_layout', 'field_ui', 'node']; + public static $modules = ['field_layout', 'field_ui', 'node', 'entity_test']; /** * {@inheritdoc} @@ -32,6 +33,13 @@ protected function setUp() { 'value' => 'The node body', ]], ]); + $entity = EntityTest::create([ + 'name' => 'The name for this entity', + 'field_test_text' => [[ + 'value' => 'The field test text value', + ]], + ]); + $entity->save(); $this->drupalLogin($this->drupalCreateUser([ 'access administration pages', 'administer content types', @@ -39,20 +47,25 @@ protected function setUp() { 'administer node fields', 'administer node display', 'administer node form display', + 'view test entity', + 'administer entity_test content', + 'administer entity_test fields', + 'administer entity_test display', + 'administer entity_test form display', 'view the administration theme', ])); } /** - * Tests the use of field layout for entity view displays. + * Tests the use of field layout for entity form displays. */ - public function testEntityView() { + public function testEntityForm() { // By default, the default layout is used. - $this->drupalGet('node/1'); - $this->assertSession()->elementExists('css', '.field-layout-region--content .field--name-body'); + $this->drupalGet('entity_test/manage/1/edit'); + $this->assertFieldInRegion('field_test_text[0][value]', 'content'); // The default layout is in use. - $this->drupalGet('admin/structure/types/manage/article/display'); + $this->drupalGet('entity_test/structure/entity_test/form-display'); $this->assertEquals(['Content', 'Disabled'], $this->getRegionTitles()); // Switch the layout to two columns. @@ -63,40 +76,116 @@ public function testEntityView() { $this->assertSession()->pageTextContains('Your settings have been saved.'); $this->assertEquals(['Left', 'Right', 'Disabled'], $this->getRegionTitles()); - $this->drupalGet('node/1'); + $this->drupalGet('entity_test/manage/1/edit'); // No fields are visible, and the regions don't display when empty. $this->assertSession()->elementNotExists('css', '.field-layout-region'); - $this->assertSession()->elementNotExists('css', '.field--name-body'); + $this->assertSession()->fieldNotExists('field_test_text[0][value]'); // After a refresh the new regions are still there. - $this->drupalGet('admin/structure/types/manage/article/display'); + $this->drupalGet('entity_test/structure/entity_test/form-display'); $this->assertEquals(['Left', 'Right', 'Disabled'], $this->getRegionTitles()); - // Drag the body field to the left region. + // Drag the field to the left region. $page = $this->getSession()->getPage(); - $body_row = $page->find('css', '#body'); + $field_test_text_row = $page->find('css', '#field-test-text'); $left_region_row = $page->find('css', '.region-left-message'); - $body_row->find('css', '.handle')->dragTo($left_region_row); + $field_test_text_row->find('css', '.handle')->dragTo($left_region_row); $this->assertSession()->assertWaitOnAjaxRequest(); - $body_row->hasClass('.drag-previous'); - + $field_test_text_row->hasClass('.drag-previous'); $this->submitForm([], 'Save'); $this->assertSession()->pageTextContains('Your settings have been saved.'); - $this->drupalGet('admin/structure/types/manage/article/display'); + // The new layout is used. + $this->drupalGet('entity_test/manage/1/edit'); + $this->assertSession()->elementExists('css', '.field-layout-region--left .field--name-field-test-text'); + $this->assertFieldInRegion('field_test_text[0][value]', 'left'); + + // Move the field to the right region without tabledrag. + $this->drupalGet('entity_test/structure/entity_test/form-display'); $page->pressButton('Show row weights'); - $this->getSession()->getPage()->selectFieldOption('fields[links][region]', 'right'); + $this->getSession()->getPage()->selectFieldOption('fields[field_test_text][region]', 'right'); $this->assertSession()->assertWaitOnAjaxRequest(); $this->submitForm([], 'Save'); + $this->assertSession()->pageTextContains('Your settings have been saved.'); + + // The updated region is used. + $this->drupalGet('entity_test/manage/1/edit'); + $this->assertFieldInRegion('field_test_text[0][value]', 'right'); + + // The layout is still in use without Field UI. + $this->container->get('module_installer')->uninstall(['field_ui']); + $this->drupalGet('entity_test/manage/1/edit'); + $this->assertFieldInRegion('field_test_text[0][value]', 'right'); + } + + /** + * Tests the use of field layout for entity view displays. + */ + public function testEntityView() { + // The default layout is in use. + $this->drupalGet('entity_test/structure/entity_test/display'); + $this->assertEquals(['Content', 'Disabled'], $this->getRegionTitles()); + + // Switch the layout to two columns. + $this->click('#edit-field-layouts'); + $this->getSession()->getPage()->selectFieldOption('field_layout', '2col'); + $this->submitForm([], 'Save'); + + $this->assertSession()->pageTextContains('Your settings have been saved.'); + $this->assertEquals(['Left', 'Right', 'Disabled'], $this->getRegionTitles()); + + $this->drupalGet('entity_test/1'); + // No fields are visible, and the regions don't display when empty. + $this->assertSession()->elementNotExists('css', '.field-layout-region'); + $this->assertSession()->elementNotExists('css', '.field--name-field-test-text'); + + // After a refresh the new regions are still there. + $this->drupalGet('entity_test/structure/entity_test/display'); + $this->assertEquals(['Left', 'Right', 'Disabled'], $this->getRegionTitles()); + + // Drag the field to the left region. + $page = $this->getSession()->getPage(); + $field_test_text_row = $page->find('css', '#field-test-text'); + $left_region_row = $page->find('css', '.region-left-message'); + $field_test_text_row->find('css', '.handle')->dragTo($left_region_row); + $this->assertSession()->assertWaitOnAjaxRequest(); + $field_test_text_row->hasClass('.drag-previous'); + $this->submitForm([], 'Save'); + $this->assertSession()->pageTextContains('Your settings have been saved.'); // The new layout is used. - $this->drupalGet('node/1'); - $this->assertSession()->elementExists('css', '.field-layout-region--left .field--name-body'); + $this->drupalGet('entity_test/1'); + $this->assertSession()->elementExists('css', '.field-layout-region--left .field--name-field-test-text'); + + // Move the field to the right region without tabledrag. + $this->drupalGet('entity_test/structure/entity_test/display'); + $page->pressButton('Show row weights'); + $this->getSession()->getPage()->selectFieldOption('fields[field_test_text][region]', 'right'); + $this->assertSession()->assertWaitOnAjaxRequest(); + $this->submitForm([], 'Save'); + $this->assertSession()->pageTextContains('Your settings have been saved.'); + + // The updated region is used. + $this->drupalGet('entity_test/1'); + $this->assertSession()->elementExists('css', '.field-layout-region--right .field--name-field-test-text'); // The layout is still in use without Field UI. $this->container->get('module_installer')->uninstall(['field_ui']); + $this->drupalGet('entity_test/1'); + $this->assertSession()->elementExists('css', '.field-layout-region--right .field--name-field-test-text'); + } + + /** + * Tests an entity type that has fields shown by default. + */ + public function testNodeView() { + // By default, the default layout is used. $this->drupalGet('node/1'); - $this->assertSession()->elementExists('css', '.field-layout-region--left .field--name-body'); + $this->assertSession()->elementExists('css', '.field-layout-region--content .field--name-body'); + + $this->drupalGet('admin/structure/types/manage/article/display'); + $this->assertEquals(['Content', 'Disabled'], $this->getRegionTitles()); + $this->assertSession()->optionExists('fields[body][region]', 'content'); } /** @@ -115,4 +204,17 @@ protected function getRegionTitles() { return $region_titles; } + /** + * Asserts that a field exists in a given region. + * + * @param string $field_selector + * The field selector, one of field id|name|label|value. + * @param string $region_name + * The machine name of the region. + */ + protected function assertFieldInRegion($field_selector, $region_name) { + $region_element = $this->getSession()->getPage()->find('css', ".field-layout-region--$region_name"); + $this->assertSession()->fieldExists($field_selector, $region_element); + } + }