Backup of database 9 Nov 17
[yaffs-website] / web / modules / contrib / permissions_by_term / tests / src / Unit / NodeAccessTest.php
1 <?php
2
3 namespace Drupal\Tests\permissions_by_term\Unit;
4
5 use Drupal\permissions_by_term\NodeAccess;
6 use \Drupal\permissions_by_term\Factory\NodeAccessRecordFactory;
7
8 /**
9  * Class NodeAccess
10  *
11  * @group permissions_by_term
12  */
13 class NodeAccessTest extends \PHPUnit_Framework_TestCase {
14
15   use Base;
16
17   public function testCreateRealms() {
18     $accessStorage = $this->createMock('Drupal\permissions_by_term\AccessStorage',
19       [
20         'fetchUidsByRid' => [999, 87, 44],
21         'getNidsByTid' => [64, 826, 91, 21],
22         'getAllNids' => [12, 55, 88, 3, 5],
23         'getAllUids' => [6, 84, 2, 99, 2],
24         'getNodeType' => 'article',
25         'getLangCode' => 'en'
26       ]
27     );
28     $nodeAccessStorageFactory = new NodeAccessRecordFactory();
29
30     $entityManager = $this->createMock('Drupal\Core\Entity\EntityManager',
31       [
32         'getStorage' => $this->createMock('Storage', [
33           'load' => $this->createMock('Entity', [
34             'hasPermission' => true
35         ]),
36       ])]
37     );
38
39     $accessCheck = $this->createMock('Drupal\permissions_by_term\AccessCheck',
40       [
41         'canUserAccessByNodeId' => TRUE
42       ]
43     );
44
45     $database = $this->createMock('Drupal\Core\Database\Driver\mysql\Connection');
46
47     $nodeAccess = new NodeAccess($accessStorage, $nodeAccessStorageFactory, $entityManager, $accessCheck, $database);
48
49     $this->assertTrue($this->propertiesHaveValues($nodeAccess->createGrants(1)));
50     $this->assertTrue($this->realmContainsNumber($nodeAccess->createGrants(1)));
51   }
52
53   private function realmContainsNumber($objectStack) {
54     foreach ($objectStack as $object) {
55       foreach ($object as $propertyName => $propertyValue) {
56         if ($propertyName == 'realm') {
57           if ($this->stringContainsOneNumbers($propertyValue) === FALSE) {
58             throw new \Exception('The realm does not contain two numbers. It must contain the UID and TID.');
59           }
60         }
61       }
62     }
63
64     return TRUE;
65   }
66
67   private function stringContainsOneNumbers($string) {
68     $numOfNumbers = 0;
69     $elements = explode('_', $string);
70     foreach ($elements as $element) {
71       if (is_numeric($element)) {
72         $numOfNumbers++;
73       }
74     }
75
76     if ($numOfNumbers == 1) {
77       return TRUE;
78     }
79
80     return FALSE;
81   }
82
83   private function propertiesHaveValues($objectStack) {
84     foreach ($objectStack as $object) {
85       foreach ($object as $propertyName => $propertyValue) {
86         if ($propertyValue == '' && $propertyValue != 0) {
87           throw new \Exception('Property with name ' . $propertyName . ' does not contain any value.');
88           return FALSE;
89         }
90       }
91     }
92
93     return TRUE;
94   }
95
96 }