Chris@18
|
1 <?php
|
Chris@18
|
2
|
Chris@18
|
3 namespace Drupal\Tests\jsonapi\Functional;
|
Chris@18
|
4
|
Chris@18
|
5 use Drupal\Core\Url;
|
Chris@18
|
6 use Drupal\menu_link_content\Entity\MenuLinkContent;
|
Chris@18
|
7 use Drupal\Tests\jsonapi\Traits\CommonCollectionFilterAccessTestPatternsTrait;
|
Chris@18
|
8
|
Chris@18
|
9 /**
|
Chris@18
|
10 * JSON:API integration test for the "MenuLinkContent" content entity type.
|
Chris@18
|
11 *
|
Chris@18
|
12 * @group jsonapi
|
Chris@18
|
13 */
|
Chris@18
|
14 class MenuLinkContentTest extends ResourceTestBase {
|
Chris@18
|
15
|
Chris@18
|
16 use CommonCollectionFilterAccessTestPatternsTrait;
|
Chris@18
|
17
|
Chris@18
|
18 /**
|
Chris@18
|
19 * {@inheritdoc}
|
Chris@18
|
20 */
|
Chris@18
|
21 public static $modules = ['menu_link_content'];
|
Chris@18
|
22
|
Chris@18
|
23 /**
|
Chris@18
|
24 * {@inheritdoc}
|
Chris@18
|
25 */
|
Chris@18
|
26 protected static $entityTypeId = 'menu_link_content';
|
Chris@18
|
27
|
Chris@18
|
28 /**
|
Chris@18
|
29 * {@inheritdoc}
|
Chris@18
|
30 */
|
Chris@18
|
31 protected static $resourceTypeName = 'menu_link_content--menu_link_content';
|
Chris@18
|
32
|
Chris@18
|
33 /**
|
Chris@18
|
34 * {@inheritdoc}
|
Chris@18
|
35 *
|
Chris@18
|
36 * @var \Drupal\menu_link_content\MenuLinkContentInterface
|
Chris@18
|
37 */
|
Chris@18
|
38 protected $entity;
|
Chris@18
|
39
|
Chris@18
|
40 /**
|
Chris@18
|
41 * {@inheritdoc}
|
Chris@18
|
42 */
|
Chris@18
|
43 protected static $patchProtectedFieldNames = [
|
Chris@18
|
44 'changed' => NULL,
|
Chris@18
|
45 ];
|
Chris@18
|
46
|
Chris@18
|
47 /**
|
Chris@18
|
48 * {@inheritdoc}
|
Chris@18
|
49 */
|
Chris@18
|
50 protected function setUpAuthorization($method) {
|
Chris@18
|
51 $this->grantPermissionsToTestedRole(['administer menu']);
|
Chris@18
|
52 }
|
Chris@18
|
53
|
Chris@18
|
54 /**
|
Chris@18
|
55 * {@inheritdoc}
|
Chris@18
|
56 */
|
Chris@18
|
57 protected function createEntity() {
|
Chris@18
|
58 $menu_link = MenuLinkContent::create([
|
Chris@18
|
59 'id' => 'llama',
|
Chris@18
|
60 'title' => 'Llama Gabilondo',
|
Chris@18
|
61 'description' => 'Llama Gabilondo',
|
Chris@18
|
62 'link' => 'https://nl.wikipedia.org/wiki/Llama',
|
Chris@18
|
63 'weight' => 0,
|
Chris@18
|
64 'menu_name' => 'main',
|
Chris@18
|
65 ]);
|
Chris@18
|
66 $menu_link->save();
|
Chris@18
|
67
|
Chris@18
|
68 return $menu_link;
|
Chris@18
|
69 }
|
Chris@18
|
70
|
Chris@18
|
71 /**
|
Chris@18
|
72 * {@inheritdoc}
|
Chris@18
|
73 */
|
Chris@18
|
74 protected function getExpectedDocument() {
|
Chris@18
|
75 $self_url = Url::fromUri('base:/jsonapi/menu_link_content/menu_link_content/' . $this->entity->uuid())->setAbsolute()->toString(TRUE)->getGeneratedUrl();
|
Chris@18
|
76 return [
|
Chris@18
|
77 'jsonapi' => [
|
Chris@18
|
78 'meta' => [
|
Chris@18
|
79 'links' => [
|
Chris@18
|
80 'self' => ['href' => 'http://jsonapi.org/format/1.0/'],
|
Chris@18
|
81 ],
|
Chris@18
|
82 ],
|
Chris@18
|
83 'version' => '1.0',
|
Chris@18
|
84 ],
|
Chris@18
|
85 'links' => [
|
Chris@18
|
86 'self' => ['href' => $self_url],
|
Chris@18
|
87 ],
|
Chris@18
|
88 'data' => [
|
Chris@18
|
89 'id' => $this->entity->uuid(),
|
Chris@18
|
90 'type' => 'menu_link_content--menu_link_content',
|
Chris@18
|
91 'links' => [
|
Chris@18
|
92 'self' => ['href' => $self_url],
|
Chris@18
|
93 ],
|
Chris@18
|
94 'attributes' => [
|
Chris@18
|
95 'bundle' => 'menu_link_content',
|
Chris@18
|
96 'link' => [
|
Chris@18
|
97 'uri' => 'https://nl.wikipedia.org/wiki/Llama',
|
Chris@18
|
98 'title' => NULL,
|
Chris@18
|
99 'options' => [],
|
Chris@18
|
100 ],
|
Chris@18
|
101 'changed' => (new \DateTime())->setTimestamp($this->entity->getChangedTime())->setTimezone(new \DateTimeZone('UTC'))->format(\DateTime::RFC3339),
|
Chris@18
|
102 'default_langcode' => TRUE,
|
Chris@18
|
103 'description' => 'Llama Gabilondo',
|
Chris@18
|
104 'enabled' => TRUE,
|
Chris@18
|
105 'expanded' => FALSE,
|
Chris@18
|
106 'external' => FALSE,
|
Chris@18
|
107 'langcode' => 'en',
|
Chris@18
|
108 'menu_name' => 'main',
|
Chris@18
|
109 'parent' => NULL,
|
Chris@18
|
110 'rediscover' => FALSE,
|
Chris@18
|
111 'title' => 'Llama Gabilondo',
|
Chris@18
|
112 'weight' => 0,
|
Chris@18
|
113 'drupal_internal__id' => 1,
|
Chris@18
|
114 'drupal_internal__revision_id' => 1,
|
Chris@18
|
115 'revision_created' => (new \DateTime())->setTimestamp($this->entity->getRevisionCreationTime())->setTimezone(new \DateTimeZone('UTC'))->format(\DateTime::RFC3339),
|
Chris@18
|
116 'revision_log_message' => NULL,
|
Chris@18
|
117 // @todo Attempt to remove this in https://www.drupal.org/project/drupal/issues/2933518.
|
Chris@18
|
118 'revision_translation_affected' => TRUE,
|
Chris@18
|
119 ],
|
Chris@18
|
120 'relationships' => [
|
Chris@18
|
121 'revision_user' => [
|
Chris@18
|
122 'data' => NULL,
|
Chris@18
|
123 'links' => [
|
Chris@18
|
124 'related' => [
|
Chris@18
|
125 'href' => $self_url . '/revision_user',
|
Chris@18
|
126 ],
|
Chris@18
|
127 'self' => [
|
Chris@18
|
128 'href' => $self_url . '/relationships/revision_user',
|
Chris@18
|
129 ],
|
Chris@18
|
130 ],
|
Chris@18
|
131 ],
|
Chris@18
|
132 ],
|
Chris@18
|
133 ],
|
Chris@18
|
134 ];
|
Chris@18
|
135 }
|
Chris@18
|
136
|
Chris@18
|
137 /**
|
Chris@18
|
138 * {@inheritdoc}
|
Chris@18
|
139 */
|
Chris@18
|
140 protected function getPostDocument() {
|
Chris@18
|
141 return [
|
Chris@18
|
142 'data' => [
|
Chris@18
|
143 'type' => 'menu_link_content--menu_link_content',
|
Chris@18
|
144 'attributes' => [
|
Chris@18
|
145 'title' => 'Dramallama',
|
Chris@18
|
146 'link' => [
|
Chris@18
|
147 'uri' => 'http://www.urbandictionary.com/define.php?term=drama%20llama',
|
Chris@18
|
148 ],
|
Chris@18
|
149 ],
|
Chris@18
|
150 ],
|
Chris@18
|
151 ];
|
Chris@18
|
152 }
|
Chris@18
|
153
|
Chris@18
|
154 /**
|
Chris@18
|
155 * {@inheritdoc}
|
Chris@18
|
156 */
|
Chris@18
|
157 protected function getExpectedUnauthorizedAccessMessage($method) {
|
Chris@18
|
158 switch ($method) {
|
Chris@18
|
159 case 'DELETE':
|
Chris@18
|
160 return "The 'administer menu' permission is required.";
|
Chris@18
|
161
|
Chris@18
|
162 default:
|
Chris@18
|
163 return parent::getExpectedUnauthorizedAccessMessage($method);
|
Chris@18
|
164 }
|
Chris@18
|
165 }
|
Chris@18
|
166
|
Chris@18
|
167 /**
|
Chris@18
|
168 * {@inheritdoc}
|
Chris@18
|
169 */
|
Chris@18
|
170 public function testRelated() {
|
Chris@18
|
171 $this->markTestSkipped('Remove this in https://www.drupal.org/project/jsonapi/issues/2940339');
|
Chris@18
|
172 }
|
Chris@18
|
173
|
Chris@18
|
174 /**
|
Chris@18
|
175 * {@inheritdoc}
|
Chris@18
|
176 */
|
Chris@18
|
177 public function testCollectionFilterAccess() {
|
Chris@18
|
178 $this->doTestCollectionFilterAccessBasedOnPermissions('title', 'administer menu');
|
Chris@18
|
179 }
|
Chris@18
|
180
|
Chris@18
|
181 }
|