]> git.mxchange.org Git - friendica.git/blob - tests/src/Profile/ProfileField/Depository/ProfileFieldTest.php
Update messages.po
[friendica.git] / tests / src / Profile / ProfileField / Depository / ProfileFieldTest.php
1 <?php
2
3 namespace Friendica\Test\src\Profile\ProfileField\Depository;
4
5 use Dice\Dice;
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;
16
17 class ProfileFieldTest extends DatabaseTest
18 {
19         /** @var ProfileFieldDepository */
20         private $depository;
21         /** @var ProfileFieldFactory */
22         private $factory;
23         /** @var PermissionSetFactory */
24         private $permissionSetFactory;
25         /** @var PermissionSetDepository */
26         private $permissionSetDepository;
27         /** @var Database */
28         private $dba;
29
30         public function setUp(): void
31         {
32                 parent::setUp();
33
34                 $dice = (new Dice())
35                         ->addRules(include __DIR__ . '/../../../../../static/dependencies.config.php')
36                         ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]);
37
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);
43         }
44
45         /**
46          * Test create ProfileField without a valid PermissionSet
47          */
48         public function testSavingWithoutPermissionSet()
49         {
50                 self::expectExceptionMessage('PermissionSet needs to be saved first.');
51                 self::expectException(ProfileFieldPersistenceException::class);
52
53                 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
54
55                 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetFactory->createFromString(42, '', '<~>'));
56
57                 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
58
59                 $this->depository->save($profileField);
60         }
61
62         /**
63          * Test saving a new entity
64          */
65         public function testSaveNew()
66         {
67                 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
68
69                 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
70
71                 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
72
73                 $savedProfileField = $this->depository->save($profileField);
74
75                 self::assertNotNull($savedProfileField->id);
76                 self::assertNull($profileField->id);
77
78                 /** @var ProfileField $selectedProfileField */
79                 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
80
81                 self::assertEquals($savedProfileField, $selectedProfileField);
82         }
83
84         /**
85          * Test updating the order of a ProfileField
86          */
87         public function testUpdateOrder()
88         {
89                 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
90
91                 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
92
93                 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
94
95                 $savedProfileField = $this->depository->save($profileField);
96
97                 self::assertNotNull($savedProfileField->id);
98                 self::assertNull($profileField->id);
99
100                 /** @var ProfileField $selectedProfileField */
101                 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
102
103                 self::assertEquals($savedProfileField, $selectedProfileField);
104
105                 $selectedProfileField->setOrder(66);
106
107                 $updatedOrderProfileField = $this->depository->save($selectedProfileField);
108
109                 self::assertEquals($selectedProfileField->id, $updatedOrderProfileField->id);
110                 self::assertEquals(66, $updatedOrderProfileField->order);
111
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);
115         }
116
117         /**
118          * Test updating a whole entity
119          */
120         public function testUpdate()
121         {
122                 $this->loadFixture(__DIR__ . '/../../../../datasets/api.fixture.php', $this->dba);
123
124                 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
125
126                 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
127
128                 $savedProfileField = $this->depository->save($profileField);
129
130                 self::assertNotNull($savedProfileField->id);
131                 self::assertNull($profileField->id);
132
133                 /** @var ProfileField $selectedProfileField */
134                 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
135
136                 self::assertEquals($savedProfileField, $selectedProfileField);
137
138                 $savedProfileField->update('another', 5, $this->permissionSetDepository->selectPublicForUser(42));
139                 self::assertEquals(PermissionSet::PUBLIC, $savedProfileField->permissionSet->id);
140
141                 $publicProfileField = $this->depository->save($savedProfileField);
142
143                 self::assertEquals($this->permissionSetDepository->selectPublicForUser(42), $publicProfileField->permissionSet);
144                 self::assertEquals('another', $publicProfileField->value);
145                 self::assertEquals(5, $publicProfileField->order);
146         }
147 }