Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / permissions_by_term / tests / src / Kernel / MultilingualTest.php
diff --git a/web/modules/contrib/permissions_by_term/tests/src/Kernel/MultilingualTest.php b/web/modules/contrib/permissions_by_term/tests/src/Kernel/MultilingualTest.php
new file mode 100644 (file)
index 0000000..a1e1035
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+
+namespace Drupal\Tests\permissions_by_term\Kernel;
+
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\node\Entity\Node;
+use Drupal\permissions_by_term\Service\NodeEntityBundleInfo;
+use Drupal\taxonomy\Entity\Term;
+use Drupal\taxonomy\Entity\Vocabulary;
+use Drupal\taxonomy\Tests\TaxonomyTestTrait;
+use Drupal\user\Entity\User;
+
+/**
+ * @group permissions_by_term
+ */
+class MultilingualTest extends PBTKernelTestBase {
+
+  use TaxonomyTestTrait;
+
+  /**
+   * @var NodeEntityBundleInfo
+   */
+  private $nodeEntityBundleInfo;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->nodeEntityBundleInfo = $this->container->get('permissions_by_term.node_entity_bundle_info');
+  }
+
+  public function testCanAccess() {
+    Vocabulary::create([
+      'name'     => 'Test Multilingual',
+      'vid'      => 'test_multilingual',
+      'langcode' => 'de',
+    ])->save();
+
+    $term = Term::create([
+      'name'     => 'term1',
+      'vid'      => 'test',
+      'langcode' => 'de',
+    ]);
+    $term->save();
+
+    $node = Node::create([
+      'type' => 'page',
+      'title' => 'test_title',
+      'field_tags' => [
+        [
+          'target_id' => $term->id()
+        ],
+      ]
+    ]);
+    $node->save();
+
+    $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id(), 'de');
+    $this->assertTrue($this->accessCheck->canUserAccessByNodeId($node->id()));
+  }
+
+  public function testCanNotAccess() {
+    list($termDe, $nodeDe, $term, $node, $user) = $this->setupEntities();
+
+    $this->accessStorage->addTermPermissionsByUserIds([\Drupal::service('current_user')->id()], $term->id(), 'en');
+    $this->accessStorage->addTermPermissionsByUserIds([$user->id()], $termDe->id(), 'de');
+
+    /**
+     * @var User $user
+     */
+    $user = user_load_by_name('some_username123');
+
+    $this->assertTrue($this->accessCheck->canUserAccessByNodeId($node->id(), \Drupal::service('current_user')->id()));
+    $this->assertFalse($this->accessCheck->canUserAccessByNodeId($nodeDe->id(), \Drupal::service('current_user')->id(), 'de'));
+    $this->assertTrue($this->accessCheck->canUserAccessByNodeId($nodeDe->id(), $user->id(), 'de'));
+  }
+
+  private function setupEntities() {
+    $i = 0;
+    foreach (['de'] as $langcode) {
+      $language = ConfigurableLanguage::createFromLangcode($langcode);
+      $language->set('weight', $i--);
+      $language->save();
+    }
+
+    Vocabulary::create([
+      'name'     => 'Test English',
+      'vid'      => 'test_multilingual_en',
+      'langcode' => 'en',
+    ])->save();
+
+    Vocabulary::create([
+      'name'     => 'Test German',
+      'vid'      => 'test_multilingual_de',
+      'langcode' => 'de',
+    ])->save();
+
+    $term = Term::create([
+      'name'     => 'term1',
+      'vid'      => 'test_multilingual_en',
+      'langcode' => 'en',
+    ]);
+    $term->save();
+
+    $node = Node::create([
+      'type'       => 'page',
+      'title'      => 'test_title',
+      'field_tags' => [
+        [
+          'target_id' => $term->id()
+        ],
+      ]
+    ]);
+    $node->save();
+
+    $termDe = Term::create([
+      'name'     => 'term DE',
+      'vid'      => 'test_multilingual_de',
+      'langcode' => 'de',
+    ]);
+    $termDe->save();
+
+    $nodeDe = $node->addTranslation('de');
+    $nodeDe->title = 'Node Übersetzung';
+    $nodeDe->field_tags = [
+      [
+        'target_id' => $termDe->id()
+      ],
+    ];
+    $nodeDe->save();
+
+    $user = User::create([
+      'name'   => 'some_username123',
+      'status' => 1,
+    ]);
+    $user->save();
+
+    return [$termDe, $nodeDe, $term, $node, $user];
+  }
+
+}
\ No newline at end of file