public function ParagraphsTest::testParagraphs in Entity Browser 8
Same name and namespace in other branches
- 8.2 tests/src/FunctionalJavascript/ParagraphsTest.php \Drupal\Tests\entity_browser\FunctionalJavascript\ParagraphsTest::testParagraphs()
Tests a flow of adding/removing references with paragraphs.
File
- tests/
src/ FunctionalJavascript/ ParagraphsTest.php, line 47
Class
- ParagraphsTest
- Tests entity browser integration with paragraphs.
Namespace
Drupal\Tests\entity_browser\FunctionalJavascriptCode
public function testParagraphs() {
// Create an article that we'll reference later.
$node = $this
->createNode([
'type' => 'article',
'title' => 'Hello world',
]);
$node_nested = $this
->createNode([
'type' => 'article',
'title' => 'Nested node',
]);
$node_nested_second = $this
->createNode([
'type' => 'article',
'title' => 'Nested second node',
]);
$this
->drupalGet('node/add/paragraphs_test');
// Fill in the title field.
$title = $this
->assertSession()
->fieldExists('Title');
$title
->setValue('Paragraph test');
// Create a new paragraph referencing our article.
$this
->getSession()
->getPage()
->pressButton('field_paragraph_content_embed_add_more');
$this
->waitForAjaxToFinish();
$this
->assertSession()
->linkExists('Select entities');
$this
->getSession()
->getPage()
->clickLink('Select entities');
$this
->getSession()
->switchToIFrame('entity_browser_iframe_test_nodes');
$this
->getSession()
->getPage()
->checkField('entity_browser_select[node:' . $node
->id() . ']');
$this
->getSession()
->getPage()
->pressButton('Select entities');
// Switch back to the main page.
$this
->getSession()
->switchToIFrame();
$this
->waitForAjaxToFinish();
// Create another paragraph referencing our article.
$this
->getSession()
->getPage()
->pressButton('field_paragraph_content_embed_add_more');
$this
->waitForAjaxToFinish();
$this
->assertSession()
->linkExists('Select entities');
$this
->getSession()
->getPage()
->clickLink('Select entities');
$this
->getSession()
->switchToIFrame('entity_browser_iframe_test_nodes');
$this
->getSession()
->getPage()
->checkField('entity_browser_select[node:' . $node
->id() . ']');
$this
->getSession()
->getPage()
->pressButton('Select entities');
// Switch back to the main page.
$this
->getSession()
->switchToIFrame();
$this
->waitForAjaxToFinish();
// Ensure that two paragraphs now exist.
$selector_1 = '.field--name-field-paragraph tbody tr:nth-child(1) .paragraphs-subform';
$selector_2 = str_replace('1', '2', $selector_1);
$this
->assertSession()
->elementExists('css', $selector_1);
$this
->assertSession()
->elementExists('css', $selector_2);
// Click the remove button on the second paragraph's article reference,
// and ensure that only that instance of our article is removed.
$this
->click('.field--name-field-paragraph tbody tr:nth-child(2) .paragraphs-subform [value="Remove"]');
$this
->waitForAjaxToFinish();
$this
->assertSession()
->elementTextNotContains('css', $selector_2, 'Hello world');
$this
->assertSession()
->elementTextContains('css', $selector_1, 'Hello world');
// Testing nested paragraphs field.
$this
->getSession()
->getPage()
->pressButton('field_paragraph_0_subform_field_paragraphs_nested_nested_paragraph_add_more');
$this
->waitForAjaxToFinish();
$this
->assertSession()
->linkExists('Select entities');
$this
->getSession()
->getPage()
->clickLink('Select entities');
$this
->getSession()
->switchToIFrame('entity_browser_iframe_test_nodes');
$this
->getSession()
->getPage()
->checkField('entity_browser_select[node:' . $node_nested
->id() . ']');
$this
->getSession()
->getPage()
->pressButton('Select entities');
// Switch back to the main page.
$this
->getSession()
->switchToIFrame();
$this
->waitForAjaxToFinish();
$this
->getSession()
->getPage()
->pressButton('field_paragraph_0_subform_field_paragraphs_nested_nested_paragraph_add_more');
$this
->waitForAjaxToFinish();
$this
->assertSession()
->linkExists('Select entities');
$this
->getSession()
->getPage()
->clickLink('Select entities');
$this
->getSession()
->switchToIFrame('entity_browser_iframe_test_nodes');
$this
->getSession()
->getPage()
->checkField('entity_browser_select[node:' . $node_nested_second
->id() . ']');
$this
->getSession()
->getPage()
->pressButton('Select entities');
// Switch back to the main page.
$this
->getSession()
->switchToIFrame();
$this
->waitForAjaxToFinish();
// Test editing node in nested paragraph.
$this
->assertSession()
->elementTextContains('css', '.field--name-field-paragraphs-nested tbody tr:nth-child(1) .paragraphs-subform', 'Nested node');
$this
->click('.field--name-field-paragraphs-nested tbody tr:nth-child(1) .paragraphs-subform [value="Edit"]');
$this
->waitForAjaxToFinish();
$this
->assertSession()
->elementExists('css', '.ui-dialog .node-article-edit-form .form-item-title-0-value [value="Nested node"]');
$this
->getSession()
->getPage()
->pressButton('Close');
// Submit the form.
$this
->submitForm([], 'Save');
$this
->assertSession()
->linkExists('Hello world');
$this
->assertSession()
->elementTextContains('css', '.field--name-field-paragraphs-nested', 'Nested node');
$this
->assertSession()
->elementTextContains('css', '.field--name-field-paragraphs-nested', 'Nested second node');
$parent_node = $this->container
->get('entity_type.manager')
->getStorage('node')
->loadByProperties([
'title' => 'Paragraph test',
]);
$this
->drupalGet('node/' . current($parent_node)
->id() . '/edit');
// Test removing node in nested paragraph.
$this
->click('.field--name-field-paragraphs-nested tbody tr:nth-child(1) .paragraphs-subform [value="Remove"]');
$this
->waitForAjaxToFinish();
$this
->assertSession()
->elementTextNotContains('css', '.field--name-field-paragraphs-nested tbody tr:nth-child(1) .paragraphs-subform', 'Nested node');
$this
->assertSession()
->elementTextContains('css', '.field--name-field-paragraphs-nested tbody tr:nth-child(2) .paragraphs-subform', 'Nested second node');
// Submit the form.
$this
->submitForm([], 'Save');
// Make sure the form submitted and a link to the articles are present.
$this
->assertSession()
->linkExists('Hello world');
$this
->assertSession()
->linkNotExists('Nested node');
$this
->assertSession()
->elementTextContains('css', '.field--name-field-paragraphs-nested', 'Nested second node');
}