3 namespace Friendica\Test\src\Profile\ProfileField\Depository;
6 use Friendica\Database\Database;
7 use Friendica\Profile\ProfileField\Depository\ProfileField as ProfileFieldDepository;
8 use Friendica\Profile\ProfileField\Entity\ProfileField;
9 use Friendica\Profile\ProfileField\Exception\ProfileFieldPersistenceException;
10 use Friendica\Profile\ProfileField\Factory\ProfileField as ProfileFieldFactory;
11 use Friendica\Security\PermissionSet\Depository\PermissionSet;
12 use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
13 use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
14 use Friendica\Test\DatabaseTest;
15 use Friendica\Test\Util\Database\StaticDatabase;
17 class ProfileFieldTest extends DatabaseTest
19 /** @var ProfileFieldDepository */
21 /** @var ProfileFieldFactory */
23 /** @var PermissionSetFactory */
24 private $permissionSetFactory;
25 /** @var PermissionSetDepository */
26 private $permissionSetDepository;
30 public function setUp(): void
35 ->addRules(include __DIR__ . '/../../../../../static/dependencies.config.php')
36 ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]);
38 $this->depository = $dice->create(ProfileFieldDepository::class);
39 $this->factory = $dice->create(ProfileFieldFactory::class);
40 $this->permissionSetFactory = $dice->create(PermissionSetFactory::class);
41 $this->permissionSetDepository = $dice->create(PermissionSetDepository::class);
42 $this->dba = $dice->create(Database::class);
46 * Test create ProfileField without a valid PermissionSet
48 public function testSavingWithoutPermissionSet()
50 self::expectExceptionMessage('PermissionSet needs to be saved first.');
51 self::expectException(ProfileFieldPersistenceException::class);
53 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
55 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetFactory->createFromString(42, '', '<~>'));
57 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
59 $this->depository->save($profileField);
63 * Test saving a new entity
65 public function testSaveNew()
67 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
69 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
71 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
73 $savedProfileField = $this->depository->save($profileField);
75 self::assertNotNull($savedProfileField->id);
76 self::assertNull($profileField->id);
78 /** @var ProfileField $selectedProfileField */
79 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
81 self::assertEquals($savedProfileField, $selectedProfileField);
85 * Test updating the order of a ProfileField
87 public function testUpdateOrder()
89 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
91 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
93 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
95 $savedProfileField = $this->depository->save($profileField);
97 self::assertNotNull($savedProfileField->id);
98 self::assertNull($profileField->id);
100 /** @var ProfileField $selectedProfileField */
101 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
103 self::assertEquals($savedProfileField, $selectedProfileField);
105 $selectedProfileField->setOrder(66);
107 $updatedOrderProfileField = $this->depository->save($selectedProfileField);
109 self::assertEquals($selectedProfileField->id, $updatedOrderProfileField->id);
110 self::assertEquals(66, $updatedOrderProfileField->order);
112 // Even using the ID of the old, saved ProfileField returns the right instance
113 $updatedFromOldProfileField = $this->depository->selectOneById($savedProfileField->id);
114 self::assertEquals(66, $updatedFromOldProfileField->order);
118 * Test updating a whole entity
120 public function testUpdate()
122 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
124 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
126 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
128 $savedProfileField = $this->depository->save($profileField);
130 self::assertNotNull($savedProfileField->id);
131 self::assertNull($profileField->id);
133 /** @var ProfileField $selectedProfileField */
134 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
136 self::assertEquals($savedProfileField, $selectedProfileField);
138 $savedProfileField->update('another', 5, $this->permissionSetDepository->selectPublicForUser(42));
139 self::assertEquals(PermissionSet::PUBLIC, $savedProfileField->permissionSet->id);
141 $publicProfileField = $this->depository->save($savedProfileField);
143 self::assertEquals($this->permissionSetDepository->selectPublicForUser(42), $publicProfileField->permissionSet);
144 self::assertEquals('another', $publicProfileField->value);
145 self::assertEquals(5, $publicProfileField->order);