Version 1
[yaffs-website] / web / modules / contrib / permissions_by_term / tests / src / Unit / NodeAccessTest.php
diff --git a/web/modules/contrib/permissions_by_term/tests/src/Unit/NodeAccessTest.php b/web/modules/contrib/permissions_by_term/tests/src/Unit/NodeAccessTest.php
new file mode 100644 (file)
index 0000000..934ed7d
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+
+namespace Drupal\Tests\permissions_by_term\Unit;
+
+use Drupal\permissions_by_term\NodeAccess;
+use \Drupal\permissions_by_term\Factory\NodeAccessRecordFactory;
+
+/**
+ * Class NodeAccess
+ *
+ * @group permissions_by_term
+ */
+class NodeAccessTest extends \PHPUnit_Framework_TestCase {
+
+  use Base;
+
+  public function testCreateRealms() {
+    $accessStorage = $this->createMock('Drupal\permissions_by_term\AccessStorage',
+      [
+        'fetchUidsByRid' => [999, 87, 44],
+        'getNidsByTid' => [64, 826, 91, 21],
+        'getAllNids' => [12, 55, 88, 3, 5],
+        'getAllUids' => [6, 84, 2, 99, 2],
+        'getNodeType' => 'article',
+        'getLangCode' => 'en'
+      ]
+    );
+    $nodeAccessStorageFactory = new NodeAccessRecordFactory();
+
+    $entityManager = $this->createMock('Drupal\Core\Entity\EntityManager',
+      [
+        'getStorage' => $this->createMock('Storage', [
+          'load' => $this->createMock('Entity', [
+            'hasPermission' => true
+        ]),
+      ])]
+    );
+
+    $accessCheck = $this->createMock('Drupal\permissions_by_term\AccessCheck',
+      [
+        'canUserAccessByNodeId' => TRUE
+      ]
+    );
+
+    $database = $this->createMock('Drupal\Core\Database\Driver\mysql\Connection');
+
+    $nodeAccess = new NodeAccess($accessStorage, $nodeAccessStorageFactory, $entityManager, $accessCheck, $database);
+
+    $this->assertTrue($this->propertiesHaveValues($nodeAccess->createGrants(1)));
+    $this->assertTrue($this->realmContainsNumber($nodeAccess->createGrants(1)));
+  }
+
+  private function realmContainsNumber($objectStack) {
+    foreach ($objectStack as $object) {
+      foreach ($object as $propertyName => $propertyValue) {
+        if ($propertyName == 'realm') {
+          if ($this->stringContainsOneNumbers($propertyValue) === FALSE) {
+            throw new \Exception('The realm does not contain two numbers. It must contain the UID and TID.');
+          }
+        }
+      }
+    }
+
+    return TRUE;
+  }
+
+  private function stringContainsOneNumbers($string) {
+    $numOfNumbers = 0;
+    $elements = explode('_', $string);
+    foreach ($elements as $element) {
+      if (is_numeric($element)) {
+        $numOfNumbers++;
+      }
+    }
+
+    if ($numOfNumbers == 1) {
+      return TRUE;
+    }
+
+    return FALSE;
+  }
+
+  private function propertiesHaveValues($objectStack) {
+    foreach ($objectStack as $object) {
+      foreach ($object as $propertyName => $propertyValue) {
+        if ($propertyValue == '' && $propertyValue != 0) {
+          throw new \Exception('Property with name ' . $propertyName . ' does not contain any value.');
+          return FALSE;
+        }
+      }
+    }
+
+    return TRUE;
+  }
+
+}