use Dice\Dice;
use Friendica\Database\Database;
-use Friendica\DI;
-use Friendica\Security\PermissionSet\Depository\PermissionSet;
-use Friendica\Test\MockedTest;
+use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
+use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
+use Friendica\Test\DatabaseTest;
use Friendica\Test\Util\Database\StaticDatabase;
-class PermissionSetTest extends MockedTest
+class PermissionSetTest extends DatabaseTest
{
- /** @var PermissionSet */
+ /** @var PermissionSetDepository */
private $depository;
+ /** @var PermissionSetFactory */
+ private $factory;
+ /** @var Database */
+ private $dba;
public function setUp(): void
{
+ parent::setUp();
+
$dice = (new Dice())
->addRules(include __DIR__ . '/../../../../../static/dependencies.config.php')
->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]);
- DI::init($dice);
- $this->depository = DI::permissionSet();
+ $this->depository = $dice->create(PermissionSetDepository::class);
+ $this->factory = $dice->create(PermissionSetFactory::class);
+ $this->dba = $dice->create(Database::class);
}
- public function testSelectOneByIdPublicMissingUid()
+ public function testSelectOneByIdPublic()
{
- $this->expectException(\InvalidArgumentException::class);
+ $permissionSet = $this->depository->selectPublicForUser(1);
- $this->depository->selectOneById(PermissionSet::PUBLIC);
+ $this->assertInstanceOf(\Friendica\Security\PermissionSet\Entity\PermissionSet::class, $permissionSet);
+ self::assertEmpty($permissionSet->allow_cid);
+ self::assertEmpty($permissionSet->allow_gid);
+ self::assertEmpty($permissionSet->deny_cid);
+ self::assertEmpty($permissionSet->deny_gid);
+ self::assertEmpty(PermissionSetDepository::PUBLIC, $permissionSet->id);
+ self::assertEquals(1, $permissionSet->uid);
}
- public function testSelectOneByIdPublic()
+ /**
+ * Test create/update PermissionSets
+ */
+ public function testSaving()
{
- $permissionSet = $this->depository->selectOneById(PermissionSet::PUBLIC, 1);
+ $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
- $this->assertInstanceOf(\Friendica\Security\PermissionSet\Entity\PermissionSet::class, $permissionSet);
+ $permissionSet = $this->factory->createFromString(42, '', '<~>');
+
+ $permissionSet = $this->depository->selectOrCreate($permissionSet);
+
+ self::assertNotNull($permissionSet->id);
+
+ $permissionSetSelected = $this->depository->selectOneById($permissionSet->id, 42);
+
+ self::assertEquals($permissionSet, $permissionSetSelected);
+
+ $newPermissionSet = $permissionSet->withAllowedContacts(['1', '2']);
+ $savedPermissionSet = $this->depository->save($newPermissionSet);
+
+ self::assertNotNull($savedPermissionSet->id);
+ self::assertNull($newPermissionSet->id);
+
+ $permissionSetSavedSelected = $this->depository->selectOneById($savedPermissionSet->id, 42);
+
+ self::assertEquals($savedPermissionSet, $permissionSetSavedSelected);
+
+ $this->dba->delete('permissionset', ['1=1']);
}
}