Mercurial > hg > isophonics-drupal-site
comparison core/modules/field/tests/src/Kernel/DisplayApiTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\field\Kernel; | |
4 | |
5 use Drupal\Core\Entity\Entity\EntityViewMode; | |
6 use Drupal\entity_test\Entity\EntityTest; | |
7 use Drupal\field\Entity\FieldConfig; | |
8 use Drupal\field\Entity\FieldStorageConfig; | |
9 | |
10 /** | |
11 * Tests the field display API. | |
12 * | |
13 * @group field | |
14 */ | |
15 class DisplayApiTest extends FieldKernelTestBase { | |
16 | |
17 /** | |
18 * The field name to use in this test. | |
19 * | |
20 * @var string | |
21 */ | |
22 protected $fieldName; | |
23 | |
24 /** | |
25 * The field label to use in this test. | |
26 * | |
27 * @var string | |
28 */ | |
29 protected $label; | |
30 | |
31 /** | |
32 * The field cardinality to use in this test. | |
33 * | |
34 * @var number | |
35 */ | |
36 protected $cardinality; | |
37 | |
38 /** | |
39 * The field display options to use in this test. | |
40 * | |
41 * @var array | |
42 */ | |
43 protected $displayOptions; | |
44 | |
45 /** | |
46 * The test entity. | |
47 * | |
48 * @var \Drupal\Core\Entity\EntityInterface | |
49 */ | |
50 protected $entity; | |
51 | |
52 /** | |
53 * An array of random values, in the format expected for field values. | |
54 * | |
55 * @var array | |
56 */ | |
57 protected $values; | |
58 | |
59 /** | |
60 * {@inheritdoc} | |
61 */ | |
62 public static $modules = ['system']; | |
63 | |
64 protected function setUp() { | |
65 parent::setUp(); | |
66 | |
67 // Create a field and its storage. | |
68 $this->fieldName = 'test_field'; | |
69 $this->label = $this->randomMachineName(); | |
70 $this->cardinality = 4; | |
71 | |
72 $field_storage = [ | |
73 'field_name' => $this->fieldName, | |
74 'entity_type' => 'entity_test', | |
75 'type' => 'test_field', | |
76 'cardinality' => $this->cardinality, | |
77 ]; | |
78 $field = [ | |
79 'field_name' => $this->fieldName, | |
80 'entity_type' => 'entity_test', | |
81 'bundle' => 'entity_test', | |
82 'label' => $this->label, | |
83 ]; | |
84 | |
85 $this->displayOptions = [ | |
86 'default' => [ | |
87 'type' => 'field_test_default', | |
88 'settings' => [ | |
89 'test_formatter_setting' => $this->randomMachineName(), | |
90 ], | |
91 ], | |
92 'teaser' => [ | |
93 'type' => 'field_test_default', | |
94 'settings' => [ | |
95 'test_formatter_setting' => $this->randomMachineName(), | |
96 ], | |
97 ], | |
98 ]; | |
99 | |
100 FieldStorageConfig::create($field_storage)->save(); | |
101 FieldConfig::create($field)->save(); | |
102 // Create a display for the default view mode. | |
103 entity_get_display($field['entity_type'], $field['bundle'], 'default') | |
104 ->setComponent($this->fieldName, $this->displayOptions['default']) | |
105 ->save(); | |
106 // Create a display for the teaser view mode. | |
107 EntityViewMode::create(['id' => 'entity_test.teaser', 'targetEntityType' => 'entity_test'])->save(); | |
108 entity_get_display($field['entity_type'], $field['bundle'], 'teaser') | |
109 ->setComponent($this->fieldName, $this->displayOptions['teaser']) | |
110 ->save(); | |
111 | |
112 // Create an entity with values. | |
113 $this->values = $this->_generateTestFieldValues($this->cardinality); | |
114 $this->entity = EntityTest::create(); | |
115 $this->entity->{$this->fieldName}->setValue($this->values); | |
116 $this->entity->save(); | |
117 } | |
118 | |
119 /** | |
120 * Tests the FieldItemListInterface::view() method. | |
121 */ | |
122 public function testFieldItemListView() { | |
123 $items = $this->entity->get($this->fieldName); | |
124 | |
125 \Drupal::service('theme_handler')->install(['classy']); | |
126 $this->config('system.theme')->set('default', 'classy')->save(); | |
127 | |
128 // No display settings: check that default display settings are used. | |
129 $build = $items->view(); | |
130 $this->render($build); | |
131 $settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings('field_test_default'); | |
132 $setting = $settings['test_formatter_setting']; | |
133 $this->assertText($this->label, 'Label was displayed.'); | |
134 foreach ($this->values as $delta => $value) { | |
135 $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
136 } | |
137 | |
138 // Display settings: Check hidden field. | |
139 $display = [ | |
140 'label' => 'hidden', | |
141 'type' => 'field_test_multiple', | |
142 'settings' => [ | |
143 'test_formatter_setting_multiple' => $this->randomMachineName(), | |
144 'alter' => TRUE, | |
145 ], | |
146 ]; | |
147 $build = $items->view($display); | |
148 $this->render($build); | |
149 $setting = $display['settings']['test_formatter_setting_multiple']; | |
150 $this->assertNoText($this->label, 'Label was not displayed.'); | |
151 $this->assertText('field_test_entity_display_build_alter', 'Alter fired, display passed.'); | |
152 $this->assertText('entity language is en', 'Language is placed onto the context.'); | |
153 $array = []; | |
154 foreach ($this->values as $delta => $value) { | |
155 $array[] = $delta . ':' . $value['value']; | |
156 } | |
157 $this->assertText($setting . '|' . implode('|', $array), 'Values were displayed with expected setting.'); | |
158 | |
159 // Display settings: Check visually_hidden field. | |
160 $display = [ | |
161 'label' => 'visually_hidden', | |
162 'type' => 'field_test_multiple', | |
163 'settings' => [ | |
164 'test_formatter_setting_multiple' => $this->randomMachineName(), | |
165 'alter' => TRUE, | |
166 ], | |
167 ]; | |
168 $build = $items->view($display); | |
169 $this->render($build); | |
170 $setting = $display['settings']['test_formatter_setting_multiple']; | |
171 $this->assertRaw('visually-hidden', 'Label was visually hidden.'); | |
172 $this->assertText('field_test_entity_display_build_alter', 'Alter fired, display passed.'); | |
173 $this->assertText('entity language is en', 'Language is placed onto the context.'); | |
174 $array = []; | |
175 foreach ($this->values as $delta => $value) { | |
176 $array[] = $delta . ':' . $value['value']; | |
177 } | |
178 $this->assertText($setting . '|' . implode('|', $array), 'Values were displayed with expected setting.'); | |
179 | |
180 // Check the prepare_view steps are invoked. | |
181 $display = [ | |
182 'label' => 'hidden', | |
183 'type' => 'field_test_with_prepare_view', | |
184 'settings' => [ | |
185 'test_formatter_setting_additional' => $this->randomMachineName(), | |
186 ], | |
187 ]; | |
188 $build = $items->view($display); | |
189 $this->render($build); | |
190 $setting = $display['settings']['test_formatter_setting_additional']; | |
191 $this->assertNoText($this->label, 'Label was not displayed.'); | |
192 $this->assertNoText('field_test_entity_display_build_alter', 'Alter not fired.'); | |
193 foreach ($this->values as $delta => $value) { | |
194 $this->assertText($setting . '|' . $value['value'] . '|' . ($value['value'] + 1), format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
195 } | |
196 | |
197 // View mode: check that display settings specified in the display object | |
198 // are used. | |
199 $build = $items->view('teaser'); | |
200 $this->render($build); | |
201 $setting = $this->displayOptions['teaser']['settings']['test_formatter_setting']; | |
202 $this->assertText($this->label, 'Label was displayed.'); | |
203 foreach ($this->values as $delta => $value) { | |
204 $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
205 } | |
206 | |
207 // Unknown view mode: check that display settings for 'default' view mode | |
208 // are used. | |
209 $build = $items->view('unknown_view_mode'); | |
210 $this->render($build); | |
211 $setting = $this->displayOptions['default']['settings']['test_formatter_setting']; | |
212 $this->assertText($this->label, 'Label was displayed.'); | |
213 foreach ($this->values as $delta => $value) { | |
214 $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
215 } | |
216 } | |
217 | |
218 /** | |
219 * Tests the FieldItemInterface::view() method. | |
220 */ | |
221 public function testFieldItemView() { | |
222 // No display settings: check that default display settings are used. | |
223 $settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings('field_test_default'); | |
224 $setting = $settings['test_formatter_setting']; | |
225 foreach ($this->values as $delta => $value) { | |
226 $item = $this->entity->{$this->fieldName}[$delta]; | |
227 $build = $item->view(); | |
228 $this->render($build); | |
229 $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
230 } | |
231 | |
232 // Check that explicit display settings are used. | |
233 $display = [ | |
234 'type' => 'field_test_multiple', | |
235 'settings' => [ | |
236 'test_formatter_setting_multiple' => $this->randomMachineName(), | |
237 ], | |
238 ]; | |
239 $setting = $display['settings']['test_formatter_setting_multiple']; | |
240 foreach ($this->values as $delta => $value) { | |
241 $item = $this->entity->{$this->fieldName}[$delta]; | |
242 $build = $item->view($display); | |
243 $this->render($build); | |
244 $this->assertText($setting . '|0:' . $value['value'], format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
245 } | |
246 | |
247 // Check that prepare_view steps are invoked. | |
248 $display = [ | |
249 'type' => 'field_test_with_prepare_view', | |
250 'settings' => [ | |
251 'test_formatter_setting_additional' => $this->randomMachineName(), | |
252 ], | |
253 ]; | |
254 $setting = $display['settings']['test_formatter_setting_additional']; | |
255 foreach ($this->values as $delta => $value) { | |
256 $item = $this->entity->{$this->fieldName}[$delta]; | |
257 $build = $item->view($display); | |
258 $this->render($build); | |
259 $this->assertText($setting . '|' . $value['value'] . '|' . ($value['value'] + 1), format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
260 } | |
261 | |
262 // View mode: check that display settings specified in the field are used. | |
263 $setting = $this->displayOptions['teaser']['settings']['test_formatter_setting']; | |
264 foreach ($this->values as $delta => $value) { | |
265 $item = $this->entity->{$this->fieldName}[$delta]; | |
266 $build = $item->view('teaser'); | |
267 $this->render($build); | |
268 $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
269 } | |
270 | |
271 // Unknown view mode: check that display settings for 'default' view mode | |
272 // are used. | |
273 $setting = $this->displayOptions['default']['settings']['test_formatter_setting']; | |
274 foreach ($this->values as $delta => $value) { | |
275 $item = $this->entity->{$this->fieldName}[$delta]; | |
276 $build = $item->view('unknown_view_mode'); | |
277 $this->render($build); | |
278 $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', ['@delta' => $delta])); | |
279 } | |
280 } | |
281 | |
282 /** | |
283 * Tests that the prepareView() formatter method still fires for empty values. | |
284 */ | |
285 public function testFieldEmpty() { | |
286 // Uses \Drupal\field_test\Plugin\Field\FieldFormatter\TestFieldEmptyFormatter. | |
287 $display = [ | |
288 'label' => 'hidden', | |
289 'type' => 'field_empty_test', | |
290 'settings' => [ | |
291 'test_empty_string' => '**EMPTY FIELD**' . $this->randomMachineName(), | |
292 ], | |
293 ]; | |
294 // $this->entity is set by the setUp() method and by default contains 4 | |
295 // numeric values. We only want to test the display of this one field. | |
296 $build = $this->entity->get($this->fieldName)->view($display); | |
297 $this->render($build); | |
298 // The test field by default contains values, so should not display the | |
299 // default "empty" text. | |
300 $this->assertNoText($display['settings']['test_empty_string']); | |
301 | |
302 // Now remove the values from the test field and retest. | |
303 $this->entity->{$this->fieldName} = []; | |
304 $this->entity->save(); | |
305 $build = $this->entity->get($this->fieldName)->view($display); | |
306 $this->render($build); | |
307 // This time, as the field values have been removed, we *should* show the | |
308 // default "empty" text. | |
309 $this->assertText($display['settings']['test_empty_string']); | |
310 } | |
311 | |
312 } |