]> git.mxchange.org Git - friendica.git/blob - tests/src/Profile/ProfileField/Repository/ProfileFieldTest.php
Merge pull request #12697 from MrPetovan/bug/deprecated
[friendica.git] / tests / src / Profile / ProfileField / Repository / ProfileFieldTest.php
1 <?php
2 /**
3  * @copyright Copyright (C) 2010-2023, the Friendica project
4  *
5  * @license GNU AGPL version 3 or any later version
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU Affero General Public License as
9  * published by the Free Software Foundation, either version 3 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Affero General Public License for more details.
16  *
17  * You should have received a copy of the GNU Affero General Public License
18  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
19  *
20  */
21
22 namespace Friendica\Test\src\Profile\ProfileField\Repository;
23
24 use Friendica\Profile\ProfileField\Collection\ProfileFields;
25 use Friendica\Profile\ProfileField\Repository\ProfileField as ProfileFieldRepository;
26 use Friendica\Profile\ProfileField\Exception\ProfileFieldPersistenceException;
27 use Friendica\Profile\ProfileField\Factory\ProfileField as ProfileFieldFactory;
28 use Friendica\Security\PermissionSet\Repository\PermissionSet;
29 use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
30 use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository;
31 use Friendica\Test\FixtureTest;
32 use Friendica\DI;
33
34 class ProfileFieldTest extends FixtureTest
35 {
36         /** @var ProfileFieldRepository */
37         private $depository;
38         /** @var ProfileFieldFactory */
39         private $factory;
40         /** @var PermissionSetFactory */
41         private $permissionSetFactory;
42         /** @var PermissionSetRepository */
43         private $permissionSetRepository;
44
45         public function setUp(): void
46         {
47                 parent::setUp();
48
49                 $this->depository              = DI::profileField();
50                 $this->factory                 = DI::profileFieldFactory();
51                 $this->permissionSetFactory    = DI::permissionSetFactory();
52                 $this->permissionSetRepository = DI::permissionSet();
53         }
54
55         /**
56          * Test create ProfileField without a valid PermissionSet
57          */
58         public function testSavingWithoutPermissionSet()
59         {
60                 self::expectExceptionMessage('PermissionSet needs to be saved first.');
61                 self::expectException(ProfileFieldPersistenceException::class);
62
63                 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetFactory->createFromString(42, '', '<~>'));
64
65                 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
66
67                 $this->depository->save($profileField);
68         }
69
70         /**
71          * Test saving a new entity
72          */
73         public function testSaveNew()
74         {
75                 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetRepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
76
77                 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
78
79                 $savedProfileField = $this->depository->save($profileField);
80
81                 self::assertNotNull($savedProfileField->id);
82                 self::assertNull($profileField->id);
83
84                 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
85
86                 self::assertEquals($savedProfileField, $selectedProfileField);
87
88                 $profileFields = new ProfileFields([$selectedProfileField]);
89                 $this->depository->deleteCollection($profileFields);
90         }
91
92         /**
93          * Test updating the order of a ProfileField
94          */
95         public function testUpdateOrder()
96         {
97                 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetRepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
98
99                 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
100
101                 $savedProfileField = $this->depository->save($profileField);
102
103                 self::assertNotNull($savedProfileField->id);
104                 self::assertNull($profileField->id);
105
106                 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
107
108                 self::assertEquals($savedProfileField, $selectedProfileField);
109
110                 $selectedProfileField->setOrder(66);
111
112                 $updatedOrderProfileField = $this->depository->save($selectedProfileField);
113
114                 self::assertEquals($selectedProfileField->id, $updatedOrderProfileField->id);
115                 self::assertEquals(66, $updatedOrderProfileField->order);
116
117                 // Even using the ID of the old, saved ProfileField returns the right instance
118                 $updatedFromOldProfileField = $this->depository->selectOneById($savedProfileField->id);
119                 self::assertEquals(66, $updatedFromOldProfileField->order);
120
121                 $profileFields = new ProfileFields([$updatedFromOldProfileField]);
122                 $this->depository->deleteCollection($profileFields);
123         }
124
125         /**
126          * Test updating a whole entity
127          */
128         public function testUpdate()
129         {
130                 $profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetRepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
131
132                 self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
133
134                 $savedProfileField = $this->depository->save($profileField);
135
136                 self::assertNotNull($savedProfileField->id);
137                 self::assertNull($profileField->id);
138
139                 $selectedProfileField = $this->depository->selectOneById($savedProfileField->id);
140
141                 self::assertEquals($savedProfileField, $selectedProfileField);
142
143                 $savedProfileField->update('another', 5, $this->permissionSetRepository->selectPublicForUser(42));
144                 self::assertEquals(PermissionSet::PUBLIC, $savedProfileField->permissionSet->id);
145
146                 $publicProfileField = $this->depository->save($savedProfileField);
147
148                 self::assertEquals($this->permissionSetRepository->selectPublicForUser(42), $publicProfileField->permissionSet);
149                 self::assertEquals('another', $publicProfileField->value);
150                 self::assertEquals(5, $publicProfileField->order);
151
152                 $profileFields = new ProfileFields([$publicProfileField]);
153                 $this->depository->deleteCollection($profileFields);
154         }
155 }