Chris@18
|
1 <?php
|
Chris@18
|
2
|
Chris@18
|
3 namespace Drupal\Tests\jsonapi\Functional;
|
Chris@18
|
4
|
Chris@18
|
5 use Drupal\aggregator\Entity\Feed;
|
Chris@18
|
6 use Drupal\Core\Url;
|
Chris@18
|
7 use Drupal\Tests\jsonapi\Traits\CommonCollectionFilterAccessTestPatternsTrait;
|
Chris@18
|
8
|
Chris@18
|
9 /**
|
Chris@18
|
10 * JSON:API integration test for the "Feed" content entity type.
|
Chris@18
|
11 *
|
Chris@18
|
12 * @group jsonapi
|
Chris@18
|
13 */
|
Chris@18
|
14 class FeedTest 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 = ['aggregator'];
|
Chris@18
|
22
|
Chris@18
|
23 /**
|
Chris@18
|
24 * {@inheritdoc}
|
Chris@18
|
25 */
|
Chris@18
|
26 protected static $entityTypeId = 'aggregator_feed';
|
Chris@18
|
27
|
Chris@18
|
28 /**
|
Chris@18
|
29 * {@inheritdoc}
|
Chris@18
|
30 */
|
Chris@18
|
31 protected static $resourceTypeName = 'aggregator_feed--aggregator_feed';
|
Chris@18
|
32
|
Chris@18
|
33 /**
|
Chris@18
|
34 * {@inheritdoc}
|
Chris@18
|
35 *
|
Chris@18
|
36 * @var \Drupal\config_test\ConfigTestInterface
|
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
|
Chris@18
|
45 /**
|
Chris@18
|
46 * {@inheritdoc}
|
Chris@18
|
47 */
|
Chris@18
|
48 protected static $uniqueFieldNames = ['url'];
|
Chris@18
|
49
|
Chris@18
|
50 /**
|
Chris@18
|
51 * {@inheritdoc}
|
Chris@18
|
52 */
|
Chris@18
|
53 protected function setUpAuthorization($method) {
|
Chris@18
|
54 switch ($method) {
|
Chris@18
|
55 case 'GET':
|
Chris@18
|
56 $this->grantPermissionsToTestedRole(['access news feeds']);
|
Chris@18
|
57 break;
|
Chris@18
|
58
|
Chris@18
|
59 case 'POST':
|
Chris@18
|
60 case 'PATCH':
|
Chris@18
|
61 case 'DELETE':
|
Chris@18
|
62 $this->grantPermissionsToTestedRole(['administer news feeds']);
|
Chris@18
|
63 break;
|
Chris@18
|
64 }
|
Chris@18
|
65 }
|
Chris@18
|
66
|
Chris@18
|
67 /**
|
Chris@18
|
68 * {@inheritdoc}
|
Chris@18
|
69 */
|
Chris@18
|
70 public function createEntity() {
|
Chris@18
|
71 $feed = Feed::create();
|
Chris@18
|
72 $feed->set('fid', 1)
|
Chris@18
|
73 ->setTitle('Feed')
|
Chris@18
|
74 ->setUrl('http://example.com/rss.xml')
|
Chris@18
|
75 ->setDescription('Feed Resource Test 1')
|
Chris@18
|
76 ->setRefreshRate(900)
|
Chris@18
|
77 ->setLastCheckedTime(123456789)
|
Chris@18
|
78 ->setQueuedTime(123456789)
|
Chris@18
|
79 ->setWebsiteUrl('http://example.com')
|
Chris@18
|
80 ->setImage('http://example.com/feed_logo')
|
Chris@18
|
81 ->setHash('abcdefg')
|
Chris@18
|
82 ->setEtag('hijklmn')
|
Chris@18
|
83 ->setLastModified(123456789)
|
Chris@18
|
84 ->save();
|
Chris@18
|
85
|
Chris@18
|
86 return $feed;
|
Chris@18
|
87 }
|
Chris@18
|
88
|
Chris@18
|
89 /**
|
Chris@18
|
90 * {@inheritdoc}
|
Chris@18
|
91 */
|
Chris@18
|
92 protected function createAnotherEntity($key) {
|
Chris@18
|
93 /* @var \Drupal\aggregator\FeedInterface $duplicate */
|
Chris@18
|
94 $duplicate = $this->getEntityDuplicate($this->entity, $key);
|
Chris@18
|
95 $duplicate->set('field_rest_test', 'Duplicate feed entity');
|
Chris@18
|
96 $duplicate->setUrl("http://example.com/$key.xml");
|
Chris@18
|
97 $duplicate->save();
|
Chris@18
|
98 return $duplicate;
|
Chris@18
|
99 }
|
Chris@18
|
100
|
Chris@18
|
101 /**
|
Chris@18
|
102 * {@inheritdoc}
|
Chris@18
|
103 */
|
Chris@18
|
104 protected function getExpectedDocument() {
|
Chris@18
|
105 $self_url = Url::fromUri('base:/jsonapi/aggregator_feed/aggregator_feed/' . $this->entity->uuid())->setAbsolute()->toString(TRUE)->getGeneratedUrl();
|
Chris@18
|
106 return [
|
Chris@18
|
107 'jsonapi' => [
|
Chris@18
|
108 'meta' => [
|
Chris@18
|
109 'links' => [
|
Chris@18
|
110 'self' => ['href' => 'http://jsonapi.org/format/1.0/'],
|
Chris@18
|
111 ],
|
Chris@18
|
112 ],
|
Chris@18
|
113 'version' => '1.0',
|
Chris@18
|
114 ],
|
Chris@18
|
115 'links' => [
|
Chris@18
|
116 'self' => ['href' => $self_url],
|
Chris@18
|
117 ],
|
Chris@18
|
118 'data' => [
|
Chris@18
|
119 'id' => $this->entity->uuid(),
|
Chris@18
|
120 'type' => 'aggregator_feed--aggregator_feed',
|
Chris@18
|
121 'links' => [
|
Chris@18
|
122 'self' => ['href' => $self_url],
|
Chris@18
|
123 ],
|
Chris@18
|
124 'attributes' => [
|
Chris@18
|
125 'url' => 'http://example.com/rss.xml',
|
Chris@18
|
126 'title' => 'Feed',
|
Chris@18
|
127 'refresh' => 900,
|
Chris@18
|
128 'checked' => '1973-11-29T21:33:09+00:00',
|
Chris@18
|
129 'queued' => '1973-11-29T21:33:09+00:00',
|
Chris@18
|
130 'link' => 'http://example.com',
|
Chris@18
|
131 'description' => 'Feed Resource Test 1',
|
Chris@18
|
132 'image' => 'http://example.com/feed_logo',
|
Chris@18
|
133 'hash' => 'abcdefg',
|
Chris@18
|
134 'etag' => 'hijklmn',
|
Chris@18
|
135 'modified' => '1973-11-29T21:33:09+00:00',
|
Chris@18
|
136 'langcode' => 'en',
|
Chris@18
|
137 'drupal_internal__fid' => 1,
|
Chris@18
|
138 ],
|
Chris@18
|
139 ],
|
Chris@18
|
140 ];
|
Chris@18
|
141 }
|
Chris@18
|
142
|
Chris@18
|
143 /**
|
Chris@18
|
144 * {@inheritdoc}
|
Chris@18
|
145 */
|
Chris@18
|
146 protected function getPostDocument() {
|
Chris@18
|
147 return [
|
Chris@18
|
148 'data' => [
|
Chris@18
|
149 'type' => 'aggregator_feed--aggregator_feed',
|
Chris@18
|
150 'attributes' => [
|
Chris@18
|
151 'title' => 'Feed Resource Post Test',
|
Chris@18
|
152 'url' => 'http://example.com/feed',
|
Chris@18
|
153 'refresh' => 900,
|
Chris@18
|
154 'description' => 'Feed Resource Post Test Description',
|
Chris@18
|
155 ],
|
Chris@18
|
156 ],
|
Chris@18
|
157 ];
|
Chris@18
|
158 }
|
Chris@18
|
159
|
Chris@18
|
160 /**
|
Chris@18
|
161 * {@inheritdoc}
|
Chris@18
|
162 */
|
Chris@18
|
163 protected function getExpectedUnauthorizedAccessMessage($method) {
|
Chris@18
|
164 switch ($method) {
|
Chris@18
|
165 case 'GET':
|
Chris@18
|
166 return "The 'access news feeds' permission is required.";
|
Chris@18
|
167
|
Chris@18
|
168 case 'POST':
|
Chris@18
|
169 case 'PATCH':
|
Chris@18
|
170 case 'DELETE':
|
Chris@18
|
171 return "The 'administer news feeds' permission is required.";
|
Chris@18
|
172 }
|
Chris@18
|
173 }
|
Chris@18
|
174
|
Chris@18
|
175 /**
|
Chris@18
|
176 * {@inheritdoc}
|
Chris@18
|
177 */
|
Chris@18
|
178 public function testCollectionFilterAccess() {
|
Chris@18
|
179 $this->doTestCollectionFilterAccessBasedOnPermissions('title', 'access news feeds');
|
Chris@18
|
180 }
|
Chris@18
|
181
|
Chris@18
|
182 }
|