RelationshipNodeTermDataTest.php

Same filename in other branches
  1. 9 core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
  2. 8.9.x core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
  3. 11.x core/modules/taxonomy/tests/src/Kernel/Views/RelationshipNodeTermDataTest.php

Namespace

Drupal\Tests\taxonomy\Kernel\Views

File

core/modules/taxonomy/tests/src/Kernel/Views/RelationshipNodeTermDataTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\taxonomy\Kernel\Views;

use Drupal\views\Views;
use Drupal\views\ViewExecutable;

/**
 * Tests the taxonomy term on node relationship handler.
 *
 * @group taxonomy
 */
class RelationshipNodeTermDataTest extends TaxonomyTestBase {
    
    /**
     * Views used by this test.
     *
     * @var string[]
     */
    public static $testViews = [
        'test_taxonomy_node_term_data',
    ];
    
    /**
     * Tests relations limited by vocabulary.
     *
     * @covers \Drupal\taxonomy\Plugin\views\relationship\NodeTermData::calculateDependencies
     */
    public function testViewsHandlerRelationshipNodeTermData() : void {
        $view = Views::getView('test_taxonomy_node_term_data');
        $expected = [
            'config' => [
                'core.entity_view_mode.node.teaser',
            ],
            'module' => [
                'node',
                'taxonomy',
                'user',
            ],
        ];
        $this->assertSame($expected, $view->getDependencies());
        $this->executeView($view, [
            $this->term1
                ->id(),
            $this->term2
                ->id(),
        ]);
        $expected_result = [
            [
                'nid' => $this->nodes[1]
                    ->id(),
            ],
            [
                'nid' => $this->nodes[0]
                    ->id(),
            ],
        ];
        $column_map = [
            'nid' => 'nid',
        ];
        $this->assertIdenticalResultset($view, $expected_result, $column_map);
        // Change the view to test relation limited by vocabulary.
        $this->config('views.view.test_taxonomy_node_term_data')
            ->set('display.default.display_options.relationships.term_node_tid.vids', [
            'views_testing_tags',
        ])
            ->save();
        $view = Views::getView('test_taxonomy_node_term_data');
        $expected['config'][] = 'taxonomy.vocabulary.views_testing_tags';
        $this->assertSame($expected, $view->getDependencies());
        $this->executeView($view, [
            $this->term1
                ->id(),
            $this->term2
                ->id(),
        ]);
        $this->assertIdenticalResultset($view, $expected_result, $column_map);
    }
    
    /**
     * Tests that the 'taxonomy_term_access' tag is added to the Views query.
     */
    public function testTag() : void {
        // Change the view to test relation limited by vocabulary.
        $this->config('views.view.test_taxonomy_node_term_data')
            ->set('display.default.display_options.relationships.term_node_tid.vids', [
            'views_testing_tags',
        ])
            ->save();
        $view = Views::getView('test_taxonomy_node_term_data');
        $this->executeView($view, [
            $this->term1
                ->id(),
        ]);
        // By default, view has taxonomy_term_access tag.
        $this->assertQueriesTermAccessTag($view, TRUE);
        // The term_access tag is not set if disable_sql_rewrite is set.
        $view = Views::getView('test_taxonomy_node_term_data');
        $display = $view->getDisplay();
        $display_options = $display->getOption('query');
        $display_options['options']['disable_sql_rewrite'] = TRUE;
        $display->setOption('query', $display_options);
        $view->save();
        $this->executeView($view, [
            $this->term1
                ->id(),
        ]);
        $this->assertQueriesTermAccessTag($view, FALSE);
    }
    
    /**
     * Assert views queries have taxonomy_term_access tag.
     *
     * @param \Drupal\views\ViewExecutable $view
     *   The View to check for the term access tag.
     * @param bool $hasTag
     *   The expected existence of taxonomy_term_access tag.
     *
     * @internal
     */
    protected function assertQueriesTermAccessTag(ViewExecutable $view, bool $hasTag) : void {
        $main_query = $view->build_info['query'];
        $count_query = $view->build_info['count_query'];
        foreach ([
            $main_query,
            $count_query,
        ] as $query) {
            $tables = $query->getTables();
            foreach ($tables as $join_table) {
                if (is_object($join_table['table'])) {
                    $this->assertSame($join_table['table']->hasTag('taxonomy_term_access'), $hasTag);
                }
            }
        }
    }

}

Classes

Title Deprecated Summary
RelationshipNodeTermDataTest Tests the taxonomy term on node relationship handler.

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