You are here

public function ConfigTranslationUiTest::testSourceValueDuplicateSave in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php \Drupal\Tests\config_translation\Functional\ConfigTranslationUiTest::testSourceValueDuplicateSave()
  2. 9 core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php \Drupal\Tests\config_translation\Functional\ConfigTranslationUiTest::testSourceValueDuplicateSave()

Tests the site information translation interface.

File

core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php, line 236

Class

ConfigTranslationUiTest
Translate settings and entities to various languages.

Namespace

Drupal\Tests\config_translation\Functional

Code

public function testSourceValueDuplicateSave() {
  $this
    ->drupalLogin($this->adminUser);
  $site_name = 'Site name for testing configuration translation';
  $site_slogan = 'Site slogan for testing configuration translation';
  $translation_base_url = 'admin/config/system/site-information/translate';
  $this
    ->setSiteInformation($site_name, $site_slogan);
  $this
    ->drupalGet($translation_base_url);

  // Case 1: Update new value for site slogan and site name.
  $edit = [
    'translation[config_names][system.site][name]' => 'FR ' . $site_name,
    'translation[config_names][system.site][slogan]' => 'FR ' . $site_slogan,
  ];

  // First time, no overrides, so just Add link.
  $this
    ->drupalGet("{$translation_base_url}/fr/add");
  $this
    ->submitForm($edit, 'Save translation');

  // Read overridden file from active config.
  $override = \Drupal::languageManager()
    ->getLanguageConfigOverride('fr', 'system.site');

  // Expect both name and slogan in language specific file.
  $expected = [
    'name' => 'FR ' . $site_name,
    'slogan' => 'FR ' . $site_slogan,
  ];
  $this
    ->assertEquals($expected, $override
    ->get());

  // Case 2: Update new value for site slogan and default value for site name.
  $this
    ->drupalGet("{$translation_base_url}/fr/edit");

  // Assert that the language configuration does not leak outside of the
  // translation form into the actual site name and slogan.
  $this
    ->assertSession()
    ->pageTextNotContains('FR ' . $site_name);
  $this
    ->assertSession()
    ->pageTextNotContains('FR ' . $site_slogan);
  $edit = [
    'translation[config_names][system.site][name]' => $site_name,
    'translation[config_names][system.site][slogan]' => 'FR ' . $site_slogan,
  ];
  $this
    ->submitForm($edit, 'Save translation');
  $this
    ->assertSession()
    ->pageTextContains('Successfully updated French translation.');
  $override = \Drupal::languageManager()
    ->getLanguageConfigOverride('fr', 'system.site');

  // Expect only slogan in language specific file.
  $expected = 'FR ' . $site_slogan;
  $this
    ->assertEquals($expected, $override
    ->get('slogan'));

  // Case 3: Keep default value for site name and slogan.
  $this
    ->drupalGet("{$translation_base_url}/fr/edit");
  $this
    ->assertSession()
    ->pageTextNotContains('FR ' . $site_slogan);
  $edit = [
    'translation[config_names][system.site][name]' => $site_name,
    'translation[config_names][system.site][slogan]' => $site_slogan,
  ];
  $this
    ->submitForm($edit, 'Save translation');
  $override = \Drupal::languageManager()
    ->getLanguageConfigOverride('fr', 'system.site');

  // Expect no language specific file.
  $this
    ->assertTrue($override
    ->isNew());

  // Check configuration page with translator user. Should have no access.
  $this
    ->drupalLogout();
  $this
    ->drupalLogin($this->translatorUser);
  $this
    ->drupalGet('admin/config/system/site-information');
  $this
    ->assertSession()
    ->statusCodeEquals(403);

  // While translator can access the translation page, the edit link is not
  // present due to lack of permissions.
  $this
    ->drupalGet($translation_base_url);
  $this
    ->assertSession()
    ->linkNotExists('Edit');

  // Check 'Add' link for French.
  $this
    ->assertSession()
    ->linkByHrefExists("{$translation_base_url}/fr/add");
}