paragraphs-8.x-1.11/modules/paragraphs_library/tests/src/FunctionalJavascript/ParagraphsLibraryItemEntityBrowserTest.php
modules/paragraphs_library/tests/src/FunctionalJavascript/ParagraphsLibraryItemEntityBrowserTest.php
<?php namespace Drupal\Tests\paragraphs_library\FunctionalJavascript; use Drupal\language\Entity\ConfigurableLanguage; use Drupal\Tests\entity_browser\FunctionalJavascript\EntityBrowserWebDriverTestBase; use Drupal\Tests\paragraphs\FunctionalJavascript\ParagraphsTestBaseTrait; /** * Tests entity browser integration with paragraphs. * * @group paragraphs_library */ class ParagraphsLibraryItemEntityBrowserTest extends EntityBrowserWebDriverTestBase { use ParagraphsTestBaseTrait; /** * {@inheritdoc} */ protected static $modules = [ 'views', 'block', 'node', 'file', 'image', 'field_ui', 'views_ui', 'system', 'node', 'paragraphs_library', 'entity_browser', 'content_translation' ]; /** * {@inheritdoc} */ protected $defaultTheme = 'starterkit_theme'; /** * Tests a flow of adding/removing references with paragraphs. */ public function testEntityBrowserWidget() { ConfigurableLanguage::createFromLangcode('de')->save(); $this->drupalPlaceBlock('local_tasks_block'); $this->drupalPlaceBlock('local_actions_block'); $this->addParagraphedContentType('paragraphed_test', 'field_paragraphs'); $admin = $this->drupalCreateUser([ 'create paragraphed_test content', 'edit any paragraphed_test content', 'administer paragraphs library', 'administer entity browsers', 'access paragraphs_library_items entity browser pages', 'administer content translation', 'translate any entity', 'create content translations', 'administer languages', ]); $this->drupalLogin($admin); // Make everything that is needed translatable. $this->drupalGet('admin/config/regional/content-language'); $this->assertSession()->fieldExists('entity_types[paragraphs_library_item]')->check(); // Open details for Content settings in Drupal 10.2. $ssummary = $this->getSession()->getPage()->find('css', '#edit-settings-paragraphs-library-item summary'); if ($ssummary) { $ssummary->click(); } $edit = [ 'settings[paragraphs_library_item][paragraphs_library_item][translatable]' => TRUE, ]; $this->submitForm($edit, 'Save configuration'); $this->addParagraphsType('text'); $this->addFieldtoParagraphType('text', 'field_text', 'text'); // Add a paragraph library item. $this->drupalGet('admin/content/paragraphs'); $this->getSession()->getPage()->clickLink('Add library item'); $element = $this->getSession()->getPage()->find('xpath', '//*[contains(@class, "dropbutton-toggle")]'); $element->click(); $button = $this->getSession()->getPage()->findButton('Add text'); $button->press(); $this->waitForAjaxToFinish(); $this->getSession()->getPage()->fillField('label[0][value]', 'test_library_item'); $this->getSession()->getPage()->fillField('paragraphs[0][subform][field_text][0][value]', 'reusable_text'); $this->submitForm([], 'Save'); // Add a node with a paragraph from library. $this->drupalGet('node/add'); $title = $this->assertSession()->fieldExists('Title'); $title->setValue('Paragraph test'); $this->getSession()->getPage()->pressButton('field_paragraphs_from_library_add_more'); $this->waitForAjaxToFinish(); $this->getSession()->getPage()->pressButton('Select reusable paragraph'); $this->waitForAjaxToFinish(); $this->getSession()->switchToIFrame('entity_browser_iframe_paragraphs_library_items'); $style_selector = $this->getSession()->getPage()->find('css', 'input[value="paragraphs_library_item:1"].form-radio'); $style_selector->click(); $this->assertSession()->buttonExists('Select reusable paragraph')->press(); $this->getSession()->switchToIFrame(); $this->waitForAjaxToFinish(); $this->submitForm([], 'Save'); // Check that the paragraph was correctly reused. $this->assertSession()->pageTextContains('reusable_text'); // Translate the library item. $this->drupalGet('admin/content/paragraphs'); $this->clickLink('test_library_item'); $this->clickLink('Translate'); $this->clickLink('Add'); $edit = [ 'label[0][value]' => 'DE Title', 'paragraphs[0][subform][field_text][0][value]' => 'DE Library text', ]; $this->submitForm($edit, 'Save'); $this->assertSession()->pageTextContains('Paragraph DE Title has been updated.'); // Add a node with a paragraph from library. $this->drupalGet('node/add'); $title = $this->assertSession()->fieldExists('Title'); $title->setValue('Paragraph test'); $this->getSession()->getPage()->pressButton('field_paragraphs_from_library_add_more'); $this->waitForAjaxToFinish(); $this->getSession()->getPage()->pressButton('Select reusable paragraph'); $this->waitForAjaxToFinish(); $this->getSession()->switchToIFrame('entity_browser_iframe_paragraphs_library_items'); // Check that there is only one translation of the paragraph listed. $rows = $this->xpath('//*[@id="entity-browser-paragraphs-library-items-form"]/div[1]/div[2]/table/tbody/tr'); $this->assertCount(1, $rows); // Add a text paragraph in a new library item. $this->drupalGet('admin/content/paragraphs/add/default'); $element = $this->getSession()->getPage()->find('xpath', '//*[contains(@class, "dropbutton-toggle")]'); $element->click(); $button = $this->getSession()->getPage()->findButton('Add text'); $button->press(); $this->waitForAjaxToFinish(); $this->getSession()->getPage()->fillField('label[0][value]', 'Inner library item'); $this->getSession()->getPage()->fillField('paragraphs[0][subform][field_text][0][value]', 'This is a reusable text.'); $this->submitForm([], 'Save'); // Add a library item inside a library item. $this->drupalGet('admin/content/paragraphs/add/default'); $this->getSession()->getPage()->fillField('label[0][value]', 'Outside library item'); $button = $this->getSession()->getPage()->findButton('Add From library'); $button->press(); $this->waitForAjaxToFinish(); $this->getSession()->getPage()->pressButton('Select reusable paragraph'); $this->waitForAjaxToFinish(); $this->getSession()->switchToIFrame('entity_browser_iframe_paragraphs_library_items'); $style_selector = $this->getSession()->getPage()->find('css', 'input[value="paragraphs_library_item:2"].form-radio'); $style_selector->click(); $this->assertSession()->buttonExists('Select reusable paragraph')->press(); $this->getSession()->switchToIFrame(); $this->waitForAjaxToFinish(); // Edit the inside library item after adding it. $this->getSession()->getPage()->pressButton('Edit'); $this->waitForAjaxToFinish(); $this->assertSession()->fieldExists('paragraphs[0][subform][field_text][0][value]'); $this->getSession()->getPage()->fillField('paragraphs[0][subform][field_text][0][value]', 'This is a reusable text UPDATED.'); $save_button = $this->assertSession()->elementExists('css', '.ui-dialog .ui-dialog-buttonset button'); $save_button->press(); $this->waitForAjaxToFinish(); $this->assertSession()->elementContains('css', '.paragraphs-collapsed-description .paragraphs-content-wrapper', 'This is a reusable text UPDATED.'); $this->submitForm([], 'Save'); // Edit the outside library item. $this->getSession()->getPage()->clickLink('Outside library item'); $this->getSession()->getPage()->clickLink('Edit'); $this->assertSession()->elementContains('css', '.paragraphs-collapsed-description .paragraphs-content-wrapper', 'This is a reusable text UPDATED.'); // Edit the inner library item and assert the fields and values. $this->getSession()->getPage()->pressButton('Edit'); $this->waitForAjaxToFinish(); $this->assertSession()->fieldExists('paragraphs[0][subform][field_text][0][value]'); // Add a node with the outside library item. $this->drupalGet('node/add'); $title = $this->assertSession()->fieldExists('Title'); $title->setValue('Overlay node'); $this->getSession()->getPage()->pressButton('Add From library'); $this->waitForAjaxToFinish(); $this->getSession()->getPage()->pressButton('Select reusable paragraph'); $this->waitForAjaxToFinish(); $this->getSession()->switchToIFrame('entity_browser_iframe_paragraphs_library_items'); $style_selector = $this->getSession()->getPage()->find('css', 'input[value="paragraphs_library_item:3"].form-radio'); $this->assertTrue($style_selector->isVisible()); $style_selector->click(); $this->assertSession()->buttonExists('Select reusable paragraph')->press(); $this->getSession()->switchToIFrame(); $this->waitForAjaxToFinish(); $this->assertSession()->elementContains('css', '.paragraphs-collapsed-description .paragraphs-content-wrapper', 'Inner library item'); $this->submitForm([], 'Save'); $this->assertSession()->pageTextContains('paragraphed_test Overlay node has been created.'); // Edit the node. $node = $this->getNodeByTitle('Overlay node'); $this->drupalGet('node/' . $node->id() . '/edit'); // Edit the Outside library item. $this->getSession()->getPage()->pressButton('Edit'); $this->waitForAjaxToFinish(); // Edit the inner library item and assert its fields. $modal_form = $this->getSession()->getPage()->find('css', '.ui-dialog .paragraphs-library-item-form'); $save_button = $modal_form->find('css', '.edit-button'); $save_button->press(); $this->waitForAjaxToFinish(); $this->assertSession()->fieldExists('paragraphs[0][subform][field_text][0][value]'); } }