Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\views\Tests;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Config\FileStorage;
|
Chris@0
|
6
|
Chris@0
|
7 /**
|
Chris@0
|
8 * Provides tests view data and the base test schema with sample data records.
|
Chris@0
|
9 *
|
Chris@0
|
10 * The methods will be used by both views test base classes.
|
Chris@0
|
11 *
|
Chris@0
|
12 * @see \Drupal\Tests\views\Kernel\ViewsKernelTestBase.
|
Chris@0
|
13 * @see \Drupal\views\Tests\ViewTestBase.
|
Chris@0
|
14 */
|
Chris@0
|
15 class ViewTestData {
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * Create test views from config.
|
Chris@0
|
19 *
|
Chris@0
|
20 * @param string $class
|
Chris@0
|
21 * The name of the test class. Installs the listed test views *in order*.
|
Chris@0
|
22 * @param array $modules
|
Chris@0
|
23 * The module directories to look in for test views.
|
Chris@0
|
24 */
|
Chris@0
|
25 public static function createTestViews($class, array $modules) {
|
Chris@0
|
26 $views = [];
|
Chris@0
|
27 while ($class) {
|
Chris@0
|
28 if (property_exists($class, 'testViews')) {
|
Chris@0
|
29 $views = array_merge($views, $class::$testViews);
|
Chris@0
|
30 }
|
Chris@0
|
31 $class = get_parent_class($class);
|
Chris@0
|
32 }
|
Chris@0
|
33 if (!empty($views)) {
|
Chris@0
|
34 $storage = \Drupal::entityManager()->getStorage('view');
|
Chris@0
|
35 $module_handler = \Drupal::moduleHandler();
|
Chris@0
|
36 foreach ($modules as $module) {
|
Chris@0
|
37 $config_dir = drupal_get_path('module', $module) . '/test_views';
|
Chris@0
|
38 if (!is_dir($config_dir) || !$module_handler->moduleExists($module)) {
|
Chris@0
|
39 continue;
|
Chris@0
|
40 }
|
Chris@0
|
41
|
Chris@0
|
42 $file_storage = new FileStorage($config_dir);
|
Chris@0
|
43 $available_views = $file_storage->listAll('views.view.');
|
Chris@0
|
44 foreach ($views as $id) {
|
Chris@0
|
45 $config_name = 'views.view.' . $id;
|
Chris@0
|
46 if (in_array($config_name, $available_views)) {
|
Chris@0
|
47 $storage
|
Chris@0
|
48 ->create($file_storage->read($config_name))
|
Chris@0
|
49 ->save();
|
Chris@0
|
50 }
|
Chris@0
|
51 }
|
Chris@0
|
52 }
|
Chris@0
|
53 }
|
Chris@0
|
54
|
Chris@0
|
55 // Rebuild the router once.
|
Chris@0
|
56 \Drupal::service('router.builder')->rebuild();
|
Chris@0
|
57 }
|
Chris@0
|
58
|
Chris@0
|
59 /**
|
Chris@0
|
60 * Returns the schema definition.
|
Chris@0
|
61 *
|
Chris@0
|
62 * @internal
|
Chris@0
|
63 */
|
Chris@0
|
64 public static function schemaDefinition() {
|
Chris@0
|
65 $schema['views_test_data'] = [
|
Chris@0
|
66 'description' => 'Basic test table for Views tests.',
|
Chris@0
|
67 'fields' => [
|
Chris@0
|
68 'id' => [
|
Chris@0
|
69 'type' => 'serial',
|
Chris@0
|
70 'unsigned' => TRUE,
|
Chris@0
|
71 'not null' => TRUE,
|
Chris@0
|
72 ],
|
Chris@0
|
73 'name' => [
|
Chris@0
|
74 'description' => "A person's name",
|
Chris@0
|
75 'type' => 'varchar_ascii',
|
Chris@0
|
76 'length' => 255,
|
Chris@0
|
77 'not null' => TRUE,
|
Chris@0
|
78 'default' => '',
|
Chris@0
|
79 ],
|
Chris@0
|
80 'age' => [
|
Chris@0
|
81 'description' => "The person's age",
|
Chris@0
|
82 'type' => 'int',
|
Chris@0
|
83 'unsigned' => TRUE,
|
Chris@0
|
84 'not null' => TRUE,
|
Chris@0
|
85 'default' => 0,
|
Chris@0
|
86 ],
|
Chris@0
|
87 'job' => [
|
Chris@0
|
88 'description' => "The person's job",
|
Chris@0
|
89 'type' => 'varchar',
|
Chris@0
|
90 'length' => 255,
|
Chris@0
|
91 'not null' => TRUE,
|
Chris@0
|
92 'default' => 'Undefined',
|
Chris@0
|
93 ],
|
Chris@0
|
94 'created' => [
|
Chris@0
|
95 'description' => "The creation date of this record",
|
Chris@0
|
96 'type' => 'int',
|
Chris@0
|
97 'unsigned' => TRUE,
|
Chris@0
|
98 'not null' => TRUE,
|
Chris@0
|
99 'default' => 0,
|
Chris@0
|
100 ],
|
Chris@0
|
101 'status' => [
|
Chris@0
|
102 'description' => "The status of this record",
|
Chris@0
|
103 'type' => 'int',
|
Chris@0
|
104 'unsigned' => TRUE,
|
Chris@0
|
105 'not null' => TRUE,
|
Chris@0
|
106 'default' => 0,
|
Chris@0
|
107 ],
|
Chris@0
|
108 ],
|
Chris@0
|
109 'primary key' => ['id'],
|
Chris@0
|
110 'unique keys' => [
|
Chris@17
|
111 'name' => ['name'],
|
Chris@0
|
112 ],
|
Chris@0
|
113 'indexes' => [
|
Chris@0
|
114 'ages' => ['age'],
|
Chris@0
|
115 ],
|
Chris@0
|
116 ];
|
Chris@0
|
117 return $schema;
|
Chris@0
|
118 }
|
Chris@0
|
119
|
Chris@0
|
120 /**
|
Chris@0
|
121 * Returns the views data definition.
|
Chris@0
|
122 */
|
Chris@0
|
123 public static function viewsData() {
|
Chris@0
|
124 // Declaration of the base table.
|
Chris@0
|
125 $data['views_test_data']['table'] = [
|
Chris@0
|
126 'group' => 'Views test',
|
Chris@0
|
127 'base' => [
|
Chris@0
|
128 'field' => 'id',
|
Chris@0
|
129 'title' => 'Views test data',
|
Chris@0
|
130 'help' => 'Users who have created accounts on your site.',
|
Chris@0
|
131 ],
|
Chris@0
|
132 ];
|
Chris@0
|
133
|
Chris@0
|
134 // Declaration of fields.
|
Chris@0
|
135 $data['views_test_data']['id'] = [
|
Chris@0
|
136 'title' => 'ID',
|
Chris@0
|
137 'help' => 'The test data ID',
|
Chris@0
|
138 'field' => [
|
Chris@0
|
139 'id' => 'numeric',
|
Chris@0
|
140 ],
|
Chris@0
|
141 'argument' => [
|
Chris@0
|
142 'id' => 'numeric',
|
Chris@0
|
143 ],
|
Chris@0
|
144 'filter' => [
|
Chris@0
|
145 'id' => 'numeric',
|
Chris@0
|
146 ],
|
Chris@0
|
147 'sort' => [
|
Chris@0
|
148 'id' => 'standard',
|
Chris@0
|
149 ],
|
Chris@0
|
150 ];
|
Chris@0
|
151 $data['views_test_data']['name'] = [
|
Chris@0
|
152 'title' => 'Name',
|
Chris@0
|
153 'help' => 'The name of the person',
|
Chris@0
|
154 'field' => [
|
Chris@0
|
155 'id' => 'standard',
|
Chris@0
|
156 ],
|
Chris@0
|
157 'argument' => [
|
Chris@0
|
158 'id' => 'string',
|
Chris@0
|
159 ],
|
Chris@0
|
160 'filter' => [
|
Chris@0
|
161 'id' => 'string',
|
Chris@0
|
162 ],
|
Chris@0
|
163 'sort' => [
|
Chris@0
|
164 'id' => 'standard',
|
Chris@0
|
165 ],
|
Chris@0
|
166 ];
|
Chris@0
|
167 $data['views_test_data']['age'] = [
|
Chris@0
|
168 'title' => 'Age',
|
Chris@0
|
169 'help' => 'The age of the person',
|
Chris@0
|
170 'field' => [
|
Chris@0
|
171 'id' => 'numeric',
|
Chris@0
|
172 ],
|
Chris@0
|
173 'argument' => [
|
Chris@0
|
174 'id' => 'numeric',
|
Chris@0
|
175 ],
|
Chris@0
|
176 'filter' => [
|
Chris@0
|
177 'id' => 'numeric',
|
Chris@0
|
178 ],
|
Chris@0
|
179 'sort' => [
|
Chris@0
|
180 'id' => 'standard',
|
Chris@0
|
181 ],
|
Chris@0
|
182 ];
|
Chris@0
|
183 $data['views_test_data']['job'] = [
|
Chris@0
|
184 'title' => 'Job',
|
Chris@0
|
185 'help' => 'The job of the person',
|
Chris@0
|
186 'field' => [
|
Chris@0
|
187 'id' => 'standard',
|
Chris@0
|
188 ],
|
Chris@0
|
189 'argument' => [
|
Chris@0
|
190 'id' => 'string',
|
Chris@0
|
191 ],
|
Chris@0
|
192 'filter' => [
|
Chris@0
|
193 'id' => 'string',
|
Chris@0
|
194 ],
|
Chris@0
|
195 'sort' => [
|
Chris@0
|
196 'id' => 'standard',
|
Chris@0
|
197 ],
|
Chris@0
|
198 ];
|
Chris@0
|
199 $data['views_test_data']['created'] = [
|
Chris@0
|
200 'title' => 'Created',
|
Chris@0
|
201 'help' => 'The creation date of this record',
|
Chris@0
|
202 'field' => [
|
Chris@0
|
203 'id' => 'date',
|
Chris@0
|
204 ],
|
Chris@0
|
205 'argument' => [
|
Chris@0
|
206 'id' => 'date',
|
Chris@0
|
207 ],
|
Chris@0
|
208 'filter' => [
|
Chris@0
|
209 'id' => 'date',
|
Chris@0
|
210 ],
|
Chris@0
|
211 'sort' => [
|
Chris@0
|
212 'id' => 'date',
|
Chris@0
|
213 ],
|
Chris@0
|
214 ];
|
Chris@0
|
215 $data['views_test_data']['status'] = [
|
Chris@0
|
216 'title' => 'Status',
|
Chris@0
|
217 'help' => 'The status of this record',
|
Chris@0
|
218 'field' => [
|
Chris@0
|
219 'id' => 'boolean',
|
Chris@0
|
220 ],
|
Chris@0
|
221 'filter' => [
|
Chris@0
|
222 'id' => 'boolean',
|
Chris@0
|
223 ],
|
Chris@0
|
224 'sort' => [
|
Chris@0
|
225 'id' => 'standard',
|
Chris@0
|
226 ],
|
Chris@0
|
227 ];
|
Chris@0
|
228 return $data;
|
Chris@0
|
229 }
|
Chris@0
|
230
|
Chris@0
|
231 /**
|
Chris@0
|
232 * Returns a very simple test dataset.
|
Chris@0
|
233 */
|
Chris@0
|
234 public static function dataSet() {
|
Chris@0
|
235 return [
|
Chris@0
|
236 [
|
Chris@0
|
237 'name' => 'John',
|
Chris@0
|
238 'age' => 25,
|
Chris@0
|
239 'job' => 'Singer',
|
Chris@0
|
240 'created' => gmmktime(0, 0, 0, 1, 1, 2000),
|
Chris@0
|
241 'status' => 1,
|
Chris@0
|
242 ],
|
Chris@0
|
243 [
|
Chris@0
|
244 'name' => 'George',
|
Chris@0
|
245 'age' => 27,
|
Chris@0
|
246 'job' => 'Singer',
|
Chris@0
|
247 'created' => gmmktime(0, 0, 0, 1, 2, 2000),
|
Chris@0
|
248 'status' => 0,
|
Chris@0
|
249 ],
|
Chris@0
|
250 [
|
Chris@0
|
251 'name' => 'Ringo',
|
Chris@0
|
252 'age' => 28,
|
Chris@0
|
253 'job' => 'Drummer',
|
Chris@0
|
254 'created' => gmmktime(6, 30, 30, 1, 1, 2000),
|
Chris@0
|
255 'status' => 1,
|
Chris@0
|
256 ],
|
Chris@0
|
257 [
|
Chris@0
|
258 'name' => 'Paul',
|
Chris@0
|
259 'age' => 26,
|
Chris@0
|
260 'job' => 'Songwriter',
|
Chris@0
|
261 'created' => gmmktime(6, 0, 0, 1, 1, 2000),
|
Chris@0
|
262 'status' => 0,
|
Chris@0
|
263 ],
|
Chris@0
|
264 [
|
Chris@0
|
265 'name' => 'Meredith',
|
Chris@0
|
266 'age' => 30,
|
Chris@0
|
267 'job' => 'Speaker',
|
Chris@0
|
268 'created' => gmmktime(6, 30, 10, 1, 1, 2000),
|
Chris@0
|
269 'status' => 1,
|
Chris@0
|
270 ],
|
Chris@0
|
271 ];
|
Chris@0
|
272 }
|
Chris@0
|
273
|
Chris@0
|
274 }
|