3 namespace Drupal\Tests\taxonomy\Functional\Views;
5 use Drupal\views\Views;
8 * Test the taxonomy term with depth filter.
12 class TaxonomyTermFilterDepthTest extends TaxonomyTestBase {
17 public static $modules = ['taxonomy', 'taxonomy_test_views', 'views', 'node'];
22 public static $testViews = ['test_filter_taxonomy_index_tid_depth'];
25 * @var \Drupal\taxonomy\TermInterface[]
27 protected $terms = [];
30 * @var \Drupal\views\ViewExecutable
37 protected function setUp($import_test_views = TRUE) {
38 parent::setUp($import_test_views);
40 // Create a hierarchy 3 deep. Note the parent setup function creates two
41 // top-level terms w/o children.
42 $first = $this->createTerm(['name' => 'First']);
43 $second = $this->createTerm(['name' => 'Second', 'parent' => $first->id()]);
44 $third = $this->createTerm(['name' => 'Third', 'parent' => $second->id()]);
46 // Create a node w/o any terms.
47 $settings = ['type' => 'article'];
48 $this->nodes[] = $this->drupalCreateNode($settings);
50 // Create a node with only the top level term.
51 $settings['field_views_testing_tags'][0]['target_id'] = $first->id();
52 $this->nodes[] = $this->drupalCreateNode($settings);
54 // Create a node with only the third level term.
55 $settings['field_views_testing_tags'][0]['target_id'] = $third->id();
56 $this->nodes[] = $this->drupalCreateNode($settings);
58 $this->terms[0] = $first;
59 $this->terms[1] = $second;
60 $this->terms[2] = $third;
62 $this->view = Views::getView('test_filter_taxonomy_index_tid_depth');
66 * Tests the terms with depth filter.
68 public function testTermWithDepthFilter() {
69 $column_map = ['nid' => 'nid'];
70 $assert_method = 'assertIdentical';
72 // Default view has an empty value for this filter, so all nodes should be
81 $this->executeView($this->view);
82 $this->assertIdenticalResultsetHelper($this->view, $expected, $column_map, $assert_method);
84 // Set filter to search on top-level term, with depth 0.
85 $expected = [['nid' => 4]];
86 $this->assertTermWithDepthResult($this->terms[0]->id(), 0, $expected);
88 // Top-level term, depth 1.
89 $expected = [['nid' => 4]];
90 $this->assertTermWithDepthResult($this->terms[0]->id(), 0, $expected);
92 // Top-level term, depth 2.
93 $expected = [['nid' => 4], ['nid' => 5]];
94 $this->assertTermWithDepthResult($this->terms[0]->id(), 2, $expected);
96 // Second-level term, depth 1.
97 $expected = [['nid' => 5]];
98 $this->assertTermWithDepthResult($this->terms[1]->id(), 1, $expected);
100 // Third-level term, depth 0.
101 $expected = [['nid' => 5]];
102 $this->assertTermWithDepthResult($this->terms[2]->id(), 0, $expected);
104 // Third-level term, depth 1.
105 $expected = [['nid' => 5]];
106 $this->assertTermWithDepthResult($this->terms[2]->id(), 1, $expected);
108 // Third-level term, depth -2.
109 $expected = [['nid' => 4], ['nid' => 5]];
110 $this->assertTermWithDepthResult($this->terms[2]->id(), -2, $expected);
114 * Changes the tid filter to given term and depth.
117 * The term ID to filter on.
119 * The depth to search.
120 * @param array $expected
121 * The expected views result.
123 protected function assertTermWithDepthResult($tid, $depth, array $expected) {
124 $this->view->destroy();
125 $this->view->initDisplay();
126 $filters = $this->view->displayHandlers->get('default')
127 ->getOption('filters');
128 $filters['tid_depth']['depth'] = $depth;
129 $filters['tid_depth']['value'] = [$tid];
130 $this->view->displayHandlers->get('default')
131 ->setOption('filters', $filters);
132 $this->executeView($this->view);
133 $this->assertIdenticalResultsetHelper($this->view, $expected, ['nid' => 'nid'], 'assertIdentical');