View source
<?php
namespace Drupal\Tests\layout_builder_st\Functional;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage;
use Drupal\Tests\content_translation\Functional\ContentTranslationTestBase;
use Drupal\Core\Entity\Entity\EntityViewDisplay;
use Drupal\Core\Url;
class LayoutBuilderTranslationTest extends ContentTranslationTestBase {
use TranslationTestTrait;
protected $defaultTheme = 'stark';
public static $modules = [
'content_translation',
'contextual',
'entity_test',
'layout_builder_st',
'block',
];
protected function setUp() {
parent::setUp();
$this
->setUpViewDisplay();
$this
->setUpEntities();
}
public function testLayoutPerTranslation() {
$assert_session = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$entity_url = $this->entity
->toUrl('canonical')
->toString();
$language = \Drupal::languageManager()
->getLanguage($this->langcodes[2]);
$translated_entity_url = $this->entity
->toUrl('canonical', [
'language' => $language,
])
->toString();
$layout_url = $entity_url . '/layout';
$translated_layout_url = $translated_entity_url . '/layout';
$this
->drupalGet($entity_url);
$assert_session
->pageTextNotContains('The translated field value');
$assert_session
->pageTextContains('The untranslated field value');
$this
->drupalGet($translated_entity_url);
$assert_session
->pageTextNotContains('The untranslated field value');
$assert_session
->pageTextContains('The translated field value');
$this
->drupalGet($layout_url);
$assert_session
->pageTextNotContains('The translated field value');
$assert_session
->pageTextContains('The untranslated field value');
$this
->drupalGet($translated_layout_url);
$assert_session
->pageTextContains('Access denied');
$this
->drupalGet($layout_url);
$assert_session
->pageTextNotContains('The translated field value');
$assert_session
->pageTextContains('The untranslated field value');
$add_block_text = 'Add block';
if (version_compare(\Drupal::VERSION, '8.8.0', '<')) {
$add_block_text = ucwords($add_block_text);
}
$assert_session
->linkExists($add_block_text);
$this
->clickLink($add_block_text);
$assert_session
->linkExists('Powered by Drupal');
$this
->clickLink('Powered by Drupal');
$page
->pressButton($add_block_text);
$assert_session
->pageTextContains('Powered by Drupal');
$this
->drupalGet($translated_layout_url);
$assert_session
->pageTextContains('Access denied');
$this
->drupalGet($layout_url);
$assert_session
->pageTextContains('Powered by Drupal');
$assert_session
->buttonExists('Save layout');
$page
->pressButton('Save layout');
$this
->drupalGet($entity_url);
$assert_session
->pageTextNotContains('The translated field value');
$assert_session
->pageTextContains('The untranslated field value');
$assert_session
->pageTextContains('Powered by Drupal');
$this
->drupalGet($translated_entity_url);
$assert_session
->pageTextNotContains('The untranslated field value');
$assert_session
->pageTextContains('The translated field value');
$assert_session
->pageTextContains('Powered by Drupal');
$this
->drupalGet($translated_layout_url);
$assert_session
->pageTextNotContains('Access denied');
$assert_session
->pageTextNotContains('The untranslated field value');
$assert_session
->pageTextContains('The translated field value');
$assert_session
->pageTextContains('Powered by Drupal');
$assert_session
->buttonExists('Save layout');
$this
->assertNonTranslationActionsRemoved();
}
public function testLayoutTranslationNoOverride() {
$assert_session = $this
->assertSession();
$entity_url = $this->entity
->toUrl('canonical')
->toString();
$language = \Drupal::languageManager()
->getLanguage($this->langcodes[2]);
$translated_entity_url = $this->entity
->toUrl('canonical', [
'language' => $language,
])
->toString();
$translated_layout_url = $translated_entity_url . '/layout';
$this
->drupalGet($entity_url);
$assert_session
->pageTextNotContains('The translated field value');
$assert_session
->pageTextContains('The untranslated field value');
$this
->drupalGet($translated_entity_url);
$assert_session
->pageTextNotContains('The untranslated field value');
$assert_session
->pageTextContains('The translated field value');
$this
->drupalGet($translated_layout_url);
$assert_session
->pageTextContains('Access denied');
}
public function testTranslatableLayoutField() {
$assert_session = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$field_storage = FieldStorageConfig::loadByName('entity_test_mul', OverridesSectionStorage::FIELD_NAME);
$this
->assertNotEmpty($field_storage);
$field_storage
->setTranslatable(TRUE);
$this
->assertNotEmpty($field_storage
->save());
$field_config = FieldConfig::loadByName('entity_test_mul', 'entity_test_mul', OverridesSectionStorage::FIELD_NAME);
$this
->assertNotEmpty($field_config);
$field_config
->setTranslatable(TRUE);
$this
->assertNotEmpty($field_config
->save());
$entity_url = $this->entity
->toUrl('canonical')
->toString();
$layout_url = $entity_url . '/layout';
$language = \Drupal::languageManager()
->getLanguage($this->langcodes[2]);
$translated_entity_url = $this->entity
->toUrl('canonical', [
'language' => $language,
])
->toString();
$translated_layout_url = $translated_entity_url . '/layout';
$this
->drupalGet($entity_url);
$assert_session
->pageTextNotContains('The translated field value');
$assert_session
->pageTextContains('The untranslated field value');
$this
->drupalGet($translated_entity_url);
$assert_session
->pageTextNotContains('The untranslated field value');
$assert_session
->pageTextContains('The translated field value');
$this
->drupalGet($translated_layout_url);
$assert_session
->pageTextContains('Access denied');
$this
->drupalGet($layout_url);
$assert_session
->pageTextNotContains('The translated field value');
$assert_session
->pageTextContains('The untranslated field value');
$add_block_text = 'Add block';
if (version_compare(\Drupal::VERSION, '8.8.0', '<')) {
$add_block_text = ucwords($add_block_text);
}
$assert_session
->linkExists($add_block_text);
$this
->clickLink($add_block_text);
$assert_session
->linkExists('Powered by Drupal');
$this
->clickLink('Powered by Drupal');
$page
->pressButton($add_block_text);
$assert_session
->pageTextContains('Powered by Drupal');
$this
->drupalGet($translated_layout_url);
$assert_session
->pageTextContains('Access denied');
$this
->drupalGet($layout_url);
$assert_session
->pageTextContains('Powered by Drupal');
$assert_session
->buttonExists('Save layout');
$page
->pressButton('Save layout');
$this
->drupalGet($entity_url);
$assert_session
->pageTextContains('Powered by Drupal');
$this
->drupalGet($translated_layout_url);
$assert_session
->pageTextContains('Access denied');
$field_config = FieldConfig::loadByName('entity_test_mul', 'entity_test_mul', OverridesSectionStorage::FIELD_NAME);
$this
->assertNotEmpty($field_config);
$field_config
->setTranslatable(FALSE);
$this
->assertNotEmpty($field_config
->save());
$this
->drupalGet($translated_layout_url);
$assert_session
->pageTextNotContains('Access denied');
$assert_session
->buttonExists('Save layout');
}
protected $entity;
protected function getAdministratorPermissions() {
$permissions = parent::getAdministratorPermissions();
$permissions[] = 'administer entity_test_mul display';
return $permissions;
}
protected function getTranslatorPermissions() {
$permissions = parent::getTranslatorPermissions();
$permissions[] = 'view test entity translations';
$permissions[] = 'view test entity';
$permissions[] = 'configure any layout';
return $permissions;
}
protected function setUpEntities() {
$this
->drupalLogin($this->administrator);
$field_ui_prefix = 'entity_test_mul/structure/entity_test_mul';
$this
->drupalPostForm("{$field_ui_prefix}/display/default", [
'layout[enabled]' => TRUE,
], 'Save');
$this
->drupalPostForm("{$field_ui_prefix}/display/default", [
'layout[allow_custom]' => TRUE,
], 'Save');
$this
->drupalPlaceBlock('local_tasks_block');
$id = $this
->createEntity([
$this->fieldName => [
[
'value' => 'The untranslated field value',
],
],
], $this->langcodes[0]);
$storage = $this->container
->get('entity_type.manager')
->getStorage($this->entityTypeId);
$storage
->resetCache([
$id,
]);
$this->entity = $storage
->load($id);
$this
->drupalLogin($this->translator);
$add_translation_url = Url::fromRoute("entity.{$this->entityTypeId}.content_translation_add", [
$this->entityTypeId => $this->entity
->id(),
'source' => $this->langcodes[0],
'target' => $this->langcodes[2],
]);
$this
->drupalPostForm($add_translation_url, [
"{$this->fieldName}[0][value]" => 'The translated field value',
], 'Save');
}
protected function setUpViewDisplay() {
EntityViewDisplay::create([
'targetEntityType' => $this->entityTypeId,
'bundle' => $this->bundle,
'mode' => 'default',
'status' => TRUE,
])
->setComponent($this->fieldName, [
'type' => 'string',
])
->save();
}
}