FieldEntityTranslationTest.php

Same filename in other branches
  1. 9 core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php
  2. 8.9.x core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php
  3. 11.x core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php

Namespace

Drupal\Tests\views\Functional\Entity

File

core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php

View source
<?php

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

use Drupal\Core\Language\Language;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
use Drupal\Tests\views\Functional\ViewTestBase;
use Symfony\Component\CssSelector\CssSelectorConverter;

/**
 * Tests the rendering of fields (base fields) and their translations.
 *
 * @group views
 */
class FieldEntityTranslationTest extends ViewTestBase {
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'language',
        'locale',
        'content_translation',
        'node',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * {@inheritdoc}
     */
    public static $testViews = [
        'test_entity_field_renderers',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected function setUp($import_test_views = TRUE, $modules = [
        'views_test_config',
    ]) : void {
        parent::setUp($import_test_views, $modules);
        $node_type = NodeType::create([
            'type' => 'article',
            'name' => 'Article',
        ]);
        $node_type->save();
        
        /** @var \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager */
        $content_translation_manager = \Drupal::service('content_translation.manager');
        $content_translation_manager->setEnabled('node', 'article', TRUE);
        $language = ConfigurableLanguage::create([
            'id' => 'es',
            'label' => 'Spanish',
        ]);
        $language->save();
        // Rebuild the container to setup the language path processors.
        $this->rebuildContainer();
    }
    
    /**
     * Tests that different translation mechanisms can be used for base fields.
     */
    public function testTranslationRows() : void {
        $node = Node::create([
            'type' => 'article',
            'title' => 'example EN',
            'sticky' => FALSE,
        ]);
        $node->save();
        $translation = $node->addTranslation('es');
        $translation->title->value = 'example ES';
        $translation->sticky->value = TRUE;
        $translation->save();
        $this->drupalGet('test_entity_field_renderers/entity_translation');
        $this->assertRows([
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
            [
                'title' => 'example ES',
                'sticky' => 'On',
            ],
        ]);
        $this->drupalGet('test_entity_field_renderers/entity_default');
        $this->assertRows([
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
        ]);
        $this->drupalGet('test_entity_field_renderers/site_default');
        $this->assertRows([
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
        ]);
        $this->drupalGet('test_entity_field_renderers/language_interface');
        $this->assertRows([
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
        ]);
        $this->drupalGet('test_entity_field_renderers/language_interface', [
            'language' => new Language([
                'id' => 'es',
            ]),
        ]);
        $this->assertRows([
            [
                'title' => 'example ES',
                'sticky' => 'On',
            ],
            [
                'title' => 'example ES',
                'sticky' => 'On',
            ],
        ]);
        $this->drupalGet('test_entity_field_renderers/en');
        $this->assertRows([
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
            [
                'title' => 'example EN',
                'sticky' => 'Off',
            ],
        ]);
        $this->drupalGet('test_entity_field_renderers/es');
        $this->assertRows([
            [
                'title' => 'example ES',
                'sticky' => 'On',
            ],
            [
                'title' => 'example ES',
                'sticky' => 'On',
            ],
        ]);
    }
    
    /**
     * Ensures that the rendered results are working as expected.
     *
     * @param array $expected
     *   The expected rows of the result.
     *
     * @internal
     */
    protected function assertRows(array $expected = []) : void {
        $actual = [];
        $rows = $this->cssSelect('div.views-row');
        foreach ($rows as $row) {
            $actual[] = [
                'title' => $row->find('xpath', (new CssSelectorConverter())->toXPath('.views-field-title span.field-content a'))
                    ->getText(),
                'sticky' => $row->find('xpath', (new CssSelectorConverter())->toXPath('.views-field-sticky span.field-content'))
                    ->getText(),
            ];
        }
        $this->assertEquals($expected, $actual);
    }

}

Classes

Title Deprecated Summary
FieldEntityTranslationTest Tests the rendering of fields (base fields) and their translations.

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