Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / paragraphs / tests / src / FunctionalJavascript / ParagraphsExperimentalEditPerspectivesUiTest.php
diff --git a/web/modules/contrib/paragraphs/tests/src/FunctionalJavascript/ParagraphsExperimentalEditPerspectivesUiTest.php b/web/modules/contrib/paragraphs/tests/src/FunctionalJavascript/ParagraphsExperimentalEditPerspectivesUiTest.php
new file mode 100644 (file)
index 0000000..adfdb81
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+
+namespace Drupal\Tests\paragraphs\FunctionalJavascript;
+
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+
+/**
+ * Test paragraphs user interface.
+ *
+ * @group paragraphs
+ */
+class ParagraphsExperimentalEditPerspectivesUiTest extends JavascriptTestBase {
+
+  use LoginAdminTrait;
+  use ParagraphsTestBaseTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'node',
+    'paragraphs_test',
+    'paragraphs',
+    'field',
+    'field_ui',
+    'block',
+    'link',
+    'text',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+  }
+
+  /**
+   * Test paragraphs user interface.
+   */
+  public function testEditPerspectives() {
+
+    $this->loginAsAdmin([
+      'access content overview',
+      'edit behavior plugin settings'
+    ]);
+
+    $page = $this->getSession()->getPage();
+    $this->drupalGet('admin/structure/paragraphs_type/add');
+    $edit = [
+      'label' => 'TestPlugin',
+      'id' => 'testplugin',
+      'behavior_plugins[test_text_color][enabled]' => TRUE,
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and manage fields'));
+    $this->drupalGet('admin/structure/types/add');
+    $edit = [
+      'name' => 'TestContent',
+      'type' => 'testcontent',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and manage fields'));
+    $this->drupalGet('admin/structure/types/manage/testcontent/fields/add-field');
+    $edit = [
+      'new_storage_type' => 'field_ui:entity_reference_revisions:paragraph',
+      'label' => 'testparagraphfield',
+      'field_name' => 'testparagraphfield',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and continue'));
+    $edit = [
+      'settings[target_type]' => 'paragraph',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save field settings'));
+    $edit = [
+      'settings[handler_settings][target_bundles_drag_drop][testplugin][enabled]' => TRUE,
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save settings'));
+    $this->drupalGet('admin/structure/types/manage/testcontent/form-display');
+    $page->selectFieldOption('fields[field_testparagraphfield][type]', 'paragraphs');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+    $this->drupalPostForm(NULL, [], t('Save'));
+    $this->drupalGet('node/add/testcontent');
+    $this->clickLink('Behavior');
+    $style_selector = $page->find('css', '.form-item-field-testparagraphfield-0-behavior-plugins-test-text-color-text-color');
+    $this->assertTrue($style_selector->isVisible());
+    $this->clickLink('Content');
+    $this->assertFalse($style_selector->isVisible());
+  }
+
+  /**
+   * Test if tabs are visible with no behavior elements.
+   */
+  public function testTabsVisibility() {
+    $this->loginAsAdmin([
+      'access content overview',
+    ]);
+
+    $page = $this->getSession()->getPage();
+    $this->drupalGet('admin/structure/paragraphs_type/add');
+    $edit = [
+      'label' => 'TestPlugin',
+      'id' => 'testplugin',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and manage fields'));
+    $this->drupalGet('admin/structure/types/add');
+    $edit = [
+      'name' => 'TestContent',
+      'type' => 'testcontent',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and manage fields'));
+    $this->drupalGet('admin/structure/types/manage/testcontent/fields/add-field');
+    $edit = [
+      'new_storage_type' => 'field_ui:entity_reference_revisions:paragraph',
+      'label' => 'testparagraphfield',
+      'field_name' => 'testparagraphfield',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and continue'));
+    $edit = [
+      'settings[target_type]' => 'paragraph',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save field settings'));
+    $this->drupalPostForm(NULL, NULL, t('Save settings'));
+    $this->drupalGet('admin/structure/types/manage/testcontent/form-display');
+    $page->selectFieldOption('fields[field_testparagraphfield][type]', 'paragraphs');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+    $this->drupalPostForm(NULL, [], t('Save'));
+    $this->drupalGet('node/add/testcontent');
+    $style_selector = $page->find('css', '.paragraphs-tabs');
+    $this->assertFalse($style_selector->isVisible());
+  }
+
+  /**
+   * Test edit perspectives works fine with multiple fields.
+   */
+  public function testPerspectivesWithMultipleFields() {
+    $this->loginAsAdmin([
+      'edit behavior plugin settings'
+    ]);
+
+    // Add a nested Paragraph type.
+    $paragraph_type = 'nested_paragraph';
+    $this->addParagraphsType($paragraph_type);
+    $this->addParagraphsField('nested_paragraph', 'paragraphs', 'paragraph');
+    $edit = [
+      'behavior_plugins[test_bold_text][enabled]' => TRUE,
+    ];
+    $this->drupalPostForm('admin/structure/paragraphs_type/' . $paragraph_type, $edit, t('Save'));
+
+    $this->addParagraphedContentType('testcontent');
+    $this->addParagraphsField('testcontent', 'field_paragraphs2', 'node');
+
+    // Disable the default paragraph on both the node and the nested paragraph
+    // to explicitly test with no paragraph and avoid a loop.
+    EntityFormDisplay::load('node.testcontent.default')
+      ->setComponent('field_paragraphs', ['type' => 'paragraphs', 'settings' => ['default_paragraph_type' => '_none']])
+      ->setComponent('field_paragraphs2', ['type' => 'paragraphs', 'settings' => ['default_paragraph_type' => '_none']])
+      ->save();
+    EntityFormDisplay::load('paragraph' . '.' . $paragraph_type . '.default')
+      ->setComponent('paragraphs', ['type' => 'paragraphs', 'settings' => ['default_paragraph_type' => '_none']])
+      ->save();
+
+    $assert_session = $this->assertSession();
+
+    $this->drupalGet('node/add/testcontent');
+    $assert_session->elementNotExists('css', '.paragraphs-nested');
+
+    // Add a nested paragraph to the first field.
+    $button = $this->getSession()->getPage()->findButton('Add nested_paragraph');
+    $button->press();
+
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->elementExists('css', '.paragraphs-nested');
+
+    // Add a paragraph to the second field.
+    $region_field2 = $this->getSession()->getPage()->find('css', '.field--name-field-paragraphs2');
+    $button_field2 = $region_field2->findButton('Add nested_paragraph');
+    $button_field2->press();
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Ge the style checkboxes from each field, make sure they are not visible
+    // by default.
+    $page = $this->getSession()->getPage();
+    $style_selector = $page->findField('field_paragraphs[0][behavior_plugins][test_bold_text][bold_text]');
+    $this->assertFalse($style_selector->isVisible());
+    $style_selector2 = $page->findField('field_paragraphs2[0][behavior_plugins][test_bold_text][bold_text]');
+    $this->assertFalse($style_selector2->isVisible());
+
+    // Switch to Behavior on the first field, then the second, make sure
+    // the visibility of the checkboxes is correct after each change.
+    $this->clickLink('Behavior', 0);
+    $this->assertTrue($style_selector->isVisible());
+    $this->assertFalse($style_selector2->isVisible());
+    $this->clickLink('Behavior', 1);
+    $this->assertTrue($style_selector->isVisible());
+    $this->assertTrue($style_selector2->isVisible());
+
+    // Switch the second field back to Content, verify visibility again.
+    $this->clickLink('Content', 1);
+    $this->assertTrue($style_selector->isVisible());
+    $this->assertFalse($style_selector2->isVisible());
+  }
+
+}