LocaleTranslatedSchemaDefinitionTest.php

Same filename and directory in other branches
  1. 8.9.x core/modules/locale/tests/src/Functional/LocaleTranslatedSchemaDefinitionTest.php
  2. 10 core/modules/locale/tests/src/Functional/LocaleTranslatedSchemaDefinitionTest.php
  3. 11.x core/modules/locale/tests/src/Functional/LocaleTranslatedSchemaDefinitionTest.php

Namespace

Drupal\Tests\locale\Functional

File

core/modules/locale/tests/src/Functional/LocaleTranslatedSchemaDefinitionTest.php

View source
<?php

namespace Drupal\Tests\locale\Functional;

use Drupal\Core\Url;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\RequirementsPageTrait;

/**
 * Adds and configures languages to check field schema definition.
 *
 * @group locale
 */
class LocaleTranslatedSchemaDefinitionTest extends BrowserTestBase {
    use RequirementsPageTrait;
    
    /**
     * Modules to enable.
     *
     * @var array
     */
    protected static $modules = [
        'language',
        'locale',
        'node',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() : void {
        parent::setUp();
        ConfigurableLanguage::createFromLangcode('fr')->save();
        $this->config('system.site')
            ->set('default_langcode', 'fr')
            ->save();
        // Clear all caches so that the base field definition, its cache in the
        // entity field manager, the t() cache, etc. are all cleared.
        $this->resetAll();
    }
    
    /**
     * Tests that translated field descriptions do not affect the update system.
     */
    public function testTranslatedSchemaDefinition() {
        
        /** @var \Drupal\locale\StringDatabaseStorage $stringStorage */
        $stringStorage = \Drupal::service('locale.storage');
        $source = $stringStorage->createString([
            'source' => 'Revision ID',
        ])
            ->save();
        $stringStorage->createTranslation([
            'lid' => $source->lid,
            'language' => 'fr',
            'translation' => 'Translated Revision ID',
        ])
            ->save();
        // Ensure that the field is translated when access through the API.
        $this->assertEquals('Translated Revision ID', \Drupal::service('entity_field.manager')->getBaseFieldDefinitions('node')['vid']
            ->getLabel());
        // Assert there are no updates.
        $this->assertFalse(\Drupal::service('entity.definition_update_manager')->needsUpdates());
    }
    
    /**
     * Tests that translations do not affect the update system.
     */
    public function testTranslatedUpdate() {
        // Visit the update page to collect any strings that may be translatable.
        $user = $this->drupalCreateUser([
            'administer software updates',
        ]);
        $this->drupalLogin($user);
        $update_url = Url::fromRoute('system.db_update')->setAbsolute()
            ->toString();
        // Collect strings from the PHP warning page, if applicable, as well as the
        // main update page.
        $this->drupalGet($update_url, [
            'external' => TRUE,
        ]);
        $this->updateRequirementsProblem();
        
        /** @var \Drupal\locale\StringDatabaseStorage $stringStorage */
        $stringStorage = \Drupal::service('locale.storage');
        $sources = $stringStorage->getStrings();
        // Translate all source strings found.
        foreach ($sources as $source) {
            $stringStorage->createTranslation([
                'lid' => $source->lid,
                'language' => 'fr',
                'translation' => $this->randomMachineName(100),
            ])
                ->save();
        }
        // Ensure that there are no updates just due to translations. Check for
        // markup and a link instead of specific text because text may be
        // translated.
        $this->drupalGet($update_url . '/selection', [
            'external' => TRUE,
        ]);
        $this->assertSession()
            ->statusMessageExists('status');
        $this->assertSession()
            ->linkByHrefNotExists('fr/update.php/run', 'No link to run updates.');
    }

}

Classes

Title Deprecated Summary
LocaleTranslatedSchemaDefinitionTest Adds and configures languages to check field schema definition.

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