function FieldEntityOperationsTest::testEntityOperations

Same name in other branches
  1. 9 core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php \Drupal\Tests\views\Functional\Handler\FieldEntityOperationsTest::testEntityOperations()
  2. 10 core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php \Drupal\Tests\views\Functional\Handler\FieldEntityOperationsTest::testEntityOperations()
  3. 11.x core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php \Drupal\Tests\views\Functional\Handler\FieldEntityOperationsTest::testEntityOperations()

Tests entity operations field.

File

core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php, line 46

Class

FieldEntityOperationsTest
Tests the core Drupal\views\Plugin\views\field\EntityOperations handler.

Namespace

Drupal\Tests\views\Functional\Handler

Code

public function testEntityOperations() {
    // Add languages and refresh the container so the entity manager will have
    // fresh data.
    ConfigurableLanguage::createFromLangcode('hu')->save();
    ConfigurableLanguage::createFromLangcode('es')->save();
    $this->rebuildContainer();
    // Create some test entities. Every other entity is Hungarian while all
    // have a Spanish translation.
    $entities = [];
    for ($i = 0; $i < 5; $i++) {
        $entity = Node::create([
            'title' => $this->randomString(),
            'type' => 'article',
            'langcode' => $i % 2 === 0 ? 'hu' : 'en',
        ]);
        $entity->save();
        $translation = $entity->addTranslation('es');
        $translation->set('title', $entity->getTitle() . ' in Spanish');
        $translation->save();
        $entities[$i] = $entity;
    }
    $admin_user = $this->drupalCreateUser([
        'access administration pages',
        'administer nodes',
        'bypass node access',
    ]);
    $this->drupalLogin($this->rootUser);
    $this->drupalGet('test-entity-operations');
    
    /** @var $entity \Drupal\entity_test\Entity\EntityTest */
    foreach ($entities as $entity) {
        
        /** @var \Drupal\Core\Language\LanguageInterface $language */
        foreach ($entity->getTranslationLanguages() as $language) {
            $entity = $entity->getTranslation($language->getId());
            $operations = \Drupal::service('entity_type.manager')->getListBuilder('node')
                ->getOperations($entity);
            $this->assertTrue(count($operations) > 0, 'There are operations.');
            foreach ($operations as $operation) {
                $expected_destination = Url::fromUri('internal:/test-entity-operations')->toString();
                // Update destination property of the URL as generating it in the
                // test would by default point to the frontpage.
                $operation['url']->setOption('query', [
                    'destination' => $expected_destination,
                ]);
                $result = $this->xpath('//ul[contains(@class, dropbutton)]/li/a[@href=:path and text()=:title]', [
                    ':path' => $operation['url']->toString(),
                    ':title' => (string) $operation['title'],
                ]);
                $this->assertCount(1, $result, t('Found entity @operation link with destination parameter.', [
                    '@operation' => $operation['title'],
                ]));
                // Entities which were created in Hungarian should link to the Hungarian
                // edit form, others to the English one (which has no path prefix here).
                $base_path = \Drupal::request()->getBasePath();
                $parts = explode('/', str_replace($base_path, '', $operation['url']->toString()));
                $expected_prefix = $language->getId() != 'en' ? $language->getId() : 'node';
                $this->assertEqual($parts[1], $expected_prefix, 'Entity operation links to the correct language for the entity.');
            }
        }
    }
    // Test that we can't enable click sorting on the operation field.
    $this->drupalGet('admin/structure/views/nojs/display/test_entity_operations/page_2/style_options');
    $this->assertField('style_options[info][title][sortable]');
    $this->assertNoField('style_options[info][operations][sortable]');
}

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