Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / paragraphs / src / Tests / Experimental / ParagraphsExperimentalHeaderActionsTest.php
diff --git a/web/modules/contrib/paragraphs/src/Tests/Experimental/ParagraphsExperimentalHeaderActionsTest.php b/web/modules/contrib/paragraphs/src/Tests/Experimental/ParagraphsExperimentalHeaderActionsTest.php
new file mode 100644 (file)
index 0000000..df1ddcd
--- /dev/null
@@ -0,0 +1,256 @@
+<?php
+
+namespace Drupal\paragraphs\Tests\Experimental;
+
+use Symfony\Component\CssSelector\CssSelectorConverter;
+
+/**
+ * Tests collapse all button.
+ *
+ * @group paragraphs
+ */
+class ParagraphsExperimentalHeaderActionsTest extends ParagraphsExperimentalTestBase {
+
+  /**
+   * Tests header actions.
+   */
+  public function testHeaderActions() {
+
+    // To test with a single header action, ensure the drag and drop action is
+    // shown, even without the library.
+    \Drupal::state()->set('paragraphs_test_dragdrop_force_show', TRUE);
+
+    $this->addParagraphedContentType('paragraphed_test');
+
+    $this->loginAsAdmin([
+      'create paragraphed_test content',
+      'edit any paragraphed_test content',
+    ]);
+
+    // Add a Paragraph type.
+    $paragraph_type = 'text_paragraph';
+    $this->addParagraphsType($paragraph_type);
+
+    // Add a text field to the text_paragraph type.
+    static::fieldUIAddNewField(
+      'admin/structure/paragraphs_type/' . $paragraph_type,
+      'text',
+      'Text',
+      'text_long',
+      [],
+      []
+    );
+
+    // Add 2 paragraphs and check for Collapse/Edit all button.
+    $this->drupalGet('node/add/paragraphed_test');
+    $this->assertNoRaw('field_paragraphs_collapse_all');
+    $this->assertNoRaw('field_paragraphs_edit_all');
+    $this->assertRaw('field_paragraphs_dragdrop_mode');
+
+    // Ensure there is only a single table row.
+    $table_rows = $this->xpath('//table[contains(@class, :class)]/tbody/tr', [':class' => 'field-multiple-table']);
+    $this->assertEqual(1, count($table_rows));
+
+    // Add second paragraph and check for Collapse/Edit all button.
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_text_paragraph_add_more');
+    $this->assertRaw('field_paragraphs_collapse_all');
+    $this->assertRaw('field_paragraphs_edit_all');
+
+    $edit = [
+      'field_paragraphs[0][subform][field_text][0][value]' => 'First text',
+      'field_paragraphs[1][subform][field_text][0][value]' => 'Second text',
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Collapse all');
+
+    // Checks that after collapsing all we can edit again these paragraphs.
+    $this->assertRaw('field_paragraphs_0_edit');
+    $this->assertRaw('field_paragraphs_1_edit');
+
+    // Test Edit all button.
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_edit_all');
+    $this->assertRaw('field_paragraphs_0_collapse');
+    $this->assertRaw('field_paragraphs_1_collapse');
+
+    $edit = [
+      'title[0][value]' => 'Test',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertText('paragraphed_test Test has been created.');
+
+    $node = $this->getNodeByTitle('Test');
+    $this->drupalGet('node/' . $node->id());
+    $this->clickLink('Edit');
+    $this->assertNoText('No Paragraph added yet.');
+
+    // Add and remove another paragraph.
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_text_paragraph_add_more');
+    $edit = [
+      'field_paragraphs[2][subform][field_text][0][value]' => 'Third text',
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'field_paragraphs_2_remove');
+
+    // Check that pressing "Collapse all" does not restore the removed
+    // paragraph.
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_edit_all');
+    $this->assertText('First text');
+    $this->assertText('Second text');
+    $this->assertNoText('Third text');
+
+    // Check that pressing "Edit all" does not restore the removed paragraph,
+    // either.
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_collapse_all');
+    $this->assertText('First text');
+    $this->assertText('Second text');
+    $this->assertNoText('Third text');
+  }
+
+  /**
+   * Tests that header actions works fine with nesting.
+   */
+  public function testHeaderActionsWithNesting() {
+    $this->addParagraphedContentType('paragraphed_test');
+
+    $this->loginAsAdmin([
+      'create paragraphed_test content',
+      'edit any paragraphed_test content',
+    ]);
+
+    // Add Paragraph types.
+    $nested_paragraph_type = 'nested_paragraph';
+    $this->addParagraphsType($nested_paragraph_type);
+    $paragraph_type = 'text';
+    $this->addParagraphsType($paragraph_type);
+
+    // Add a text field to the text_paragraph type.
+    static::fieldUIAddNewField(
+      'admin/structure/paragraphs_type/' . $paragraph_type,
+      'text',
+      'Text',
+      'text_long',
+      [],
+      []
+    );
+
+    // Add a ERR paragraph field to the nested_paragraph type.
+    static::fieldUIAddNewField(
+      'admin/structure/paragraphs_type/' . $nested_paragraph_type,
+      'nested',
+      'Nested',
+      'field_ui:entity_reference_revisions:paragraph', [
+        'settings[target_type]' => 'paragraph',
+        'cardinality' => '-1',
+      ],
+      []
+    );
+
+    // Checks that Collapse/Edit all button is presented.
+    $this->drupalGet('node/add/paragraphed_test');
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_nested_paragraph_add_more');
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_text_add_more');
+    $this->assertRaw('field_paragraphs_collapse_all');
+    $this->assertRaw('field_paragraphs_edit_all');
+
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_text_add_more');
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_subform_field_nested_text_add_more');
+    $this->assertNoRaw('field_paragraphs_0_collapse_all');
+    $this->assertNoRaw('field_paragraphs_0_edit_all');
+    $edit = [
+      'field_paragraphs[0][subform][field_nested][0][subform][field_text][0][value]' => 'Nested text',
+      'field_paragraphs[1][subform][field_text][0][value]' => 'Second text paragraph',
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Collapse all');
+    $this->assertRaw('field-paragraphs-0-edit');
+    $this->assertFieldByXPath((new CssSelectorConverter())->toXPath('[name="field_paragraphs_1_edit"] + .paragraphs-dropdown'));
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_edit_all');
+    $this->assertRaw('field-paragraphs-0-collapse');
+
+    $edit = [
+      'title[0][value]' => 'Test',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertText('paragraphed_test Test has been created.');
+
+    $node = $this->getNodeByTitle('Test');
+    $this->drupalGet('node/' . $node->id());
+    $this->clickLink('Edit');
+    $this->assertNoText('No Paragraph added yet.');
+  }
+
+  /**
+   * Tests header actions with multi fields.
+   */
+  public function testHeaderActionsWithMultiFields() {
+    $this->addParagraphedContentType('paragraphed_test');
+    $this->loginAsAdmin([
+      'create paragraphed_test content',
+      'edit any paragraphed_test content',
+    ]);
+    $this->drupalGet('/admin/structure/types/manage/paragraphed_test/fields/add-field');
+
+    // Add a Paragraph type.
+    $paragraph_type = 'text_paragraph';
+    $this->addParagraphsType($paragraph_type);
+    $edit = [
+      'new_storage_type' => 'field_ui:entity_reference_revisions:paragraph',
+      'label' => 'Second paragraph',
+      'field_name' => 'second',
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Save and continue');
+    $this->drupalPostForm(NULL, [], 'Save field settings');
+    $this->drupalPostForm(NULL, [], 'Save settings');
+
+    $this->drupalGet('/admin/structure/types/manage/paragraphed_test/form-display');
+    $edit = [
+      'fields[field_second][type]' => 'paragraphs',
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Save');
+
+    // Add a text field to the text_paragraph type.
+    static::fieldUIAddNewField(
+      'admin/structure/paragraphs_type/' . $paragraph_type,
+      'text',
+      'Text',
+      'text_long',
+      [],
+      []
+    );
+
+    $this->drupalGet('node/add/paragraphed_test');
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_text_paragraph_add_more');
+    $this->drupalPostAjaxForm(NULL, [], 'field_second_text_paragraph_add_more');
+
+    // Checks that we have Collapse\Edit all for each field.
+    $this->assertRaw('field_paragraphs_collapse_all');
+    $this->assertRaw('field_paragraphs_edit_all');
+    $this->assertRaw('field_second_collapse_all');
+    $this->assertRaw('field_second_edit_all');
+
+    $edit = [
+      'field_second[0][subform][field_text][0][value]' => 'Second field',
+    ];
+    $this->drupalPostAjaxForm(NULL, $edit, 'field_second_collapse_all');
+
+    // Checks that we collapsed only children from second field.
+    $this->assertNoRaw('field_paragraphs_0_edit');
+    $this->assertRaw('field_second_0_edit');
+
+    $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_collapse_all');
+    $this->assertRaw('field_paragraphs_0_edit');
+    $this->assertRaw('field_second_0_edit');
+
+    $this->drupalPostAjaxForm(NULL, [], 'field_second_edit_all');
+    $this->assertRaw('field_second_0_collapse');
+
+    $edit = [
+      'title[0][value]' => 'Test',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertText('paragraphed_test Test has been created.');
+
+    $node = $this->getNodeByTitle('Test');
+    $this->drupalGet('node/' . $node->id());
+    $this->clickLink('Edit');
+    $this->assertNoText('No Paragraph added yet.');
+  }
+
+}