Tests paragraphs library multilingual functionality.
@package Drupal\paragraphs_library\Tests @group paragraphs_library
Expanded class hierarchy of MultilingualBehaviorTest
class MultilingualBehaviorTest extends ParagraphsTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'language',
'content_translation',
'paragraphs_library',
];
/**
* {@inheritdoc}
*/
public function setUp() : void {
parent::setUp();
$this
->addParagraphedContentType('paragraphed_test');
$this
->addParagraphsType('test_content');
$this
->addParagraphsType('nested_paragraph');
$user = $this
->createUser(array_merge($this->admin_permissions, [
'create paragraphed_test content',
'edit any paragraphed_test content',
'administer paragraphs library',
'administer languages',
'administer content translation',
'create content translations',
'translate any entity',
]));
$this
->drupalLogin($user);
ConfigurableLanguage::createFromLangcode('de')
->save();
// Enable translation for paragraphed_test content.
$edit = [
'language_configuration[content_translation]' => TRUE,
];
$this
->drupalGet('admin/structure/types/manage/paragraphed_test');
$this
->submitForm($edit, 'Save');
$this
->fieldUIAddNewField('admin/structure/paragraphs_type/test_content', 'paragraphs_text', 'Test content', 'text_long', [], []);
// Add nested paragraph field.
$this
->fieldUIAddNewField('admin/structure/paragraphs_type/nested_paragraph', 'err_field', 'Nested', 'field_ui:entity_reference_revisions:paragraph', [
'settings[target_type]' => 'paragraph',
'cardinality' => '-1',
], []);
// Enable translation for paragraphs_content, paragraph type
// and paragraphs_library_item.
$edit = [
'entity_types[paragraph]' => TRUE,
'entity_types[paragraphs_library_item]' => TRUE,
'settings[node][paragraphed_test][fields][field_paragraphs]' => FALSE,
'settings[paragraph][test_content][translatable]' => TRUE,
'settings[paragraph][nested_paragraph][translatable]' => TRUE,
'settings[paragraph][test_content][fields][field_paragraphs_text]' => TRUE,
'settings[paragraphs_library_item][paragraphs_library_item][translatable]' => TRUE,
];
$this
->drupalGet('admin/config/regional/content-language');
$this
->submitForm($edit, 'Save configuration');
}
/**
* Tests reusing translated nested paragraph from library.
*/
public function testReuseTranslationForNestedParagraphFromLibrary() {
// Add nested paragraph directly in library.
$this
->drupalGet('admin/content/paragraphs/add/default');
$this
->submitForm([], 'paragraphs_nested_paragraph_add_more');
$this
->submitForm([], 'paragraphs_0_subform_field_err_field_test_content_add_more');
$edit = [
'label[0][value]' => 'En label Test nested paragraph',
'paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'En label Example text for test in nested paragraph.',
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->pageTextContains('Paragraph En label Test nested paragraph has been created.');
// Translate nested paragraphs library item.
$this
->clickLink('Translate');
$this
->clickLink('Add');
$edit = [
'label[0][value]' => 'De label Test geschachtelten Absatz',
'paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'De label Beispieltext fur den Test in geschachteltem Absatz.',
];
$this
->submitForm($edit, 'Save');
// Create test content.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_from_library_add_more');
$edit = [
'title[0][value]' => 'En label Test node nested',
'field_paragraphs[0][subform][field_reusable_paragraph][0][target_id]' => 'En label Test nested paragraph',
];
$this
->submitForm($edit, 'Save');
// Add translation for test node.
$node = $this
->drupalGetNodeByTitle('En label Test node nested');
$edit = [
'title[0][value]' => 'De label Test geschachtelten Absatz',
];
$this
->drupalGet('de/node/' . $node
->id() . '/translations/add/en/de');
$this
->submitForm($edit, 'Save (this translation)');
$this
->drupalGet('node/' . $node
->id());
$this
->assertSession()
->pageTextContains('En label Example text for test in nested paragraph.');
$this
->drupalGet('de/node/' . $node
->id());
$this
->assertSession()
->pageTextContains('De label Beispieltext fur den Test in geschachteltem Absatz.');
// Update translation of library item.
$edit = [
'paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'De label Beispieltext fur den Test geander.',
];
$this
->drupalGet('de/admin/content/paragraphs/1/edit');
$this
->submitForm($edit, 'Save');
// Check updated content.
$this
->drupalGet('de/node/' . $node
->id());
$this
->assertSession()
->pageTextContains('De label Beispieltext fur den Test geander.');
}
/**
* Tests converting translated nested paragraph into library.
*/
public function testMoveTranslatedNestedParagraphToLibrary() {
$this
->enableConvertingParagraphsTypeToLibrary('nested_paragraph');
// Add node with text paragraph.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_nested_paragraph_add_more');
$this
->submitForm([], 'field_paragraphs_0_subform_field_err_field_test_content_add_more');
$edit = [
'title[0][value]' => 'En label Test node nested',
'field_paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'En label Example text for test in nested paragraph',
];
$this
->submitForm($edit, 'Save');
// Add translation for node.
$node = $this
->drupalGetNodeByTitle('En label Test node nested');
$this
->drupalGet('node/' . $node
->id() . '/translations');
$this
->clickLink('Add');
$edit = [
'title[0][value]' => 'Testknoten',
'field_paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'De label Beispieltext fur den Test in geschachteltem Absatz.',
];
$this
->submitForm($edit, 'Save (this translation)');
// Convert translated paragraph to library.
$this
->drupalGet($node
->toUrl('edit-form'));
$this
->submitForm([], 'field_paragraphs_0_promote_to_library');
$this
->submitForm([], 'Save (this translation)');
// Check translation.
$this
->drupalGet($node
->toUrl());
$this
->assertSession()
->pageTextContains('En label Example text for test in nested paragraph');
$this
->drupalGet('de/node/' . $node
->id());
$this
->assertSession()
->pageTextContains('De label Beispieltext fur den Test in geschachteltem Absatz.');
// Check library item after converting translated paragraph.
$this
->drupalGet('de/admin/content/paragraphs/1');
$this
->assertSession()
->pageTextContains('De label Beispieltext fur den Test in geschachteltem Absatz.');
}
/**
* Tests converting moderated translated nested paragraph into library.
*/
public function testMoveModeratedTranslatedNestedParagraphToLibrary() {
$this->container
->get('module_installer')
->install([
'content_moderation',
]);
$this
->createEditorialWorkflow('paragraphed_test');
$this
->loginAsAdmin([
'access administration pages',
'view any unpublished content',
'view all revisions',
'revert all revisions',
'view latest version',
'view any unpublished content',
'use ' . $this->workflow
->id() . ' transition create_new_draft',
'use ' . $this->workflow
->id() . ' transition publish',
'use ' . $this->workflow
->id() . ' transition archived_published',
'use ' . $this->workflow
->id() . ' transition archived_draft',
'use ' . $this->workflow
->id() . ' transition archive',
'administer nodes',
'bypass node access',
'administer content translation',
'translate any entity',
'create content translations',
'administer languages',
'administer content types',
'administer node form display',
'edit any paragraphed_test content',
'create paragraphed_test content',
'edit behavior plugin settings',
'administer paragraphs library',
'administer workflows',
]);
$this
->drupalGet('admin/config/workflow/workflows/manage/' . $this->workflow
->id() . '/type/paragraphs_library_item');
$edit = [
'bundles[paragraphs_library_item]' => 1,
];
$this
->submitForm($edit, 'Save');
$this
->enableConvertingParagraphsTypeToLibrary('nested_paragraph');
// Add node with text paragraph.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_nested_paragraph_add_more');
$this
->submitForm([], 'field_paragraphs_0_subform_field_err_field_test_content_add_more');
$edit = [
'title[0][value]' => 'En label Test node nested',
'field_paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'En label Example text for test in nested paragraph',
'moderation_state[0][state]' => 'published',
];
$this
->submitForm($edit, 'Save');
// Add translation for node.
$node = $this
->drupalGetNodeByTitle('En label Test node nested');
$this
->drupalGet('node/' . $node
->id() . '/translations');
$this
->clickLink('Add');
$edit = [
'title[0][value]' => 'Testknoten',
'field_paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'De label Beispieltext fur den Test in geschachteltem Absatz.',
];
$this
->submitForm($edit, 'Save (this translation)');
// Convert translated paragraph to library.
$this
->drupalGet($node
->toUrl('edit-form'));
$this
->submitForm([], 'field_paragraphs_0_promote_to_library');
$this
->submitForm([], 'Save (this translation)');
// Visible to admins.
$this
->drupalGet($node
->toUrl());
$this
->assertSession()
->pageTextContains('En label Example text for test in nested paragraph');
$this
->drupalGet('de/node/' . $node
->id());
$this
->assertSession()
->pageTextContains('De label Beispieltext fur den Test in geschachteltem Absatz.');
// And to anonymous users as well.
$this
->drupalLogout();
$this
->drupalGet('de/node/' . $node
->id());
$this
->assertSession()
->pageTextContains('De label Beispieltext fur den Test in geschachteltem Absatz.');
}
/**
* Tests converting translated nested paragraph from library.
*/
public function testDetachTranslatedNestedParagraphItemFromLibrary() {
$this
->enableConvertingParagraphsTypeToLibrary('nested_paragraph');
// Add paragraph directly in library.
$this
->drupalGet('admin/content/paragraphs/add/default');
$this
->submitForm([], 'paragraphs_nested_paragraph_add_more');
$this
->submitForm([], 'paragraphs_0_subform_field_err_field_test_content_add_more');
$edit = [
'label[0][value]' => 'En label Test nested paragraph',
'paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'En label Example text for test.',
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->pageTextContains('Paragraph En label Test nested paragraph has been created.');
// Translate nested paragraphs library item.
$this
->clickLink('Translate');
$this
->clickLink('Add');
$edit = [
'label[0][value]' => 'De label Test geschachtelten Absatz',
'paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'De label Beispieltext fur den Test in geschachteltem Absatz.',
];
$this
->submitForm($edit, 'Save');
// Create test content.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_from_library_add_more');
$edit = [
'title[0][value]' => 'En label Test node nested',
'field_paragraphs[0][subform][field_reusable_paragraph][0][target_id]' => 'En label Test nested paragraph',
];
$this
->submitForm($edit, 'Save');
// Add translation for test node.
$node = $this
->drupalGetNodeByTitle('En label Test node nested');
$edit = [
'title[0][value]' => 'De label Testknoten',
];
$this
->drupalGet('de/node/' . $node
->id() . '/translations/add/en/de');
$this
->submitForm($edit, 'Save (this translation)');
$this
->assertSession()
->pageTextContains('De label Beispieltext fur den Test in geschachteltem Absatz.');
// The detach action is not visible while translating.
$this
->clickLink('Edit');
$this
->assertSession()
->pageTextNotContains('Unlink from library');
// Detach from library an check content.
$this
->drupalGet('node/' . $node
->id());
$this
->assertSession()
->pageTextContains('En label Example text for test.');
$this
->clickLink('Edit');
$this
->submitForm([], 'field_paragraphs_0_unlink_from_library');
$this
->assertSession()
->pageTextContains('En label Example text for test.');
}
/**
* Tests detach paragraph before adding a translation for the node.
*/
public function testDetachBeforeTranslation() {
$this
->enableConvertingParagraphsTypeToLibrary('nested_paragraph');
// Add paragraph directly in library.
$this
->drupalGet('admin/content/paragraphs/add/default');
$this
->submitForm([], 'paragraphs_nested_paragraph_add_more');
$this
->submitForm([], 'paragraphs_0_subform_field_err_field_test_content_add_more');
$edit = [
'label[0][value]' => 'En label Test nested paragraph',
'paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'En label Example text for test.',
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->pageTextContains('Paragraph En label Test nested paragraph has been created.');
// Translate nested paragraphs library item.
$this
->clickLink('Translate');
$this
->clickLink('Add');
$edit = [
'label[0][value]' => 'De label Test geschachtelten Absatz',
'paragraphs[0][subform][field_err_field][0][subform][field_paragraphs_text][0][value]' => 'De label Beispieltext fur den Test in geschachteltem Absatz.',
];
$this
->submitForm($edit, 'Save');
// Create test content.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_from_library_add_more');
$edit = [
'title[0][value]' => 'En label Test node nested',
'field_paragraphs[0][subform][field_reusable_paragraph][0][target_id]' => 'En label Test nested paragraph',
];
$this
->submitForm($edit, 'field_paragraphs_0_unlink_from_library');
$edit = [
'title[0][value]' => 'En label Test node nested',
];
$this
->submitForm($edit, 'Save');
// Add translation for test node.
$node = $this
->drupalGetNodeByTitle('En label Test node nested');
$this
->drupalGet('de/node/' . $node
->id() . '/translations/add/en/de');
$this
->submitForm([], 'Save (this translation)');
$this
->assertSession()
->pageTextContains('De label Beispieltext fur den Test in geschachteltem Absatz.');
$this
->drupalGet('node/' . $node
->id());
$this
->assertSession()
->pageTextContains('En label Example text for test.');
}
/**
* Enables converting paragraphs type into library.
*
* @param string $paragraphs_type
* Paragraphs type name.
*
* @throws \Exception
* Throws Exception if ajax path is not specified.
*/
public function enableConvertingParagraphsTypeToLibrary($paragraphs_type) {
$edit = [
'allow_library_conversion' => 1,
];
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraphs_type);
$this
->submitForm($edit, 'Save');
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
MultilingualBehaviorTest:: |
protected static | property |
Modules to enable. Overrides ParagraphsTestBase:: |
|
MultilingualBehaviorTest:: |
public | function | Enables converting paragraphs type into library. | |
MultilingualBehaviorTest:: |
public | function |
Overrides ParagraphsTestBase:: |
|
MultilingualBehaviorTest:: |
public | function | Tests detach paragraph before adding a translation for the node. | |
MultilingualBehaviorTest:: |
public | function | Tests converting translated nested paragraph from library. | |
MultilingualBehaviorTest:: |
public | function | Tests converting moderated translated nested paragraph into library. | |
MultilingualBehaviorTest:: |
public | function | Tests converting translated nested paragraph into library. | |
MultilingualBehaviorTest:: |
public | function | Tests reusing translated nested paragraph from library. | |
ParagraphsTestBase:: |
protected | property | List of permissions used by loginAsAdmin(). | |
ParagraphsTestBase:: |
protected | property | Drupal user object created by loginAsAdmin(). | 1 |
ParagraphsTestBase:: |
protected | property | 2 | |
ParagraphsTestBase:: |
function | Creates an user with admin permissions and log in. | ||
ParagraphsTestBase:: |
protected | function |
Removes the default paragraph type. Overrides ParagraphsTestBase:: |
|
ParagraphsTestBase:: |
protected | function |
Sets the Paragraphs widget add mode. Overrides ParagraphsTestBase:: |
|
ParagraphsTestBase:: |
protected | function | Sets the allowed Paragraphs types that can be added. | |
ParagraphsTestBase:: |
protected | function | Sets the default paragraph type. | |
ParagraphsTestBase:: |
protected | function | Sets the weight of a given Paragraphs type. | |
ParagraphsTestBase:: |
protected | function | Sets the Paragraphs widget display mode. | |
ParagraphsTestBaseTrait:: |
protected | property | The workflow entity. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds a field to a given paragraph type. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds a content type with a Paragraphs field. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds a Paragraphs field to a given entity type. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds a Paragraphs type. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds an icon to a paragraphs type. | |
ParagraphsTestBaseTrait:: |
protected | function | Checks the core version. | |
ParagraphsTestBaseTrait:: |
protected | function | Creates a workflow entity. | |
ParagraphsTestBaseTrait:: |
protected | function | Sets some of the settings of a paragraphs field widget. |