Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / permissions_by_term / tests / src / Kernel / MultilingualTest.php
1 <?php
2
3 namespace Drupal\Tests\permissions_by_term\Kernel;
4
5 use Drupal\language\Entity\ConfigurableLanguage;
6 use Drupal\node\Entity\Node;
7 use Drupal\permissions_by_term\Service\NodeEntityBundleInfo;
8 use Drupal\taxonomy\Entity\Term;
9 use Drupal\taxonomy\Entity\Vocabulary;
10 use Drupal\taxonomy\Tests\TaxonomyTestTrait;
11 use Drupal\user\Entity\User;
12
13 /**
14  * @group permissions_by_term
15  */
16 class MultilingualTest extends PBTKernelTestBase {
17
18   use TaxonomyTestTrait;
19
20   /**
21    * @var NodeEntityBundleInfo
22    */
23   private $nodeEntityBundleInfo;
24
25   /**
26    * {@inheritdoc}
27    */
28   protected function setUp() {
29     parent::setUp();
30     $this->nodeEntityBundleInfo = $this->container->get('permissions_by_term.node_entity_bundle_info');
31   }
32
33   public function testCanAccess() {
34     Vocabulary::create([
35       'name'     => 'Test Multilingual',
36       'vid'      => 'test_multilingual',
37       'langcode' => 'de',
38     ])->save();
39
40     $term = Term::create([
41       'name'     => 'term1',
42       'vid'      => 'test',
43       'langcode' => 'de',
44     ]);
45     $term->save();
46
47     $node = Node::create([
48       'type' => 'page',
49       'title' => 'test_title',
50       'field_tags' => [
51         [
52           'target_id' => $term->id()
53         ],
54       ]
55     ]);
56     $node->save();
57
58     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id(), 'de');
59     $this->assertTrue($this->accessCheck->canUserAccessByNodeId($node->id()));
60   }
61
62   public function testCanNotAccess() {
63     list($termDe, $nodeDe, $term, $node, $user) = $this->setupEntities();
64
65     $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id(), 'en');
66     $this->accessStorage->addTermPermissionsByUserIds([$user->id()], $termDe->id(), 'de');
67
68     /**
69      * @var User $user
70      */
71     $user = user_load_by_name('some_username123');
72
73     $this->assertTrue($this->accessCheck->canUserAccessByNodeId($node->id(), \Drupal::service('current_user')->id()));
74     $this->assertFalse($this->accessCheck->canUserAccessByNodeId($nodeDe->id(), \Drupal::service('current_user')->id(), 'de'));
75     $this->assertTrue($this->accessCheck->canUserAccessByNodeId($nodeDe->id(), $user->id(), 'de'));
76   }
77
78   private function setupEntities() {
79     $i = 0;
80     foreach (['de'] as $langcode) {
81       $language = ConfigurableLanguage::createFromLangcode($langcode);
82       $language->set('weight', $i--);
83       $language->save();
84     }
85
86     Vocabulary::create([
87       'name'     => 'Test English',
88       'vid'      => 'test_multilingual_en',
89       'langcode' => 'en',
90     ])->save();
91
92     Vocabulary::create([
93       'name'     => 'Test German',
94       'vid'      => 'test_multilingual_de',
95       'langcode' => 'de',
96     ])->save();
97
98     $term = Term::create([
99       'name'     => 'term1',
100       'vid'      => 'test_multilingual_en',
101       'langcode' => 'en',
102     ]);
103     $term->save();
104
105     $node = Node::create([
106       'type'       => 'page',
107       'title'      => 'test_title',
108       'field_tags' => [
109         [
110           'target_id' => $term->id()
111         ],
112       ]
113     ]);
114     $node->save();
115
116     $termDe = Term::create([
117       'name'     => 'term DE',
118       'vid'      => 'test_multilingual_de',
119       'langcode' => 'de',
120     ]);
121     $termDe->save();
122
123     $nodeDe = $node->addTranslation('de');
124     $nodeDe->title = 'Node Übersetzung';
125     $nodeDe->field_tags = [
126       [
127         'target_id' => $termDe->id()
128       ],
129     ];
130     $nodeDe->save();
131
132     $user = User::create([
133       'name'   => 'some_username123',
134       'status' => 1,
135     ]);
136     $user->save();
137
138     return [$termDe, $nodeDe, $term, $node, $user];
139   }
140
141 }