--- /dev/null
+<?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;
+ }
+
+}