ConfigTranslationListUiTest.php

Same filename in this branch
  1. main core/modules/contact/tests/src/Functional/ConfigTranslationListUiTest.php
  2. main core/modules/shortcut/tests/src/Functional/ConfigTranslationListUiTest.php
Same filename and directory in other branches
  1. 11.x core/modules/config_translation/tests/src/Functional/ConfigTranslationListUiTest.php
  2. 10 core/modules/config_translation/tests/src/Functional/ConfigTranslationListUiTest.php
  3. 9 core/modules/config_translation/tests/src/Functional/ConfigTranslationListUiTest.php
  4. 8.9.x core/modules/config_translation/tests/src/Functional/ConfigTranslationListUiTest.php
  5. 11.x core/modules/contact/tests/src/Functional/ConfigTranslationListUiTest.php
  6. 11.x core/modules/shortcut/tests/src/Functional/ConfigTranslationListUiTest.php

Namespace

Drupal\Tests\config_translation\Functional

File

core/modules/config_translation/tests/src/Functional/ConfigTranslationListUiTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\config_translation\Functional;

use Drupal\block_content\Entity\BlockContentType;
use Drupal\filter\Entity\FilterFormat;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\taxonomy\Entity\Vocabulary;
use Drupal\Tests\block_content\Traits\BlockContentCreationTrait;
use Drupal\Tests\BrowserTestBase;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;

/**
 * Visit all lists.
 *
 * @see \Drupal\Tests\config_translation\Functional\ConfigTranslationViewListUiTest
 */
class ConfigTranslationListUiTest extends BrowserTestBase {
  use BlockContentCreationTrait;
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'block',
    'config_translation',
    'block_content',
    'field',
    'field_ui',
    'menu_ui',
    'node',
    'taxonomy',
    'image',
    'responsive_image',
    'toolbar',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  
  /**
   * Admin user with all needed permissions.
   *
   * @var \Drupal\user\Entity\User
   */
  protected $adminUser;
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $permissions = [
      'administer blocks',
      'administer block content',
      'administer block types',
      'access block library',
      'administer content types',
      'administer block_content fields',
      'administer filters',
      'administer menu',
      'administer node fields',
      'administer permissions',
      'administer site configuration',
      'administer taxonomy',
      'administer account settings',
      'administer languages',
      'administer image styles',
      'administer responsive images',
      'translate configuration',
    ];
    // Create and log in user.
    $this->adminUser = $this->drupalCreateUser($permissions);
    $this->drupalLogin($this->adminUser);
    // Enable import of translations. By default this is disabled for automated
    // tests.
    $this->config('locale.settings')
      ->set('translation.import_enabled', TRUE)
      ->set('translation.use_source', LOCALE_TRANSLATION_USE_SOURCE_LOCAL)
      ->save();
    $this->drupalPlaceBlock('local_tasks_block');
  }
  
  /**
   * Tests the block listing for the translate operation.
   *
   * There are no blocks placed in the testing profile. Add one, then check
   * for Translate operation.
   */
  protected function doBlockListTest() : void {
    // Add a test block, any block will do.
    // Set the machine name so the translate link can be built later.
    $id = $this->randomMachineName(16);
    $this->drupalPlaceBlock('system_powered_by_block', [
      'id' => $id,
    ]);
    // Get the Block listing.
    $this->drupalGet('admin/structure/block');
    $translate_link = 'admin/structure/block/manage/' . $id . '/translate';
    // Test if the link to translate the block is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the menu listing for the translate operation.
   */
  protected function doMenuListTest() : void {
    // Create a test menu to decouple looking for translate operations link so
    // this does not test more than necessary.
    $this->drupalGet('admin/structure/menu/add');
    // Lowercase the machine name.
    $menu_name = $this->randomMachineName(16);
    $label = $this->randomMachineName(16);
    $edit = [
      'id' => $menu_name,
      'description' => '',
      'label' => $label,
    ];
    // Create the menu by posting the form.
    $this->drupalGet('admin/structure/menu/add');
    $this->submitForm($edit, 'Save');
    // Get the Menu listing.
    $this->drupalGet('admin/structure/menu');
    $translate_link = 'admin/structure/menu/manage/' . $menu_name . '/translate';
    // Test if the link to translate the menu is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Check if the Link is not added if you are missing 'translate
    // configuration' permission.
    $permissions = [
      'administer menu',
    ];
    $this->drupalLogin($this->drupalCreateUser($permissions));
    // Get the Menu listing.
    $this->drupalGet('admin/structure/menu');
    $translate_link = 'admin/structure/menu/manage/' . $menu_name . '/translate';
    // Test if the link to translate the menu is NOT on the page.
    $this->assertSession()
      ->linkByHrefNotExists($translate_link);
    // Log in as Admin again otherwise the rest will fail.
    $this->drupalLogin($this->adminUser);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the vocabulary listing for the translate operation.
   */
  protected function doVocabularyListTest() : void {
    // Create a test vocabulary to decouple looking for translate operations
    // link so this does not test more than necessary.
    $vocabulary = Vocabulary::create([
      'name' => $this->randomMachineName(),
      'description' => $this->randomMachineName(),
      'vid' => $this->randomMachineName(),
    ]);
    $vocabulary->save();
    // Get the Taxonomy listing.
    $this->drupalGet('admin/structure/taxonomy');
    $translate_link = 'admin/structure/taxonomy/manage/' . $vocabulary->id() . '/translate';
    // Test if the link to translate the vocabulary is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
    // Test if the local task for translation is on this page.
    $this->assertSession()
      ->linkExists('Translate taxonomy vocabulary');
    $local_task_url = parse_url($this->getSession()
      ->getPage()
      ->findLink('Translate taxonomy vocabulary')
      ->getAttribute('href'));
    $this->assertSame(base_path() . $translate_link, $local_task_url['path']);
  }
  
  /**
   * Tests the content block listing for the translate operation.
   */
  public function doCustomContentTypeListTest() : void {
    // Create a test block type to decouple looking for translate
    // operations link so this does not test more than necessary.
    $block_content_type = BlockContentType::create([
      'id' => $this->randomMachineName(16),
      'label' => $this->randomMachineName(),
      'revision' => FALSE,
    ]);
    $block_content_type->save();
    // Get the block type listing.
    $this->drupalGet('admin/structure/block-content');
    $translate_link = 'admin/structure/block-content/manage/' . $block_content_type->id() . '/translate';
    // Test if the link to translate the block type is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the content type listing for the translate operation.
   */
  public function doContentTypeListTest() : void {
    // Create a test content type to decouple looking for translate operations
    // link so this does not test more than necessary.
    $content_type = $this->drupalCreateContentType([
      'type' => $this->randomMachineName(16),
      'name' => $this->randomMachineName(),
    ]);
    // Get the content type listing.
    $this->drupalGet('admin/structure/types');
    $translate_link = 'admin/structure/types/manage/' . $content_type->id() . '/translate';
    // Test if the link to translate the content type is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the formats listing for the translate operation.
   */
  public function doFormatsListTest() : void {
    // Create a test format to decouple looking for translate operations
    // link so this does not test more than necessary.
    $filter_format = FilterFormat::create([
      'format' => $this->randomMachineName(16),
      'name' => $this->randomMachineName(),
    ]);
    $filter_format->save();
    // Get the format listing.
    $this->drupalGet('admin/config/content/formats');
    $translate_link = 'admin/config/content/formats/manage/' . $filter_format->id() . '/translate';
    // Test if the link to translate the format is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the role listing for the translate operation.
   */
  public function doUserRoleListTest() : void {
    // Create a test role to decouple looking for translate operations
    // link so this does not test more than necessary.
    $role_id = $this->randomMachineName(16);
    $this->drupalCreateRole([], $role_id);
    // Get the role listing.
    $this->drupalGet('admin/people/roles');
    $translate_link = 'admin/people/roles/manage/' . $role_id . '/translate';
    // Test if the link to translate the role is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the language listing for the translate operation.
   */
  public function doLanguageListTest() : void {
    // Create a test language to decouple looking for translate operations
    // link so this does not test more than necessary.
    ConfigurableLanguage::createFromLangcode('ga')->save();
    // Get the language listing.
    $this->drupalGet('admin/config/regional/language');
    $translate_link = 'admin/config/regional/language/edit/ga/translate';
    // Test if the link to translate the language is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the image style listing for the translate operation.
   */
  public function doImageStyleListTest() : void {
    // Get the image style listing.
    $this->drupalGet('admin/config/media/image-styles');
    $translate_link = 'admin/config/media/image-styles/manage/medium/translate';
    // Test if the link to translate the style is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the responsive image mapping listing for the translate operation.
   */
  public function doResponsiveImageListTest() : void {
    $edit = [];
    $edit['label'] = $this->randomMachineName();
    $edit['id'] = strtolower($edit['label']);
    $edit['fallback_image_style'] = 'thumbnail';
    $this->drupalGet('admin/config/media/responsive-image-style/add');
    $this->submitForm($edit, 'Save');
    $this->assertSession()
      ->pageTextContains("Responsive image style {$edit['label']} saved.");
    // Get the responsive image style listing.
    $this->drupalGet('admin/config/media/responsive-image-style');
    $translate_link = 'admin/config/media/responsive-image-style/' . $edit['id'] . '/translate';
    // Test if the link to translate the style is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests the field listing for the translate operation.
   */
  public function doFieldListTest() : void {
    // Create a base content type.
    $content_type = $this->drupalCreateContentType([
      'type' => $this->randomMachineName(16),
      'name' => $this->randomMachineName(),
    ]);
    // Create a block content type.
    $this->createBlockContentType([
      'id' => 'basic',
      'label' => 'Basic',
      'revision' => FALSE,
    ], TRUE);
    // Look at a few fields on a few entity types.
    $pages = [
      [
        'list' => 'admin/structure/types/manage/' . $content_type->id() . '/fields',
        'field' => 'node.' . $content_type->id() . '.body',
      ],
      [
        'list' => 'admin/structure/block-content/manage/basic/fields',
        'field' => 'block_content.basic.body',
      ],
    ];
    foreach ($pages as $values) {
      // Get fields listing.
      $this->drupalGet($values['list']);
      $translate_link = $values['list'] . '/' . $values['field'] . '/translate';
      // Test if the link to translate the field is on the page.
      $this->assertSession()
        ->linkByHrefExists($translate_link);
      // Test if the link to translate actually goes to the translate page.
      $this->drupalGet($translate_link);
      $this->assertSession()
        ->responseContains('<th>Language</th>');
    }
  }
  
  /**
   * Tests the date format listing for the translate operation.
   */
  public function doDateFormatListTest() : void {
    // Get the date format listing.
    $this->drupalGet('admin/config/regional/date-time');
    $translate_link = 'admin/config/regional/date-time/formats/manage/long/translate';
    // Test if the link to translate the format is on the page.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests a given settings page for the translate operation.
   *
   * @param string $link
   *   URL of the settings page to test.
   */
  public function doSettingsPageTest($link) : void {
    // Get the settings page.
    $this->drupalGet($link);
    $translate_link = $link . '/translate';
    // Test if the link to translate the settings page is present.
    $this->assertSession()
      ->linkByHrefExists($translate_link);
    // Test if the link to translate actually goes to the translate page.
    $this->drupalGet($translate_link);
    $this->assertSession()
      ->responseContains('<th>Language</th>');
  }
  
  /**
   * Tests if translate link is added to operations in all configuration lists.
   */
  public function testTranslateOperationInListUi() : void {
    // All lists based on paths provided by the module.
    $this->doBlockListTest();
    $this->doMenuListTest();
    $this->doVocabularyListTest();
    $this->doCustomContentTypeListTest();
    $this->doContentTypeListTest();
    $this->doFormatsListTest();
    $this->doUserRoleListTest();
    $this->doLanguageListTest();
    $this->doImageStyleListTest();
    $this->doResponsiveImageListTest();
    $this->doDateFormatListTest();
    $this->doFieldListTest();
    // Views is tested in
    // Drupal\config_translation\Tests\ConfigTranslationViewListUiTest.
    // Test the maintenance settings page.
    $this->doSettingsPageTest('admin/config/development/maintenance');
    // Test the site information settings page.
    $this->doSettingsPageTest('admin/config/system/site-information');
    // Test the account settings page.
    $this->doSettingsPageTest('admin/config/people/accounts');
  }

}

Classes

Title Deprecated Summary
ConfigTranslationListUiTest Visit all lists.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.