Chris@18
|
1 <?php
|
Chris@18
|
2
|
Chris@18
|
3 namespace Drupal\Tests\jsonapi\Functional;
|
Chris@18
|
4
|
Chris@18
|
5 use Drupal\Core\Entity\EntityInterface;
|
Chris@18
|
6 use Drupal\Core\Session\AccountInterface;
|
Chris@18
|
7 use Drupal\Core\Url;
|
Chris@18
|
8 use Drupal\field\Entity\FieldConfig;
|
Chris@18
|
9 use Drupal\field\Entity\FieldStorageConfig;
|
Chris@18
|
10 use Drupal\node\Entity\NodeType;
|
Chris@18
|
11
|
Chris@18
|
12 /**
|
Chris@18
|
13 * JSON:API integration test for the "FieldConfig" config entity type.
|
Chris@18
|
14 *
|
Chris@18
|
15 * @group jsonapi
|
Chris@18
|
16 */
|
Chris@18
|
17 class FieldConfigTest extends ResourceTestBase {
|
Chris@18
|
18
|
Chris@18
|
19 /**
|
Chris@18
|
20 * {@inheritdoc}
|
Chris@18
|
21 */
|
Chris@18
|
22 public static $modules = ['field', 'node'];
|
Chris@18
|
23
|
Chris@18
|
24 /**
|
Chris@18
|
25 * {@inheritdoc}
|
Chris@18
|
26 */
|
Chris@18
|
27 protected static $entityTypeId = 'field_config';
|
Chris@18
|
28
|
Chris@18
|
29 /**
|
Chris@18
|
30 * {@inheritdoc}
|
Chris@18
|
31 */
|
Chris@18
|
32 protected static $resourceTypeName = 'field_config--field_config';
|
Chris@18
|
33
|
Chris@18
|
34 /**
|
Chris@18
|
35 * {@inheritdoc}
|
Chris@18
|
36 *
|
Chris@18
|
37 * @var \Drupal\field\FieldConfigInterface
|
Chris@18
|
38 */
|
Chris@18
|
39 protected $entity;
|
Chris@18
|
40
|
Chris@18
|
41 /**
|
Chris@18
|
42 * {@inheritdoc}
|
Chris@18
|
43 */
|
Chris@18
|
44 protected function setUpAuthorization($method) {
|
Chris@18
|
45 $this->grantPermissionsToTestedRole(['administer node fields']);
|
Chris@18
|
46 }
|
Chris@18
|
47
|
Chris@18
|
48 /**
|
Chris@18
|
49 * {@inheritdoc}
|
Chris@18
|
50 */
|
Chris@18
|
51 protected function createEntity() {
|
Chris@18
|
52 $camelids = NodeType::create([
|
Chris@18
|
53 'name' => 'Camelids',
|
Chris@18
|
54 'type' => 'camelids',
|
Chris@18
|
55 ]);
|
Chris@18
|
56 $camelids->save();
|
Chris@18
|
57
|
Chris@18
|
58 $field_storage = FieldStorageConfig::create([
|
Chris@18
|
59 'field_name' => 'field_llama',
|
Chris@18
|
60 'entity_type' => 'node',
|
Chris@18
|
61 'type' => 'text',
|
Chris@18
|
62 ]);
|
Chris@18
|
63 $field_storage->save();
|
Chris@18
|
64
|
Chris@18
|
65 $entity = FieldConfig::create([
|
Chris@18
|
66 'field_storage' => $field_storage,
|
Chris@18
|
67 'bundle' => 'camelids',
|
Chris@18
|
68 ]);
|
Chris@18
|
69 $entity->save();
|
Chris@18
|
70
|
Chris@18
|
71 return $entity;
|
Chris@18
|
72 }
|
Chris@18
|
73
|
Chris@18
|
74 /**
|
Chris@18
|
75 * {@inheritdoc}
|
Chris@18
|
76 */
|
Chris@18
|
77 protected function getExpectedDocument() {
|
Chris@18
|
78 $self_url = Url::fromUri('base:/jsonapi/field_config/field_config/' . $this->entity->uuid())->setAbsolute()->toString(TRUE)->getGeneratedUrl();
|
Chris@18
|
79 return [
|
Chris@18
|
80 'jsonapi' => [
|
Chris@18
|
81 'meta' => [
|
Chris@18
|
82 'links' => [
|
Chris@18
|
83 'self' => ['href' => 'http://jsonapi.org/format/1.0/'],
|
Chris@18
|
84 ],
|
Chris@18
|
85 ],
|
Chris@18
|
86 'version' => '1.0',
|
Chris@18
|
87 ],
|
Chris@18
|
88 'links' => [
|
Chris@18
|
89 'self' => ['href' => $self_url],
|
Chris@18
|
90 ],
|
Chris@18
|
91 'data' => [
|
Chris@18
|
92 'id' => $this->entity->uuid(),
|
Chris@18
|
93 'type' => 'field_config--field_config',
|
Chris@18
|
94 'links' => [
|
Chris@18
|
95 'self' => ['href' => $self_url],
|
Chris@18
|
96 ],
|
Chris@18
|
97 'attributes' => [
|
Chris@18
|
98 'bundle' => 'camelids',
|
Chris@18
|
99 'default_value' => [],
|
Chris@18
|
100 'default_value_callback' => '',
|
Chris@18
|
101 'dependencies' => [
|
Chris@18
|
102 'config' => [
|
Chris@18
|
103 'field.storage.node.field_llama',
|
Chris@18
|
104 'node.type.camelids',
|
Chris@18
|
105 ],
|
Chris@18
|
106 'module' => [
|
Chris@18
|
107 'text',
|
Chris@18
|
108 ],
|
Chris@18
|
109 ],
|
Chris@18
|
110 'description' => '',
|
Chris@18
|
111 'entity_type' => 'node',
|
Chris@18
|
112 'field_name' => 'field_llama',
|
Chris@18
|
113 'field_type' => 'text',
|
Chris@18
|
114 'label' => 'field_llama',
|
Chris@18
|
115 'langcode' => 'en',
|
Chris@18
|
116 'required' => FALSE,
|
Chris@18
|
117 'settings' => [],
|
Chris@18
|
118 'status' => TRUE,
|
Chris@18
|
119 'translatable' => TRUE,
|
Chris@18
|
120 'drupal_internal__id' => 'node.camelids.field_llama',
|
Chris@18
|
121 ],
|
Chris@18
|
122 ],
|
Chris@18
|
123 ];
|
Chris@18
|
124 }
|
Chris@18
|
125
|
Chris@18
|
126 /**
|
Chris@18
|
127 * {@inheritdoc}
|
Chris@18
|
128 */
|
Chris@18
|
129 protected function getPostDocument() {
|
Chris@18
|
130 // @todo Update in https://www.drupal.org/node/2300677.
|
Chris@18
|
131 }
|
Chris@18
|
132
|
Chris@18
|
133 /**
|
Chris@18
|
134 * {@inheritdoc}
|
Chris@18
|
135 */
|
Chris@18
|
136 protected function getExpectedUnauthorizedAccessMessage($method) {
|
Chris@18
|
137 return "The 'administer node fields' permission is required.";
|
Chris@18
|
138 }
|
Chris@18
|
139
|
Chris@18
|
140 /**
|
Chris@18
|
141 * {@inheritdoc}
|
Chris@18
|
142 */
|
Chris@18
|
143 protected function createAnotherEntity($key) {
|
Chris@18
|
144 NodeType::create([
|
Chris@18
|
145 'name' => 'Pachyderms',
|
Chris@18
|
146 'type' => 'pachyderms',
|
Chris@18
|
147 ])->save();
|
Chris@18
|
148
|
Chris@18
|
149 $field_storage = FieldStorageConfig::create([
|
Chris@18
|
150 'field_name' => 'field_pachyderm',
|
Chris@18
|
151 'entity_type' => 'node',
|
Chris@18
|
152 'type' => 'text',
|
Chris@18
|
153 ]);
|
Chris@18
|
154 $field_storage->save();
|
Chris@18
|
155
|
Chris@18
|
156 $entity = FieldConfig::create([
|
Chris@18
|
157 'field_storage' => $field_storage,
|
Chris@18
|
158 'bundle' => 'pachyderms',
|
Chris@18
|
159 ]);
|
Chris@18
|
160 $entity->save();
|
Chris@18
|
161
|
Chris@18
|
162 return $entity;
|
Chris@18
|
163 }
|
Chris@18
|
164
|
Chris@18
|
165 /**
|
Chris@18
|
166 * {@inheritdoc}
|
Chris@18
|
167 */
|
Chris@18
|
168 protected static function entityAccess(EntityInterface $entity, $operation, AccountInterface $account) {
|
Chris@18
|
169 // Also clear the 'field_storage_config' entity access handler cache because
|
Chris@18
|
170 // the 'field_config' access handler delegates access to it.
|
Chris@18
|
171 // @see \Drupal\field\FieldConfigAccessControlHandler::checkAccess()
|
Chris@18
|
172 \Drupal::entityTypeManager()->getAccessControlHandler('field_storage_config')->resetCache();
|
Chris@18
|
173 return parent::entityAccess($entity, $operation, $account);
|
Chris@18
|
174 }
|
Chris@18
|
175
|
Chris@18
|
176 }
|