3 namespace Drupal\Tests\blazy\Kernel;
5 use Drupal\Core\Form\FormState;
6 use Drupal\KernelTests\KernelTestBase;
7 use Drupal\Tests\blazy\Traits\BlazyKernelTestTrait;
10 * Tests the Blazy entity reference file formatter.
12 * @coversDefaultClass \Drupal\blazy_test\Plugin\Field\FieldFormatter\BlazyTestEntityReferenceFormatterTest
15 class BlazyEntityReferenceFormatterTest extends KernelTestBase {
17 use BlazyKernelTestTrait;
24 public static $modules = [
47 protected function setUp() {
50 $this->setUpVariables();
51 $this->setUpKernelInstall();
52 $this->setUpKernelManager();
54 $this->blazyAdminTest = $this->container->get('blazy_test.admin');
55 $this->entityFieldName = 'field_entity_test';
56 $this->entityPluginId = 'blazy_entity_test';
57 $this->targetBundle = 'bundle_target_test';
58 $this->targetBundles = [$this->targetBundle];
60 $settings['image_settings'] = [
61 'iframe_lazy' => TRUE,
65 'view_mode' => 'default',
68 $settings['entity_field_name'] = $this->entityFieldName;
69 $settings['entity_plugin_id'] = $this->entityPluginId;
71 $settings['entity_settings'] = [
74 ] + $this->getFormatterSettings();
76 $this->setUpContentWithEntityReference($settings);
77 $this->formatterInstance = $this->getFormatterInstance($this->entityPluginId, $this->entityFieldName);
81 * Tests the Blazy formatter display.
83 * @todo: Useful assertions.
85 public function testFormatterDisplay() {
86 $bundle = $this->bundle;
87 $field_name = $this->entityFieldName;
88 $plugin_id = $this->entityPluginId;
89 $formatter = $this->formatterInstance;
90 $definition = array_merge($formatter->getScopedFormElements(), $this->getFormatterDefinition());
91 $settings = array_merge($definition['settings'], $this->getDefaultFields(TRUE)) + $formatter::defaultSettings();
93 $settings['grid'] = 4;
94 $settings['style'] = 'grid';
95 $settings['overlay'] = 'field_image';
96 $settings['image'] = $this->testFieldName;
98 foreach (['field_title', 'field_teaser', 'field_link'] as $key) {
99 $settings['caption'][$key] = $key;
102 $this->referencingDisplay->setComponent($this->entityFieldName, [
103 'type' => $this->entityPluginId,
104 'settings' => $settings,
108 $this->referencingDisplay->save();
110 // Create referencing entity.
111 $this->referencingEntity = $this->createReferencingEntity();
113 // Verify the un-accessible item still exists.
114 $this->assertEquals($this->referencingEntity->{$field_name}->target_id, $this->referencedEntity->id(), format_string('The un-accessible item still exists after @name formatter was executed.', ['@name' => $plugin_id]));
116 $entity_type_id = $this->referencingEntity->getEntityTypeId();
117 $component = $this->referencingDisplay->getComponent($this->entityFieldName);
118 $this->assertEquals($this->entityPluginId, $component['type']);
120 $array = $this->referencingEntity->get($this->entityFieldName);
121 $value = $array->getValue();
123 $list = $this->fieldTypePluginManager->createFieldItemList($this->referencingEntity, $this->entityFieldName, $value);
124 $entities = $list->referencedEntities();
126 $elements['settings'] = $settings;
127 $formatter->buildElements($elements, $entities, NULL);
128 $this->assertArrayHasKey('items', $elements);
130 $build = $this->referencingDisplay->build($this->referencingEntity);
132 $render = $this->blazyManager->getRenderer()->renderRoot($build);
133 $this->assertNotEmpty($render);
135 $string = $formatter->getFieldString($this->referencedEntity, '', NULL);
136 $this->assertEmpty($string);
138 $data['settings'] = $settings;
139 $data['settings']['delta'] = 0;
140 $data['settings']['vanilla'] = TRUE;
142 $formatter->buildElement($data, $this->referencedEntity, NULL);
143 $this->assertArrayHasKey('items', $data);
145 $data['settings'] = $settings;
146 $data['settings']['delta'] = 0;
147 $data['settings']['vanilla'] = FALSE;
148 $data['settings']['image'] = $this->testFieldName;
149 $data['settings']['media_switch'] = 'rendered';
150 $data['settings']['nav'] = TRUE;
151 $data['settings']['thumbnail_style'] = 'thumbnail';
152 $data['settings']['thumbnail_caption'] = 'field_text';
154 $formatter->buildElement($data, $entities[0], NULL);
155 $this->assertArrayHasKey('items', $data);
159 * Tests Blazy preview.
161 * @param array $settings
162 * The settings being tested.
163 * @param bool $is_entity
164 * Tests againts entity or image.
165 * @param bool $is_item
166 * Tests againts empty image.
167 * @param mixed|bool|array $expected
168 * The expected output.
170 * @dataProvider providerTestBuildPreview
171 * @depends testFormatterDisplay
173 public function testBuildPreview(array $settings, $is_entity, $is_item, $expected) {
174 $formatter = $this->formatterInstance;
175 $definition = array_merge($formatter->getScopedFormElements(), $this->getFormatterDefinition());
176 $settings = array_merge($definition['settings'], $settings) + $this->getDefaultFields(TRUE);
178 $settings['delta'] = 0;
180 $item = $is_item ? $this->referencedEntity->get($this->testFieldName) : NULL;
181 $entity = $is_entity ? $this->referencedEntity : $this->testItem;
184 'settings' => $settings,
187 $preview = $formatter->buildPreview($data, $entity, '');
188 $result = $is_entity ? !empty($preview) : $preview;
190 $this->assertEquals($expected, $result);
194 * Provide test cases for ::testBuildPreview().
197 * An array of tested data.
199 public function providerTestBuildPreview() {
209 '_detached' => FALSE,
234 * Tests the Blazy formatter settings form.
236 public function testFormatterSettingsForm() {
237 $formatter = $this->formatterInstance;
238 $definition = array_merge($formatter->getScopedFormElements(), $this->getFormatterDefinition());
240 $definition['settings'] = array_merge($definition['settings'], $this->getDefaultFields(TRUE));
242 // Check for setttings form.
244 $form_state = new FormState();
246 // Verify global option current_view_mode is available.
247 $form['overlay']['#description'] = '';
248 $definition['_views'] = TRUE;
249 $form['disabled_access'] = [
254 // Check for formatter buildSettingsForm.
255 $this->blazyAdminFormatter->buildSettingsForm($form, $definition);
256 $this->assertArrayHasKey('current_view_mode', $form);
258 // Check for setttings form.
259 $elements = $formatter->settingsForm($form, $form_state);
260 $this->assertArrayHasKey('closing', $elements);
262 $default_settings = $formatter::defaultSettings();
263 $this->assertArrayHasKey('image_style', $default_settings);
265 $data['settings'] = $definition['settings'];
267 // Tests the Blazy admin formatters.
268 $this->assertArrayHasKey('fieldable_form', $definition);
270 // Verify summary is working.
271 $summary = $formatter->settingsSummary();
272 foreach ($summary as $markup) {
273 $arguments = $markup->getArguments();
274 $this->assertArrayHasKey('@title', $arguments);
277 $formatter_settings = $formatter->buildSettings();
278 $this->assertArrayHasKey('plugin_id', $formatter_settings);