35518cc8564c9db91993fef1302c8fa293fe8e6c
[yaffs-website] / web / modules / contrib / permissions_by_term / tests / src / Kernel / PBTKernelTestBase.php
1 <?php
2
3 namespace Drupal\Tests\permissions_by_term\Kernel;
4
5 use Drupal\Core\Field\FieldStorageDefinitionInterface;
6 use Drupal\field\Entity\FieldConfig;
7 use Drupal\field\Entity\FieldStorageConfig;
8 use Drupal\KernelTests\KernelTestBase;
9 use Drupal\node\Entity\Node;
10 use Drupal\node\Entity\NodeType;
11 use Drupal\permissions_by_term\Service\AccessCheck;
12 use Drupal\permissions_by_term\Service\AccessStorage;
13 use Drupal\taxonomy\Entity\Term;
14 use Drupal\taxonomy\Entity\Vocabulary;
15 use Drupal\user\Entity\User;
16
17 /**
18  * Class PBTKernelTestBase
19  *
20  * @package Drupal\Tests\permissions_by_term\Kernel
21  */
22 abstract class PBTKernelTestBase extends KernelTestBase {
23
24   /**
25    * @var int
26    */
27   protected $nidOneGrantedTerm;
28
29   /**
30    * @var int
31    */
32   protected $nidNoGrantedTerm;
33
34   /**
35    * @var int
36    */
37   protected $nidAllGrantedTerms;
38
39   /**
40    * @var int
41    */
42   protected $nidNoRestriction;
43
44   /**
45    * {@inheritdoc}
46    */
47   public static $modules = ['taxonomy', 'node', 'user', 'text', 'field', 'system', 'permissions_by_term', 'language'];
48
49   /**
50    * @var AccessStorage
51    */
52   protected $accessStorage;
53
54   /**
55    * @var AccessCheck
56    */
57   protected $accessCheck;
58
59   /**
60    * {@inheritdoc}
61    */
62   protected function setUp() {
63     parent::setUp();
64
65     $this->installEntitySchema('user');
66     $this->installSchema('system', ['key_value_expire', 'sequences']);
67     $this->installEntitySchema('node');
68     $this->installEntitySchema('taxonomy_term');
69     $this->installConfig(['permissions_by_term']);
70     $this->installConfig(['language']);
71     $this->installSchema('node', 'node_access');
72     $this->installSchema('permissions_by_term', 'permissions_by_term_user');
73     $this->installSchema('permissions_by_term', 'permissions_by_term_role');
74     $this->accessStorage = $this->container->get('permissions_by_term.access_storage');
75     $this->accessCheck = $this->container->get('permissions_by_term.access_check');
76     \Drupal::configFactory()->getEditable('taxonomy.settings')->set('maintain_index_table', TRUE)->save();
77     $this->createTestVocabularies();
78     $this->createPageNodeType();
79     $this->createCurrentUser();
80   }
81
82   protected function createTestVocabularies() {
83     Vocabulary::create([
84       'name' => 'test',
85       'vid' => 'test',
86     ])->save();
87
88     Vocabulary::create([
89       'name' => 'test2',
90       'vid' => 'test2',
91     ])->save();
92   }
93
94   protected function createPageNodeType() {
95     NodeType::create([
96       'type' => 'page',
97     ])->save();
98     FieldStorageConfig::create([
99       'entity_type' => 'node',
100       'field_name' => 'field_tags',
101       'type' => 'entity_reference',
102       'settings' => [
103         'target_type' => 'taxonomy_term',
104       ],
105       'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
106     ])->save();
107
108     FieldStorageConfig::create([
109       'entity_type' => 'node',
110       'field_name' => 'field_tags2',
111       'type' => 'entity_reference',
112       'settings' => [
113         'target_type' => 'taxonomy_term',
114       ],
115       'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
116     ])->save();
117
118     FieldConfig::create([
119       'field_name' => 'field_tags',
120       'entity_type' => 'node',
121       'bundle' => 'page',
122     ])->save();
123
124     FieldConfig::create([
125       'field_name' => 'field_tags2',
126       'entity_type' => 'node',
127       'bundle' => 'page',
128     ])->save();
129   }
130
131   protected function createCurrentUser() {
132     $testUser = User::create([
133       'uid' => 2,
134       'name' => 'foobar',
135       'mail' => 'foobar@example.com',
136     ]);
137
138     $testUser->save();
139     \Drupal::service('current_user')->setAccount($testUser);
140   }
141
142   /**
143    * @return int
144    */
145   protected function createRelationOneGrantedTerm() {
146     $term = Term::create([
147       'name' => 'term1',
148       'vid' => 'test',
149     ]);
150     $term->save();
151     $tids[] = $term->id();
152
153     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id());
154
155     $term = Term::create([
156       'name' => 'term2',
157       'vid' => 'test',
158     ]);
159     $term->save();
160     $tids[] = $term->id();
161
162     $term = Term::create([
163       'name' => 'term3',
164       'vid' => 'test2',
165     ]);
166     $term->save();
167     $tids[] = $term->id();
168
169     $this->accessStorage->addTermPermissionsByUserIds([99], $term->id());
170
171     $node = Node::create([
172       'type' => 'page',
173       'title' => 'test_title',
174       'field_tags' => [
175         [
176           'target_id' => $tids[0]
177         ],
178         [
179           'target_id' => $tids[1]
180         ],
181       ],
182       'field_tags2' => [
183         [
184           'target_id' => $tids[2]
185         ]
186       ]
187     ]);
188     $node->save();
189     $this->setNidOneGrantedTerm($node->id());
190   }
191
192   /**
193    * @return int
194    */
195   protected function createRelationNoGrantedTerm() {
196     $term = Term::create([
197       'name' => 'term2',
198       'vid' => 'test',
199     ]);
200     $term->save();
201     $tids[] = $term->id();
202
203     $this->accessStorage->addTermPermissionsByUserIds([1], $term->id());
204
205     $node = Node::create([
206       'type' => 'page',
207       'title' => 'test_title',
208       'field_tags' => [
209         [
210           'target_id' => $tids[0]
211         ],
212       ]
213     ]);
214     $node->save();
215     $this->setNidNoGrantedTerm($node->id());
216   }
217
218   protected function createRelationAllGrantedTerms() {
219     $term = Term::create([
220       'name' => 'term1',
221       'vid' => 'test',
222     ]);
223     $term->save();
224     $tids[] = $term->id();
225
226     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id());
227
228     $term = Term::create([
229       'name' => 'term2',
230       'vid' => 'test',
231     ]);
232     $term->save();
233     $tids[] = $term->id();
234
235     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id());
236
237     $node = Node::create([
238       'type' => 'page',
239       'title' => 'test_title',
240       'field_tags' => [
241         [
242           'target_id' => $tids[0]
243         ],
244         [
245           'target_id' => $tids[1]
246         ],
247       ]
248     ]);
249     $node->save();
250     $this->setNidAllGrantedTerms($node->id());
251   }
252
253   protected function createRelationWithoutRestriction() {
254     $term = Term::create([
255       'name' => 'term1',
256       'vid' => 'test',
257     ]);
258     $term->save();
259     $tids[] = $term->id();
260
261     $term = Term::create([
262       'name' => 'term2',
263       'vid' => 'test',
264     ]);
265     $term->save();
266     $tids[] = $term->id();
267
268     $node = Node::create([
269       'type' => 'page',
270       'title' => 'test_title',
271       'field_tags' => [
272         [
273           'target_id' => $tids[0]
274         ],
275         [
276           'target_id' => $tids[1]
277         ],
278       ]
279     ]);
280     $node->save();
281     $this->setNidNoRestriction($node->id());
282   }
283
284
285   protected function getTaxonomyIndex() {
286     return \Drupal::database()->select('taxonomy_index', 'ti')
287       ->fields('ti', ['tid'])
288       ->execute()
289       ->fetchCol();
290   }
291
292   /**
293    * @return int
294    */
295   protected function getNidOneGrantedTerm() {
296     return $this->nidOneGrantedTerm;
297   }
298
299   /**
300    * @param int $nidOneGrantedTerm
301    */
302   protected function setNidOneGrantedTerm($nidOneGrantedTerm) {
303     $this->nidOneGrantedTerm = $nidOneGrantedTerm;
304   }
305
306   /**
307    * @return int
308    */
309   protected function getNidAllGrantedTerms() {
310     return $this->nidAllGrantedTerms;
311   }
312
313   /**
314    * @param int $nidAllGrantedTerms
315    */
316   protected function setNidAllGrantedTerms($nidAllGrantedTerms) {
317     $this->nidAllGrantedTerms = $nidAllGrantedTerms;
318   }
319
320   /**
321    * @return int
322    */
323   protected function getNidNoGrantedTerm() {
324     return $this->nidNoGrantedTerm;
325   }
326
327   /**
328    * @param int $nidNoGrantedTerm
329    */
330   protected function setNidNoGrantedTerm($nidNoGrantedTerm) {
331     $this->nidNoGrantedTerm = $nidNoGrantedTerm;
332   }
333
334   /**
335    * @return int
336    */
337   protected function getNidNoRestriction() {
338     return $this->nidNoRestriction;
339   }
340
341   /**
342    * @param int $nidNoRestiction
343    */
344   protected function setNidNoRestriction($nidNoRestiction) {
345     $this->nidNoRestriction = $nidNoRestiction;
346   }
347
348 }