Chris@18
|
1 <?php
|
Chris@18
|
2
|
Chris@18
|
3 namespace Drupal\Tests\jsonapi\Functional;
|
Chris@18
|
4
|
Chris@18
|
5 use Drupal\block_content\Entity\BlockContent;
|
Chris@18
|
6 use Drupal\block_content\Entity\BlockContentType;
|
Chris@18
|
7 use Drupal\Core\Cache\Cache;
|
Chris@18
|
8 use Drupal\Core\Url;
|
Chris@18
|
9 use Drupal\Tests\jsonapi\Traits\CommonCollectionFilterAccessTestPatternsTrait;
|
Chris@18
|
10
|
Chris@18
|
11 /**
|
Chris@18
|
12 * JSON:API integration test for the "BlockContent" content entity type.
|
Chris@18
|
13 *
|
Chris@18
|
14 * @group jsonapi
|
Chris@18
|
15 */
|
Chris@18
|
16 class BlockContentTest extends ResourceTestBase {
|
Chris@18
|
17
|
Chris@18
|
18 use CommonCollectionFilterAccessTestPatternsTrait;
|
Chris@18
|
19
|
Chris@18
|
20 /**
|
Chris@18
|
21 * {@inheritdoc}
|
Chris@18
|
22 */
|
Chris@18
|
23 public static $modules = ['block_content'];
|
Chris@18
|
24
|
Chris@18
|
25 /**
|
Chris@18
|
26 * {@inheritdoc}
|
Chris@18
|
27 */
|
Chris@18
|
28 protected static $entityTypeId = 'block_content';
|
Chris@18
|
29
|
Chris@18
|
30 /**
|
Chris@18
|
31 * {@inheritdoc}
|
Chris@18
|
32 */
|
Chris@18
|
33 protected static $resourceTypeName = 'block_content--basic';
|
Chris@18
|
34
|
Chris@18
|
35 /**
|
Chris@18
|
36 * {@inheritdoc}
|
Chris@18
|
37 *
|
Chris@18
|
38 * @var \Drupal\block_content\BlockContentInterface
|
Chris@18
|
39 */
|
Chris@18
|
40 protected $entity;
|
Chris@18
|
41
|
Chris@18
|
42 /**
|
Chris@18
|
43 * {@inheritdoc}
|
Chris@18
|
44 */
|
Chris@18
|
45 protected static $patchProtectedFieldNames = [
|
Chris@18
|
46 'changed' => NULL,
|
Chris@18
|
47 ];
|
Chris@18
|
48
|
Chris@18
|
49 /**
|
Chris@18
|
50 * {@inheritdoc}
|
Chris@18
|
51 */
|
Chris@18
|
52 protected function setUpAuthorization($method) {
|
Chris@18
|
53 $this->grantPermissionsToTestedRole(['administer blocks']);
|
Chris@18
|
54 }
|
Chris@18
|
55
|
Chris@18
|
56 /**
|
Chris@18
|
57 * {@inheritdoc}
|
Chris@18
|
58 */
|
Chris@18
|
59 public function createEntity() {
|
Chris@18
|
60 if (!BlockContentType::load('basic')) {
|
Chris@18
|
61 $block_content_type = BlockContentType::create([
|
Chris@18
|
62 'id' => 'basic',
|
Chris@18
|
63 'label' => 'basic',
|
Chris@18
|
64 'revision' => FALSE,
|
Chris@18
|
65 ]);
|
Chris@18
|
66 $block_content_type->save();
|
Chris@18
|
67 block_content_add_body_field($block_content_type->id());
|
Chris@18
|
68 }
|
Chris@18
|
69
|
Chris@18
|
70 // Create a "Llama" custom block.
|
Chris@18
|
71 $block_content = BlockContent::create([
|
Chris@18
|
72 'info' => 'Llama',
|
Chris@18
|
73 'type' => 'basic',
|
Chris@18
|
74 'body' => [
|
Chris@18
|
75 'value' => 'The name "llama" was adopted by European settlers from native Peruvians.',
|
Chris@18
|
76 'format' => 'plain_text',
|
Chris@18
|
77 ],
|
Chris@18
|
78 ])
|
Chris@18
|
79 ->setUnpublished();
|
Chris@18
|
80 $block_content->save();
|
Chris@18
|
81 return $block_content;
|
Chris@18
|
82 }
|
Chris@18
|
83
|
Chris@18
|
84 /**
|
Chris@18
|
85 * {@inheritdoc}
|
Chris@18
|
86 */
|
Chris@18
|
87 protected function getExpectedDocument() {
|
Chris@18
|
88 $self_url = Url::fromUri('base:/jsonapi/block_content/basic/' . $this->entity->uuid())->setAbsolute()->toString(TRUE)->getGeneratedUrl();
|
Chris@18
|
89 return [
|
Chris@18
|
90 'jsonapi' => [
|
Chris@18
|
91 'meta' => [
|
Chris@18
|
92 'links' => [
|
Chris@18
|
93 'self' => ['href' => 'http://jsonapi.org/format/1.0/'],
|
Chris@18
|
94 ],
|
Chris@18
|
95 ],
|
Chris@18
|
96 'version' => '1.0',
|
Chris@18
|
97 ],
|
Chris@18
|
98 'links' => [
|
Chris@18
|
99 'self' => ['href' => $self_url],
|
Chris@18
|
100 ],
|
Chris@18
|
101 'data' => [
|
Chris@18
|
102 'id' => $this->entity->uuid(),
|
Chris@18
|
103 'type' => 'block_content--basic',
|
Chris@18
|
104 'links' => [
|
Chris@18
|
105 'self' => ['href' => $self_url],
|
Chris@18
|
106 ],
|
Chris@18
|
107 'attributes' => [
|
Chris@18
|
108 'body' => [
|
Chris@18
|
109 'value' => 'The name "llama" was adopted by European settlers from native Peruvians.',
|
Chris@18
|
110 'format' => 'plain_text',
|
Chris@18
|
111 'summary' => NULL,
|
Chris@18
|
112 'processed' => "<p>The name "llama" was adopted by European settlers from native Peruvians.</p>\n",
|
Chris@18
|
113 ],
|
Chris@18
|
114 'changed' => (new \DateTime())->setTimestamp($this->entity->getChangedTime())->setTimezone(new \DateTimeZone('UTC'))->format(\DateTime::RFC3339),
|
Chris@18
|
115 'info' => 'Llama',
|
Chris@18
|
116 'revision_log' => NULL,
|
Chris@18
|
117 'revision_created' => (new \DateTime())->setTimestamp($this->entity->getRevisionCreationTime())->setTimezone(new \DateTimeZone('UTC'))->format(\DateTime::RFC3339),
|
Chris@18
|
118 'revision_translation_affected' => TRUE,
|
Chris@18
|
119 'status' => FALSE,
|
Chris@18
|
120 'langcode' => 'en',
|
Chris@18
|
121 'default_langcode' => TRUE,
|
Chris@18
|
122 'drupal_internal__id' => 1,
|
Chris@18
|
123 'drupal_internal__revision_id' => 1,
|
Chris@18
|
124 'reusable' => TRUE,
|
Chris@18
|
125 ],
|
Chris@18
|
126 'relationships' => [
|
Chris@18
|
127 'block_content_type' => [
|
Chris@18
|
128 'data' => [
|
Chris@18
|
129 'id' => BlockContentType::load('basic')->uuid(),
|
Chris@18
|
130 'type' => 'block_content_type--block_content_type',
|
Chris@18
|
131 ],
|
Chris@18
|
132 'links' => [
|
Chris@18
|
133 'related' => ['href' => $self_url . '/block_content_type'],
|
Chris@18
|
134 'self' => ['href' => $self_url . '/relationships/block_content_type'],
|
Chris@18
|
135 ],
|
Chris@18
|
136 ],
|
Chris@18
|
137 'revision_user' => [
|
Chris@18
|
138 'data' => NULL,
|
Chris@18
|
139 'links' => [
|
Chris@18
|
140 'related' => ['href' => $self_url . '/revision_user'],
|
Chris@18
|
141 'self' => ['href' => $self_url . '/relationships/revision_user'],
|
Chris@18
|
142 ],
|
Chris@18
|
143 ],
|
Chris@18
|
144 ],
|
Chris@18
|
145 ],
|
Chris@18
|
146 ];
|
Chris@18
|
147 }
|
Chris@18
|
148
|
Chris@18
|
149 /**
|
Chris@18
|
150 * {@inheritdoc}
|
Chris@18
|
151 */
|
Chris@18
|
152 protected function getPostDocument() {
|
Chris@18
|
153 return [
|
Chris@18
|
154 'data' => [
|
Chris@18
|
155 'type' => 'block_content--basic',
|
Chris@18
|
156 'attributes' => [
|
Chris@18
|
157 'info' => 'Dramallama',
|
Chris@18
|
158 ],
|
Chris@18
|
159 ],
|
Chris@18
|
160 ];
|
Chris@18
|
161 }
|
Chris@18
|
162
|
Chris@18
|
163 /**
|
Chris@18
|
164 * {@inheritdoc}
|
Chris@18
|
165 */
|
Chris@18
|
166 protected function getExpectedUnauthorizedAccessCacheability() {
|
Chris@18
|
167 // @see \Drupal\block_content\BlockContentAccessControlHandler()
|
Chris@18
|
168 return parent::getExpectedUnauthorizedAccessCacheability()
|
Chris@18
|
169 ->addCacheTags(['block_content:1']);
|
Chris@18
|
170 }
|
Chris@18
|
171
|
Chris@18
|
172 /**
|
Chris@18
|
173 * {@inheritdoc}
|
Chris@18
|
174 */
|
Chris@18
|
175 protected function getExpectedCacheTags(array $sparse_fieldset = NULL) {
|
Chris@18
|
176 $tags = parent::getExpectedCacheTags($sparse_fieldset);
|
Chris@18
|
177 if ($sparse_fieldset === NULL || in_array('body', $sparse_fieldset)) {
|
Chris@18
|
178 $tags = Cache::mergeTags($tags, ['config:filter.format.plain_text']);
|
Chris@18
|
179 }
|
Chris@18
|
180 return $tags;
|
Chris@18
|
181 }
|
Chris@18
|
182
|
Chris@18
|
183 /**
|
Chris@18
|
184 * {@inheritdoc}
|
Chris@18
|
185 */
|
Chris@18
|
186 protected function getExpectedCacheContexts(array $sparse_fieldset = NULL) {
|
Chris@18
|
187 $contexts = parent::getExpectedCacheContexts($sparse_fieldset);
|
Chris@18
|
188 if ($sparse_fieldset === NULL || in_array('body', $sparse_fieldset)) {
|
Chris@18
|
189 $contexts = Cache::mergeContexts($contexts, ['languages:language_interface', 'theme']);
|
Chris@18
|
190 }
|
Chris@18
|
191 return $contexts;
|
Chris@18
|
192 }
|
Chris@18
|
193
|
Chris@18
|
194 /**
|
Chris@18
|
195 * {@inheritdoc}
|
Chris@18
|
196 */
|
Chris@18
|
197 public function testRelated() {
|
Chris@18
|
198 $this->markTestSkipped('Remove this in https://www.drupal.org/project/jsonapi/issues/2940339');
|
Chris@18
|
199 }
|
Chris@18
|
200
|
Chris@18
|
201 /**
|
Chris@18
|
202 * {@inheritdoc}
|
Chris@18
|
203 */
|
Chris@18
|
204 public function testCollectionFilterAccess() {
|
Chris@18
|
205 $this->entity->setPublished()->save();
|
Chris@18
|
206 $this->doTestCollectionFilterAccessForPublishableEntities('info', NULL, 'administer blocks');
|
Chris@18
|
207 }
|
Chris@18
|
208
|
Chris@18
|
209 }
|