3 namespace Friendica\Test\src\Profile\ProfileField\Depository;
6 use Friendica\Database\Database;
8 use Friendica\Profile\ProfileField\Depository\ProfileField as ProfileFieldDepository;
9 use Friendica\Profile\ProfileField\Entity\ProfileField;
10 use Friendica\Profile\ProfileField\Exception\ProfileFieldPersistenceException;
11 use Friendica\Profile\ProfileField\Factory\ProfileField as ProfileFieldFactory;
12 use Friendica\Security\PermissionSet\Depository\PermissionSet;
13 use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
14 use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
15 use Friendica\Test\DatabaseTest;
16 use Friendica\Test\Util\Database\StaticDatabase;
18 class ProfileFieldTest extends DatabaseTest
20 /** @var ProfileFieldDepository */
22 /** @var ProfileFieldFactory */
24 /** @var PermissionSetFactory */
25 private $permissionSetFactory;
26 /** @var PermissionSetDepository */
27 private $permissionSetDepository;
31 public function setUp(): void
36 ->addRules(include __DIR__ . '/../../../../../static/dependencies.config.php')
37 ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]);
39 $this->depository = $dice->create(ProfileFieldDepository::class);
40 $this->factory = $dice->create(ProfileFieldFactory::class);
41 $this->permissionSetFactory = $dice->create(PermissionSetFactory::class);
42 $this->permissionSetDepository = $dice->create(PermissionSetDepository::class);
43 $this->dba = $dice->create(Database::class);
47 * Test create ProfileField without a valid PermissionSet
49 public function testSavingWithoutPermissionSet()
51 self::expectExceptionMessage('PermissionSet needs to be saved first.');
52 self::expectException(ProfileFieldPersistenceException::class);
54 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', DI::dba());
56 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetFactory->createFromString(42, '', '<~>'));
58 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
60 $this->depository->save($profileField);
64 * Test saving a new entity
66 public function testSaveNew()
68 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', DI::dba());
70 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
72 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
74 $savedProfileField = $this->depository->save($profileField);
76 self::assertNotNull($savedProfileField->id);
77 self::assertNull($profileField->id);
79 /** @var ProfileField $selectedProfileField */
80 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
82 self::assertEquals($savedProfileField, $selectedProfileField);
86 * Test updating the order of a ProfileField
88 public function testUpdateOrder()
90 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', DI::dba());
92 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
94 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
96 $savedProfileField = $this->depository->save($profileField);
98 self::assertNotNull($savedProfileField->id);
99 self::assertNull($profileField->id);
101 /** @var ProfileField $selectedProfileField */
102 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
104 self::assertEquals($savedProfileField, $selectedProfileField);
106 $selectedProfileField->setOrder(66);
108 $updatedOrderProfileField = $this->depository->save($selectedProfileField);
110 self::assertEquals($selectedProfileField->id, $updatedOrderProfileField->id);
111 self::assertEquals(66, $updatedOrderProfileField->order);
113 // Even using the ID of the old, saved ProfileField returns the right instance
114 $updatedFromOldProfileField = $this->depository->selectOneById($savedProfileField->id);
115 self::assertEquals(66, $updatedFromOldProfileField->order);
119 * Test updating a whole entity
121 public function testUpdate()
123 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', DI::dba());
125 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
127 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
129 $savedProfileField = $this->depository->save($profileField);
131 self::assertNotNull($savedProfileField->id);
132 self::assertNull($profileField->id);
134 /** @var ProfileField $selectedProfileField */
135 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
137 self::assertEquals($savedProfileField, $selectedProfileField);
139 $savedProfileField->update('another', 5, $this->permissionSetDepository->selectPublicForUser(42));
140 self::assertEquals(PermissionSet::PUBLIC, $savedProfileField->permissionSet->id);
142 $publicProfileField = $this->depository->save($savedProfileField);
144 self::assertEquals($this->permissionSetDepository->selectPublicForUser(42), $publicProfileField->permissionSet);
145 self::assertEquals('another', $publicProfileField->value);
146 self::assertEquals(5, $publicProfileField->order);