1<?php 2 3namespace Drupal\Tests\quickedit\Kernel; 4 5use Drupal\field\Entity\FieldConfig; 6use Drupal\KernelTests\KernelTestBase; 7use Drupal\field\Entity\FieldStorageConfig; 8 9/** 10 * Base class for testing Quick Edit functionality. 11 */ 12abstract class QuickEditTestBase extends KernelTestBase { 13 14 /** 15 * Modules to enable. 16 * 17 * @var array 18 */ 19 public static $modules = [ 20 'system', 21 'entity_test', 22 'field', 23 'field_test', 24 'filter', 25 'user', 26 'text', 27 'quickedit', 28 ]; 29 30 /** 31 * Bag of created fields. 32 * 33 * Allows easy access to test field names/IDs/objects via: 34 * - $this->fields->{$field_name}_field_storage 35 * - $this->fields->{$field_name}_instance 36 * 37 * @see \Drupal\quickedit\Tests\QuickEditTestBase::createFieldWithStorage() 38 * 39 * @var \ArrayObject 40 */ 41 protected $fields; 42 43 /** 44 * Sets the default field storage backend for fields created during tests. 45 */ 46 protected function setUp() { 47 parent::setUp(); 48 49 $this->fields = new \ArrayObject([], \ArrayObject::ARRAY_AS_PROPS); 50 51 $this->installEntitySchema('user'); 52 $this->installEntitySchema('entity_test'); 53 $this->installConfig(['field', 'filter']); 54 } 55 56 /** 57 * Creates a field. 58 * 59 * @param string $field_name 60 * The field name. 61 * @param string $type 62 * The field type. 63 * @param int $cardinality 64 * The field's cardinality. 65 * @param string $label 66 * The field's label (used everywhere: widget label, formatter label). 67 * @param array $field_settings 68 * @param string $widget_type 69 * The widget type. 70 * @param array $widget_settings 71 * The widget settings. 72 * @param string $formatter_type 73 * The formatter type. 74 * @param array $formatter_settings 75 * The formatter settings. 76 */ 77 protected function createFieldWithStorage($field_name, $type, $cardinality, $label, $field_settings, $widget_type, $widget_settings, $formatter_type, $formatter_settings) { 78 $field_storage = $field_name . '_field_storage'; 79 $this->fields->$field_storage = FieldStorageConfig::create([ 80 'field_name' => $field_name, 81 'entity_type' => 'entity_test', 82 'type' => $type, 83 'cardinality' => $cardinality, 84 ]); 85 $this->fields->$field_storage->save(); 86 87 $field = $field_name . '_field'; 88 $this->fields->$field = FieldConfig::create([ 89 'field_storage' => $this->fields->$field_storage, 90 'bundle' => 'entity_test', 91 'label' => $label, 92 'description' => $label, 93 'weight' => mt_rand(0, 127), 94 'settings' => $field_settings, 95 ]); 96 $this->fields->$field->save(); 97 98 /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */ 99 $display_repository = \Drupal::service('entity_display.repository'); 100 101 $display_repository->getFormDisplay('entity_test', 'entity_test') 102 ->setComponent($field_name, [ 103 'type' => $widget_type, 104 'settings' => $widget_settings, 105 ]) 106 ->save(); 107 108 $display_repository->getViewDisplay('entity_test', 'entity_test') 109 ->setComponent($field_name, [ 110 'label' => 'above', 111 'type' => $formatter_type, 112 'settings' => $formatter_settings, 113 ]) 114 ->save(); 115 } 116 117} 118