Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / paragraphs / tests / src / FunctionalJavascript / ParagraphsExperimentalAddWidgetTest.php
diff --git a/web/modules/contrib/paragraphs/tests/src/FunctionalJavascript/ParagraphsExperimentalAddWidgetTest.php b/web/modules/contrib/paragraphs/tests/src/FunctionalJavascript/ParagraphsExperimentalAddWidgetTest.php
new file mode 100644 (file)
index 0000000..91bc7ad
--- /dev/null
@@ -0,0 +1,176 @@
+<?php
+
+namespace Drupal\Tests\paragraphs\FunctionalJavascript;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\Core\Entity\Display\EntityFormDisplayInterface;
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\field_ui\Tests\FieldUiTestTrait;
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+use Drupal\node\Entity\NodeType;
+use Drupal\paragraphs\Entity\ParagraphsType;
+use Drupal\paragraphs\Tests\Classic\ParagraphsCoreVersionUiTestTrait;
+use Drupal\Tests\paragraphs\FunctionalJavascript\LoginAdminTrait;
+
+/**
+ * Test paragraphs user interface.
+ *
+ * @group paragraphs
+ */
+class ParagraphsExperimentalAddWidgetTest extends JavascriptTestBase {
+
+  use LoginAdminTrait;
+  use FieldUiTestTrait;
+  use ParagraphsTestBaseTrait;
+  use ParagraphsCoreVersionUiTestTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'node',
+    'paragraphs_test',
+    'paragraphs',
+    'field',
+    'field_ui',
+    'block',
+    'link',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp()
+  {
+    parent::setUp();
+    // Place the breadcrumb, tested in fieldUIAddNewField().
+    $this->drupalPlaceBlock('system_breadcrumb_block');
+    $this->drupalPlaceBlock('local_tasks_block');
+    $this->drupalPlaceBlock('local_actions_block');
+    $this->drupalPlaceBlock('page_title_block');
+
+  }
+
+  /**
+   * Tests the add widget button with modal form.
+   */
+  public function testAddWidgetButton() {
+    $this->addParagraphedContentType('paragraphed_test');
+    $this->loginAsAdmin([
+      'administer content types',
+      'administer node form display',
+      'edit any paragraphed_test content',
+      'create paragraphed_test content',
+    ]);
+    // Set the add mode on the content type to modal form widget.
+    $this->drupalGet('admin/structure/types/manage/paragraphed_test/form-display');
+    $page = $this->getSession()->getPage();
+    $page->pressButton('field_paragraphs_settings_edit');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+    $edit = [
+      'fields[field_paragraphs][settings_edit_form][settings][edit_mode]' => 'closed',
+      'fields[field_paragraphs][settings_edit_form][settings][add_mode]' => 'modal'
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Update');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+
+    $this->drupalPostForm(NULL, [], t('Save'));
+
+    // Add a Paragraph type.
+    $paragraph_type = 'text_paragraph';
+    $this->addParagraphsType($paragraph_type);
+    $this->addParagraphsType('text');
+
+    // Add icons to the paragraphs types.
+    $icon_one = $this->addParagraphsTypeIcon($paragraph_type);
+    $icon_two = $this->addParagraphsTypeIcon('text');
+
+    // Add a text field to the text_paragraph type.
+    static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $paragraph_type, 'text', 'Text', 'text_long', [], []);
+
+    // Create paragraph type Nested test.
+    $this->addParagraphsType('nested_test');
+
+    static::fieldUIAddNewField('admin/structure/paragraphs_type/nested_test', 'paragraphs', 'Paragraphs', 'entity_reference_revisions', [
+      'settings[target_type]' => 'paragraph',
+      'cardinality' => '-1',
+    ], []);
+
+    // Set the settings for the field in the nested paragraph.
+    $component = [
+      'type' => 'paragraphs',
+      'region' => 'content',
+      'settings' => [
+        'edit_mode' => 'closed',
+        'add_mode' => 'modal',
+        'form_display_mode' => 'default',
+      ],
+    ];
+    EntityFormDisplay::load('paragraph.nested_test.default')->setComponent('field_paragraphs', $component)->save();
+
+    // Add a paragraphed test.
+    $this->drupalGet('node/add/paragraphed_test');
+
+    // Add a nested paragraph with the add widget.
+    $page->pressButton('Add Paragraph');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+    $this->assertSession()->elementTextContains('css', '.ui-dialog-title', 'Add Paragraph');
+    $page->pressButton('nested_test');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+
+    // Verify that the paragraphs type icons are being displayed.
+    $button_one = $this->assertSession()->buttonExists($paragraph_type);
+    $button_two = $this->assertSession()->buttonExists('text');
+    $this->assertContains($icon_one->getFilename(), $button_one->getAttribute('style'));
+    $this->assertContains($icon_two->getFilename(), $button_two->getAttribute('style'));
+
+    // Find the add button in the nested paragraph with xpath.
+    $element = $this->xpath('//div[contains(@class, "form-wrapper")]/div[contains(@class, "paragraph-type-add-modal")]/input');
+    $element[0]->click();
+    $this->assertSession()->assertWaitOnAjaxRequest();
+
+    // Add a text inside the nested paragraph.
+    $page = $this->getSession()->getPage();
+    $dialog = $page->find('xpath', '//div[contains(@class, "ui-dialog")]');
+    $dialog->pressButton('text');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+    $edit = [
+      'title[0][value]' => 'Example title',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+
+
+    // Check the created paragraphed test.
+    $this->assertText('paragraphed_test Example title has been created.');
+    $this->assertRaw('paragraph--type--nested-test');
+    $this->assertRaw('paragraph--type--text');
+
+    // Add a paragraphs field with another paragraphs widget title to the
+    // paragraphed_test content type.
+    $this->addParagraphsField('paragraphed_test', 'field_paragraphs_two', 'node');
+    $settings = [
+      'title' => 'Renamed paragraph',
+      'title_plural' => 'Renamed paragraphs',
+      'add_mode' => 'modal',
+    ];
+    $this->setParagraphsWidgetSettings('paragraphed_test', 'field_paragraphs_two', $settings);
+
+    // Check that the "add" buttons and modal form windows are labeled
+    // correctly.
+    $this->drupalGet('node/add/paragraphed_test');
+    $page->pressButton('Add Paragraph');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+    $this->assertSession()->elementTextContains('css', '.ui-dialog-title', 'Add Paragraph');
+    $this->assertSession()->elementTextNotContains('css', '.ui-dialog-title', 'Add Renamed paragraph');
+    $this->assertSession()->elementExists('css', '.ui-dialog-titlebar-close')->press();
+    $page->pressButton('Add Renamed paragraph');
+    $this->assertSession()->assertWaitOnAjaxRequest();
+    $this->assertSession()->elementTextContains('css', '.ui-dialog-title', 'Add Renamed paragraph');
+    $this->assertSession()->elementTextNotContains('css', '.ui-dialog-title', 'Add Paragraph');
+  }
+}