3 namespace Friendica\Test\src\Profile\ProfileField\Depository;
6 use Friendica\Database\Database;
7 use Friendica\Profile\ProfileField\Collection\ProfileFields;
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', $this->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', $this->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);
84 $profileFields = new ProfileFields([$selectedProfileField]);
85 $this->depository->deleteCollection($profileFields);
89 * Test updating the order of a ProfileField
91 public function testUpdateOrder()
93 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
95 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
97 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
99 $savedProfileField = $this->depository->save($profileField);
101 self::assertNotNull($savedProfileField->id);
102 self::assertNull($profileField->id);
104 /** @var ProfileField $selectedProfileField */
105 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
107 self::assertEquals($savedProfileField, $selectedProfileField);
109 $selectedProfileField->setOrder(66);
111 $updatedOrderProfileField = $this->depository->save($selectedProfileField);
113 self::assertEquals($selectedProfileField->id, $updatedOrderProfileField->id);
114 self::assertEquals(66, $updatedOrderProfileField->order);
116 // Even using the ID of the old, saved ProfileField returns the right instance
117 $updatedFromOldProfileField = $this->depository->selectOneById($savedProfileField->id);
118 self::assertEquals(66, $updatedFromOldProfileField->order);
120 $profileFields = new ProfileFields([$updatedFromOldProfileField]);
121 $this->depository->deleteCollection($profileFields);
125 * Test updating a whole entity
127 public function testUpdate()
129 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
131 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
133 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
135 $savedProfileField = $this->depository->save($profileField);
137 self::assertNotNull($savedProfileField->id);
138 self::assertNull($profileField->id);
140 /** @var ProfileField $selectedProfileField */
141 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
143 self::assertEquals($savedProfileField, $selectedProfileField);
145 $savedProfileField->update('another', 5, $this->permissionSetDepository->selectPublicForUser(42));
146 self::assertEquals(PermissionSet::PUBLIC, $savedProfileField->permissionSet->id);
148 $publicProfileField = $this->depository->save($savedProfileField);
150 self::assertEquals($this->permissionSetDepository->selectPublicForUser(42), $publicProfileField->permissionSet);
151 self::assertEquals('another', $publicProfileField->value);
152 self::assertEquals(5, $publicProfileField->order);
154 $profileFields = new ProfileFields([$publicProfileField]);
155 $this->depository->deleteCollection($profileFields);