Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / quickedit / tests / src / Kernel / MetadataGeneratorTest.php
1 <?php
2
3 namespace Drupal\Tests\quickedit\Kernel;
4
5 use Drupal\entity_test\Entity\EntityTest;
6 use Drupal\quickedit\EditorSelector;
7 use Drupal\quickedit\MetadataGenerator;
8 use Drupal\quickedit_test\MockQuickEditEntityFieldAccessCheck;
9 use Drupal\filter\Entity\FilterFormat;
10
11 /**
12  * Tests in-place field editing metadata.
13  *
14  * @group quickedit
15  */
16 class MetadataGeneratorTest extends QuickEditTestBase {
17
18   /**
19    * {@inheritdoc}
20    */
21   public static $modules = ['quickedit_test'];
22
23   /**
24    * The manager for editor plugins.
25    *
26    * @var \Drupal\Component\Plugin\PluginManagerInterface
27    */
28   protected $editorManager;
29
30   /**
31    * The metadata generator object to be tested.
32    *
33    * @var \Drupal\quickedit\MetadataGeneratorInterface
34    */
35   protected $metadataGenerator;
36
37   /**
38    * The editor selector object to be used by the metadata generator object.
39    *
40    * @var \Drupal\quickedit\EditorSelectorInterface
41    */
42   protected $editorSelector;
43
44   /**
45    * The access checker object to be used by the metadata generator object.
46    *
47    * @var \Drupal\quickedit\Access\QuickEditEntityFieldAccessCheckInterface
48    */
49   protected $accessChecker;
50
51   protected function setUp() {
52     parent::setUp();
53
54     $this->editorManager = $this->container->get('plugin.manager.quickedit.editor');
55     $this->accessChecker = new MockQuickEditEntityFieldAccessCheck();
56     $this->editorSelector = new EditorSelector($this->editorManager, $this->container->get('plugin.manager.field.formatter'));
57     $this->metadataGenerator = new MetadataGenerator($this->accessChecker, $this->editorSelector, $this->editorManager);
58   }
59
60   /**
61    * Tests a simple entity type, with two different simple fields.
62    */
63   public function testSimpleEntityType() {
64     $field_1_name = 'field_text';
65     $field_1_label = 'Plain text field';
66     $this->createFieldWithStorage(
67       $field_1_name, 'string', 1, $field_1_label,
68       // Instance settings.
69       [],
70       // Widget type & settings.
71       'string_textfield',
72       ['size' => 42],
73       // 'default' formatter type & settings.
74       'string',
75       []
76     );
77     $field_2_name = 'field_nr';
78     $field_2_label = 'Simple number field';
79     $this->createFieldWithStorage(
80       $field_2_name, 'integer', 1, $field_2_label,
81       // Instance settings.
82       [],
83       // Widget type & settings.
84       'number',
85       [],
86       // 'default' formatter type & settings.
87       'number_integer',
88       []
89     );
90
91     // Create an entity with values for this text field.
92     $entity = EntityTest::create();
93     $entity->{$field_1_name}->value = 'Test';
94     $entity->{$field_2_name}->value = 42;
95     $entity->save();
96     $entity = EntityTest::load($entity->id());
97
98     // Verify metadata for field 1.
99     $items_1 = $entity->get($field_1_name);
100     $metadata_1 = $this->metadataGenerator->generateFieldMetadata($items_1, 'default');
101     $expected_1 = [
102       'access' => TRUE,
103       'label' => 'Plain text field',
104       'editor' => 'plain_text',
105     ];
106     $this->assertEqual($expected_1, $metadata_1, 'The correct metadata is generated for the first field.');
107
108     // Verify metadata for field 2.
109     $items_2 = $entity->get($field_2_name);
110     $metadata_2 = $this->metadataGenerator->generateFieldMetadata($items_2, 'default');
111     $expected_2 = [
112       'access' => TRUE,
113       'label' => 'Simple number field',
114       'editor' => 'form',
115     ];
116     $this->assertEqual($expected_2, $metadata_2, 'The correct metadata is generated for the second field.');
117   }
118
119   /**
120    * Tests a field whose associated in-place editor generates custom metadata.
121    */
122   public function testEditorWithCustomMetadata() {
123     $this->editorManager = $this->container->get('plugin.manager.quickedit.editor');
124     $this->editorSelector = new EditorSelector($this->editorManager, $this->container->get('plugin.manager.field.formatter'));
125     $this->metadataGenerator = new MetadataGenerator($this->accessChecker, $this->editorSelector, $this->editorManager);
126
127     $this->editorManager = $this->container->get('plugin.manager.quickedit.editor');
128     $this->editorSelector = new EditorSelector($this->editorManager, $this->container->get('plugin.manager.field.formatter'));
129     $this->metadataGenerator = new MetadataGenerator($this->accessChecker, $this->editorSelector, $this->editorManager);
130
131     // Create a rich text field.
132     $field_name = 'field_rich';
133     $field_label = 'Rich text field';
134     $this->createFieldWithStorage(
135       $field_name, 'text', 1, $field_label,
136       // Instance settings.
137       [],
138       // Widget type & settings.
139       'text_textfield',
140       ['size' => 42],
141       // 'default' formatter type & settings.
142       'text_default',
143       []
144     );
145
146     // Create a text format.
147     $full_html_format = FilterFormat::create([
148       'format' => 'full_html',
149       'name' => 'Full HTML',
150       'weight' => 1,
151       'filters' => [
152         'filter_htmlcorrector' => ['status' => 1],
153       ],
154     ]);
155     $full_html_format->save();
156
157     // Create an entity with values for this rich text field.
158     $entity = EntityTest::create();
159     $entity->{$field_name}->value = 'Test';
160     $entity->{$field_name}->format = 'full_html';
161     $entity->save();
162     $entity = EntityTest::load($entity->id());
163
164     // Verify metadata.
165     $items = $entity->get($field_name);
166     $metadata = $this->metadataGenerator->generateFieldMetadata($items, 'default');
167     $expected = [
168       'access' => TRUE,
169       'label' => 'Rich text field',
170       'editor' => 'wysiwyg',
171       'custom' => [
172         'format' => 'full_html',
173       ],
174     ];
175     $this->assertEqual($expected, $metadata, 'The correct metadata (including custom metadata) is generated.');
176   }
177
178 }