d78f7c92e2b714659411ed34b47d01445adb0c6d
[yaffs-website] / web / core / modules / views / tests / src / Kernel / Handler / FilterEqualityTest.php
1 <?php
2
3 namespace Drupal\Tests\views\Kernel\Handler;
4
5 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
6 use Drupal\views\Views;
7
8 /**
9  * Tests the core Drupal\views\Plugin\views\filter\Equality handler.
10  *
11  * @group views
12  */
13 class FilterEqualityTest extends ViewsKernelTestBase {
14
15   public static $modules = ['system'];
16
17   /**
18    * Views used by this test.
19    *
20    * @var array
21    */
22   public static $testViews = ['test_view'];
23
24   /**
25    * Map column names.
26    *
27    * @var array
28    */
29   protected $columnMap = [
30     'views_test_data_name' => 'name',
31   ];
32
33   public function viewsData() {
34     $data = parent::viewsData();
35     $data['views_test_data']['name']['filter']['id'] = 'equality';
36     return $data;
37   }
38
39   public function testEqual() {
40     $view = Views::getView('test_view');
41     $view->setDisplay();
42
43     // Change the filtering
44     $view->displayHandlers->get('default')->overrideOption('filters', [
45       'name' => [
46         'id' => 'name',
47         'table' => 'views_test_data',
48         'field' => 'name',
49         'relationship' => 'none',
50         'operator' => '=',
51         'value' => 'Ringo',
52       ],
53     ]);
54
55     $this->executeView($view);
56     $resultset = [
57       [
58         'name' => 'Ringo',
59       ],
60     ];
61     $this->assertIdenticalResultset($view, $resultset, $this->columnMap);
62   }
63
64   public function testEqualGroupedExposed() {
65     $filters = $this->getGroupedExposedFilters();
66     $view = Views::getView('test_view');
67     $view->newDisplay('page', 'Page', 'page_1');
68
69     // Filter: Name, Operator: =, Value: Ringo
70     $filters['name']['group_info']['default_group'] = 1;
71     $view->setDisplay('page_1');
72     $view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
73     $view->save();
74     $this->container->get('router.builder')->rebuild();
75
76     $this->executeView($view);
77     $resultset = [
78       [
79         'name' => 'Ringo',
80       ],
81     ];
82     $this->assertIdenticalResultset($view, $resultset, $this->columnMap);
83   }
84
85   public function testNotEqual() {
86     $view = Views::getView('test_view');
87     $view->setDisplay();
88
89     // Change the filtering
90     $view->displayHandlers->get('default')->overrideOption('filters', [
91       'name' => [
92         'id' => 'name',
93         'table' => 'views_test_data',
94         'field' => 'name',
95         'relationship' => 'none',
96         'operator' => '!=',
97         'value' => 'Ringo',
98       ],
99     ]);
100
101     $this->executeView($view);
102     $resultset = [
103       [
104         'name' => 'John',
105       ],
106       [
107         'name' => 'George',
108       ],
109       [
110         'name' => 'Paul',
111       ],
112       [
113         'name' => 'Meredith',
114       ],
115     ];
116     $this->assertIdenticalResultset($view, $resultset, $this->columnMap);
117   }
118
119   public function testEqualGroupedNotExposed() {
120     $filters = $this->getGroupedExposedFilters();
121     $view = Views::getView('test_view');
122     $view->newDisplay('page', 'Page', 'page_1');
123
124     // Filter: Name, Operator: !=, Value: Ringo
125     $filters['name']['group_info']['default_group'] = 2;
126     $view->setDisplay('page_1');
127     $view->displayHandlers->get('page_1')->overrideOption('filters', $filters);
128     $view->save();
129     $this->container->get('router.builder')->rebuild();
130
131     $this->executeView($view);
132     $resultset = [
133       [
134         'name' => 'John',
135       ],
136       [
137         'name' => 'George',
138       ],
139       [
140         'name' => 'Paul',
141       ],
142       [
143         'name' => 'Meredith',
144       ],
145     ];
146     $this->assertIdenticalResultset($view, $resultset, $this->columnMap);
147   }
148
149
150   protected function getGroupedExposedFilters() {
151     $filters = [
152       'name' => [
153         'id' => 'name',
154         'plugin_id' => 'equality',
155         'table' => 'views_test_data',
156         'field' => 'name',
157         'relationship' => 'none',
158         'group' => 1,
159         'exposed' => TRUE,
160         'expose' => [
161           'operator' => 'name_op',
162           'label' => 'name',
163           'identifier' => 'name',
164         ],
165         'is_grouped' => TRUE,
166         'group_info' => [
167           'label' => 'name',
168           'identifier' => 'name',
169           'default_group' => 'All',
170           'group_items' => [
171             1 => [
172               'title' => 'Name is equal to Ringo',
173               'operator' => '=',
174               'value' => 'Ringo',
175             ],
176             2 => [
177               'title' => 'Name is not equal to Ringo',
178               'operator' => '!=',
179               'value' => 'Ringo',
180             ],
181           ],
182         ],
183       ],
184     ];
185     return $filters;
186   }
187
188 }