Add tests for the PermissionSet repository
authorPhilipp <admin@philipp.info>
Sun, 31 Oct 2021 12:40:54 +0000 (13:40 +0100)
committerPhilipp <admin@philipp.info>
Sun, 31 Oct 2021 12:50:01 +0000 (13:50 +0100)
tests/src/Security/PermissionSet/Repository/PermissionSetTest.php

index 697c5885fffaa4f73b2033fba1eda3e6c4206ff8..ac0dd9afe7eb97777d43e72e62f6b9803f18cda9 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace Friendica\Test\src\Security\PermissionSet\Repository;
 
+use Friendica\Database\Database;
+use Friendica\Security\PermissionSet\Collection\PermissionSets;
 use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository;
 use Friendica\Security\PermissionSet\Entity\PermissionSet;
 use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
@@ -61,4 +63,150 @@ class PermissionSetTest extends FixtureTest
 
                self::assertEquals($savedPermissionSet, $permissionSetSavedSelected);
        }
+
+       /**
+        * Asserts that the actual permissionset is equal to the expected permissionset
+        *   --> It skips the "id" fields
+        *
+        * @param PermissionSets $expected
+        * @param PermissionSets $actual
+        */
+       public static function assertEqualPermissionSets(PermissionSets $expected, PermissionSets $actual)
+       {
+               self::assertEquals($expected->count(), $actual->count(), 'PermissionSets not even ' . PHP_EOL . 'expected: ' . print_r($expected, true) . 'actual: ' . print_r($actual, true));
+
+               foreach ($expected as $outputPermissionSet) {
+                       self::assertCount(1, $actual->filter(function (PermissionSet $actualPermissionSet) use ($outputPermissionSet) {
+                               return (
+                                       $actualPermissionSet->uid == $outputPermissionSet->uid &&
+                                       $actualPermissionSet->allow_cid == $outputPermissionSet->allow_cid &&
+                                       $actualPermissionSet->allow_gid == $outputPermissionSet->allow_gid &&
+                                       $actualPermissionSet->deny_cid == $outputPermissionSet->deny_cid &&
+                                       $actualPermissionSet->deny_gid == $outputPermissionSet->deny_gid
+                               );
+                       }), 'PermissionSet not found: ' . print_r($outputPermissionSet, true));
+               }
+       }
+
+       public function dataSet()
+       {
+               return [
+                       'standard' => [
+                               'permissionSets' => [
+                                       [
+                                               'uid'       => 42,
+                                               'allow_cid' => '<<43>>',
+                                               'allow_gid' => '',
+                                               'deny_cid'  => '<<44>>',
+                                               'deny_gid'  => '',
+                                       ],
+                                       [
+                                               'uid'       => 42,
+                                               'allow_cid' => '',
+                                               'allow_gid' => '<<>>',
+                                               'deny_cid'  => '',
+                                               'deny_gid'  => '',
+                                       ],
+                                       [
+                                               'uid'       => 42,
+                                               'allow_cid' => '<<44>>',
+                                               'allow_gid' => '',
+                                               'deny_cid'  => '',
+                                               'deny_gid'  => '',
+                                       ],
+                               ],
+                               'assertions' => [
+                                       [
+                                               'input' => [
+                                                       'cid' => 43,
+                                                       'uid' => 42,
+                                               ],
+                                               'output' => new PermissionSets([
+                                                       new PermissionSet(42, [43], [], [44], []),
+                                                       new PermissionSet(42, [], [], [], []),
+                                               ]),
+                                       ],
+                                       [
+                                               'input' => [
+                                                       'cid' => 44,
+                                                       'uid' => 42,
+                                               ],
+                                               'output' => new PermissionSets([
+                                                       new PermissionSet(42, [], [], [], []),
+                                                       new PermissionSet(42, [44], [], [], []),
+                                               ]),
+                                       ],
+                                       [
+                                               'input' => [
+                                                       'cid' => 47,
+                                                       'uid' => 42,
+                                               ],
+                                               'output' => new PermissionSets([
+                                                       new PermissionSet(42, [], [], [], []),
+                                               ]),
+                                       ],
+                               ]
+                       ],
+                       'empty' => [
+                               'permissionSets' => [
+                                       [
+                                               'uid'       => 42,
+                                               'allow_cid' => '',
+                                               'allow_gid' => '<<>>',
+                                               'deny_cid'  => '',
+                                               'deny_gid'  => '',
+                                       ],
+                               ],
+                               'assertions' => [
+                                       [
+                                               'input' => [
+                                                       'cid' => 43,
+                                                       'uid' => 42,
+                                               ],
+                                               'output' => new PermissionSets([
+                                                       new PermissionSet(42, [], [], [], []),
+                                               ]),
+                                       ],
+                                       [
+                                               'input' => [
+                                                       'cid' => 44,
+                                                       'uid' => 42,
+                                               ],
+                                               'output' => new PermissionSets([
+                                                       new PermissionSet(42, [], [], [], []),
+                                               ]),
+                                       ],
+                                       [
+                                               'input' => [
+                                                       'cid' => 47,
+                                                       'uid' => 42,
+                                               ],
+                                               'output' => new PermissionSets([
+                                                       new PermissionSet(42, [], [], [], []),
+                                               ]),
+                                       ],
+                               ]
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider dataSet
+        */
+       public function testSelectContactId(array $inputPermissionSets, array $assertions)
+       {
+               /** @var Database $db */
+               $db = $this->dice->create(Database::class);
+
+
+               foreach ($inputPermissionSets as $inputPermissionSet) {
+                       $db->insert('permissionset', $inputPermissionSet);
+               }
+
+               foreach ($assertions as $assertion) {
+                       $permissionSets = $this->repository->selectByContactId($assertion['input']['cid'], $assertion['input']['uid']);
+                       self::assertInstanceOf(PermissionSets::class, $permissionSets);
+                       self::assertEqualPermissionSets($assertion['output'], $permissionSets);
+               }
+       }
 }