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