Version 1
[yaffs-website] / web / core / modules / views / tests / src / Functional / Entity / FieldEntityTranslationTest.php
diff --git a/web/core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php b/web/core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php
new file mode 100644 (file)
index 0000000..2a227c5
--- /dev/null
@@ -0,0 +1,174 @@
+<?php
+
+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}
+   */
+  public static $modules = ['language', 'locale', 'content_translation', 'node'];
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $testViews = ['test_entity_field_renderers'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp($import_test_views);
+
+    $node_type = NodeType::create([
+      'type' => 'article',
+      'label' => '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() {
+    $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.
+   */
+  protected function assertRows($expected = []) {
+    $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->assertEqual($actual, $expected);
+  }
+
+}