3939use OCP \Mail \IEMailTemplate ;
4040use OCP \Security \Events \GenerateSecurePasswordEvent ;
4141use OCP \Security \ISecureRandom ;
42- use OCP \User \Backend \ISetDisplayNameBackend ;
4342use OCP \UserInterface ;
4443use PHPUnit \Framework \MockObject \MockObject ;
4544use Psr \Log \LoggerInterface ;
@@ -1635,6 +1634,10 @@ public function testEditUserRegularUserSelfEditChangeDisplayName(): void {
16351634 $ targetUser = $ this ->getMockBuilder (IUser::class)
16361635 ->disableOriginalConstructor ()
16371636 ->getMock ();
1637+ $ targetUser
1638+ ->expects ($ this ->once ())
1639+ ->method ('canChangeDisplayName ' )
1640+ ->willReturn (true );
16381641 $ this ->userSession
16391642 ->expects ($ this ->once ())
16401643 ->method ('getUser ' )
@@ -1644,10 +1647,6 @@ public function testEditUserRegularUserSelfEditChangeDisplayName(): void {
16441647 ->method ('get ' )
16451648 ->with ('UserToEdit ' )
16461649 ->willReturn ($ targetUser );
1647- $ targetUser
1648- ->expects ($ this ->once ())
1649- ->method ('getBackend ' )
1650- ->willReturn ($ this ->createMock (ISetDisplayNameBackend::class));
16511650 $ targetUser
16521651 ->expects ($ this ->once ())
16531652 ->method ('setDisplayName ' )
@@ -1672,6 +1671,14 @@ public function testEditUserRegularUserSelfEditChangeEmailValid(): void {
16721671 $ targetUser = $ this ->getMockBuilder (IUser::class)
16731672 ->disableOriginalConstructor ()
16741673 ->getMock ();
1674+ $ targetUser
1675+ ->expects ($ this ->atLeastOnce ())
1676+ ->method ('canEditProperty ' )
1677+ ->willReturnCallback (
1678+ fn (string $ property ): bool => match ($ property ) {
1679+ IAccountManager::PROPERTY_EMAIL => true ,
1680+ default => false ,
1681+ });
16751682 $ this ->userSession
16761683 ->expects ($ this ->once ())
16771684 ->method ('getUser ' )
@@ -1690,12 +1697,6 @@ public function testEditUserRegularUserSelfEditChangeEmailValid(): void {
16901697 ->method ('getUID ' )
16911698 ->willReturn ('UID ' );
16921699
1693- $ backend = $ this ->createMock (UserInterface::class);
1694- $ targetUser
1695- ->expects ($ this ->any ())
1696- ->method ('getBackend ' )
1697- ->willReturn ($ backend );
1698-
16991700 $ this ->config ->method ('getSystemValue ' )->willReturnCallback (fn (string $ key , mixed $ default ) => $ default );
17001701
17011702 $ this ->assertEquals ([], $ this ->api ->editUser ('UserToEdit ' , 'email ' , 'demo@nextcloud.com ' )->getData ());
@@ -1726,12 +1727,6 @@ public function testEditUserRegularUserSelfEditAddAdditionalEmailValid(): void {
17261727 ->method ('getUID ' )
17271728 ->willReturn ('UID ' );
17281729
1729- $ backend = $ this ->createMock (UserInterface::class);
1730- $ targetUser
1731- ->expects ($ this ->any ())
1732- ->method ('getBackend ' )
1733- ->willReturn ($ backend );
1734-
17351730 $ userAccount = $ this ->createMock (IAccount::class);
17361731
17371732 $ this ->accountManager
@@ -1772,11 +1767,6 @@ public function testEditUserRegularUserSelfEditAddAdditionalEmailMainAddress():
17721767 ->method ('getUID ' )
17731768 ->willReturn ('UID ' );
17741769
1775- $ backend = $ this ->createMock (UserInterface::class);
1776- $ targetUser
1777- ->expects ($ this ->any ())
1778- ->method ('getBackend ' )
1779- ->willReturn ($ backend );
17801770 $ targetUser
17811771 ->expects ($ this ->any ())
17821772 ->method ('getSystemEMailAddress ' )
@@ -1824,12 +1814,6 @@ public function testEditUserRegularUserSelfEditAddAdditionalEmailDuplicate(): vo
18241814 ->method ('getUID ' )
18251815 ->willReturn ('UID ' );
18261816
1827- $ backend = $ this ->createMock (UserInterface::class);
1828- $ targetUser
1829- ->expects ($ this ->any ())
1830- ->method ('getBackend ' )
1831- ->willReturn ($ backend );
1832-
18331817 $ property = $ this ->createMock (IAccountProperty::class);
18341818 $ property ->method ('getValue ' )
18351819 ->willReturn ('demo1@nextcloud.com ' );
@@ -1886,11 +1870,14 @@ public function testEditUserRegularUserSelfEditChangeEmailInvalid(): void {
18861870 ->method ('getUID ' )
18871871 ->willReturn ('UID ' );
18881872
1889- $ backend = $ this ->createMock (UserInterface::class);
18901873 $ targetUser
1891- ->expects ($ this ->any ())
1892- ->method ('getBackend ' )
1893- ->willReturn ($ backend );
1874+ ->expects ($ this ->atLeastOnce ())
1875+ ->method ('canEditProperty ' )
1876+ ->willReturnCallback (
1877+ fn (string $ property ): bool => match ($ property ) {
1878+ IAccountManager::PROPERTY_EMAIL => true ,
1879+ default => false ,
1880+ });
18941881
18951882 $ this ->config ->method ('getSystemValue ' )->willReturnCallback (fn (string $ key , mixed $ default ) => $ default );
18961883
@@ -1923,6 +1910,14 @@ public function testEditUserRegularUserSelfEditChangeProperty($propertyName, $ol
19231910 ->expects ($ this ->any ())
19241911 ->method ('getUID ' )
19251912 ->willReturn ('UID ' );
1913+ $ loggedInUser
1914+ ->expects ($ this ->atLeastOnce ())
1915+ ->method ('canEditProperty ' )
1916+ ->willReturnCallback (
1917+ fn (string $ property ): bool => match ($ property ) {
1918+ $ propertyName => true ,
1919+ default => false ,
1920+ });
19261921 $ this ->userSession
19271922 ->expects ($ this ->once ())
19281923 ->method ('getUser ' )
@@ -4290,137 +4285,79 @@ public function testResendWelcomeMessageFailed(): void {
42904285
42914286 public static function dataGetEditableFields (): array {
42924287 return [
4293- [false , true , ISetDisplayNameBackend::class, [
4294- IAccountManager::PROPERTY_EMAIL ,
4295- IAccountManager::COLLECTION_EMAIL ,
4296- IAccountManager::PROPERTY_PHONE ,
4288+ [false , true , [
42974289 IAccountManager::PROPERTY_ADDRESS ,
4298- IAccountManager::PROPERTY_WEBSITE ,
4299- IAccountManager::PROPERTY_TWITTER ,
4300- IAccountManager::PROPERTY_BLUESKY ,
4290+ IAccountManager::PROPERTY_BIOGRAPHY ,
4291+ IAccountManager::PROPERTY_BIRTHDATE ,
4292+ IAccountManager::PROPERTY_EMAIL ,
43014293 IAccountManager::PROPERTY_FEDIVERSE ,
4302- IAccountManager::PROPERTY_ORGANISATION ,
4303- IAccountManager::PROPERTY_ROLE ,
43044294 IAccountManager::PROPERTY_HEADLINE ,
4305- IAccountManager::PROPERTY_BIOGRAPHY ,
4295+ IAccountManager::PROPERTY_ORGANISATION ,
4296+ IAccountManager::PROPERTY_PHONE ,
43064297 IAccountManager::PROPERTY_PROFILE_ENABLED ,
43074298 IAccountManager::PROPERTY_PRONOUNS ,
4308- ]],
4309- [true , false , ISetDisplayNameBackend::class, [
4310- IAccountManager::PROPERTY_DISPLAYNAME ,
4311- IAccountManager::COLLECTION_EMAIL ,
4312- IAccountManager::PROPERTY_PHONE ,
4313- IAccountManager::PROPERTY_ADDRESS ,
4314- IAccountManager::PROPERTY_WEBSITE ,
4299+ IAccountManager::PROPERTY_ROLE ,
43154300 IAccountManager::PROPERTY_TWITTER ,
43164301 IAccountManager::PROPERTY_BLUESKY ,
4317- IAccountManager::PROPERTY_FEDIVERSE ,
4318- IAccountManager::PROPERTY_ORGANISATION ,
4319- IAccountManager::PROPERTY_ROLE ,
4320- IAccountManager::PROPERTY_HEADLINE ,
4321- IAccountManager::PROPERTY_BIOGRAPHY ,
4322- IAccountManager::PROPERTY_PROFILE_ENABLED ,
4323- IAccountManager::PROPERTY_PRONOUNS ,
4324- ]],
4325- [true , true , ISetDisplayNameBackend::class, [
4326- IAccountManager::PROPERTY_DISPLAYNAME ,
4327- IAccountManager::PROPERTY_EMAIL ,
4302+ IAccountManager::PROPERTY_WEBSITE ,
43284303 IAccountManager::COLLECTION_EMAIL ,
4329- IAccountManager::PROPERTY_PHONE ,
4304+ ]],
4305+ [true , false , [
43304306 IAccountManager::PROPERTY_ADDRESS ,
4331- IAccountManager::PROPERTY_WEBSITE ,
4332- IAccountManager::PROPERTY_TWITTER ,
4333- IAccountManager::PROPERTY_BLUESKY ,
4307+ IAccountManager::PROPERTY_BIOGRAPHY ,
4308+ IAccountManager::PROPERTY_BIRTHDATE ,
4309+ IAccountManager::PROPERTY_DISPLAYNAME ,
43344310 IAccountManager::PROPERTY_FEDIVERSE ,
4335- IAccountManager::PROPERTY_ORGANISATION ,
4336- IAccountManager::PROPERTY_ROLE ,
43374311 IAccountManager::PROPERTY_HEADLINE ,
4338- IAccountManager::PROPERTY_BIOGRAPHY ,
4312+ IAccountManager::PROPERTY_ORGANISATION ,
4313+ IAccountManager::PROPERTY_PHONE ,
43394314 IAccountManager::PROPERTY_PROFILE_ENABLED ,
43404315 IAccountManager::PROPERTY_PRONOUNS ,
4341- ]],
4342- [false , false , ISetDisplayNameBackend::class, [
4343- IAccountManager::COLLECTION_EMAIL ,
4344- IAccountManager::PROPERTY_PHONE ,
4345- IAccountManager::PROPERTY_ADDRESS ,
4346- IAccountManager::PROPERTY_WEBSITE ,
4316+ IAccountManager::PROPERTY_ROLE ,
43474317 IAccountManager::PROPERTY_TWITTER ,
43484318 IAccountManager::PROPERTY_BLUESKY ,
4349- IAccountManager::PROPERTY_FEDIVERSE ,
4350- IAccountManager::PROPERTY_ORGANISATION ,
4351- IAccountManager::PROPERTY_ROLE ,
4352- IAccountManager::PROPERTY_HEADLINE ,
4353- IAccountManager::PROPERTY_BIOGRAPHY ,
4354- IAccountManager::PROPERTY_PROFILE_ENABLED ,
4355- IAccountManager::PROPERTY_PRONOUNS ,
4356- ]],
4357- [false , true , UserInterface::class, [
4358- IAccountManager::PROPERTY_EMAIL ,
4319+ IAccountManager::PROPERTY_WEBSITE ,
43594320 IAccountManager::COLLECTION_EMAIL ,
4360- IAccountManager::PROPERTY_PHONE ,
4321+ ]],
4322+ [true , true , [
43614323 IAccountManager::PROPERTY_ADDRESS ,
4362- IAccountManager::PROPERTY_WEBSITE ,
4363- IAccountManager::PROPERTY_TWITTER ,
4364- IAccountManager::PROPERTY_BLUESKY ,
4324+ IAccountManager::PROPERTY_BIOGRAPHY ,
4325+ IAccountManager::PROPERTY_BIRTHDATE ,
4326+ IAccountManager::PROPERTY_DISPLAYNAME ,
4327+ IAccountManager::PROPERTY_EMAIL ,
43654328 IAccountManager::PROPERTY_FEDIVERSE ,
4366- IAccountManager::PROPERTY_ORGANISATION ,
4367- IAccountManager::PROPERTY_ROLE ,
43684329 IAccountManager::PROPERTY_HEADLINE ,
4369- IAccountManager::PROPERTY_BIOGRAPHY ,
4330+ IAccountManager::PROPERTY_ORGANISATION ,
4331+ IAccountManager::PROPERTY_PHONE ,
43704332 IAccountManager::PROPERTY_PROFILE_ENABLED ,
43714333 IAccountManager::PROPERTY_PRONOUNS ,
4372- ]],
4373- [true , false , UserInterface::class, [
4374- IAccountManager::COLLECTION_EMAIL ,
4375- IAccountManager::PROPERTY_PHONE ,
4376- IAccountManager::PROPERTY_ADDRESS ,
4377- IAccountManager::PROPERTY_WEBSITE ,
4334+ IAccountManager::PROPERTY_ROLE ,
43784335 IAccountManager::PROPERTY_TWITTER ,
43794336 IAccountManager::PROPERTY_BLUESKY ,
4380- IAccountManager::PROPERTY_FEDIVERSE ,
4381- IAccountManager::PROPERTY_ORGANISATION ,
4382- IAccountManager::PROPERTY_ROLE ,
4383- IAccountManager::PROPERTY_HEADLINE ,
4384- IAccountManager::PROPERTY_BIOGRAPHY ,
4385- IAccountManager::PROPERTY_PROFILE_ENABLED ,
4386- IAccountManager::PROPERTY_PRONOUNS ,
4387- ]],
4388- [true , true , UserInterface::class, [
4389- IAccountManager::PROPERTY_EMAIL ,
4337+ IAccountManager::PROPERTY_WEBSITE ,
43904338 IAccountManager::COLLECTION_EMAIL ,
4391- IAccountManager::PROPERTY_PHONE ,
4339+ ]],
4340+ [false , false , [
43924341 IAccountManager::PROPERTY_ADDRESS ,
4393- IAccountManager::PROPERTY_WEBSITE ,
4394- IAccountManager::PROPERTY_TWITTER ,
4395- IAccountManager::PROPERTY_BLUESKY ,
4342+ IAccountManager::PROPERTY_BIOGRAPHY ,
4343+ IAccountManager::PROPERTY_BIRTHDATE ,
43964344 IAccountManager::PROPERTY_FEDIVERSE ,
4397- IAccountManager::PROPERTY_ORGANISATION ,
4398- IAccountManager::PROPERTY_ROLE ,
43994345 IAccountManager::PROPERTY_HEADLINE ,
4400- IAccountManager::PROPERTY_BIOGRAPHY ,
4346+ IAccountManager::PROPERTY_ORGANISATION ,
4347+ IAccountManager::PROPERTY_PHONE ,
44014348 IAccountManager::PROPERTY_PROFILE_ENABLED ,
44024349 IAccountManager::PROPERTY_PRONOUNS ,
4403- ]],
4404- [false , false , UserInterface::class, [
4405- IAccountManager::COLLECTION_EMAIL ,
4406- IAccountManager::PROPERTY_PHONE ,
4407- IAccountManager::PROPERTY_ADDRESS ,
4408- IAccountManager::PROPERTY_WEBSITE ,
4350+ IAccountManager::PROPERTY_ROLE ,
44094351 IAccountManager::PROPERTY_TWITTER ,
44104352 IAccountManager::PROPERTY_BLUESKY ,
4411- IAccountManager::PROPERTY_FEDIVERSE ,
4412- IAccountManager::PROPERTY_ORGANISATION ,
4413- IAccountManager::PROPERTY_ROLE ,
4414- IAccountManager::PROPERTY_HEADLINE ,
4415- IAccountManager::PROPERTY_BIOGRAPHY ,
4416- IAccountManager::PROPERTY_PROFILE_ENABLED ,
4417- IAccountManager::PROPERTY_PRONOUNS ,
4353+ IAccountManager::PROPERTY_WEBSITE ,
4354+ IAccountManager::COLLECTION_EMAIL ,
44184355 ]],
44194356 ];
44204357 }
44214358
44224359 #[\PHPUnit \Framework \Attributes \DataProvider(methodName: 'dataGetEditableFields ' )]
4423- public function testGetEditableFields (bool $ allowedToChangeDisplayName , bool $ allowedToChangeEmail , string $ userBackend , array $ expected ): void {
4360+ public function testGetEditableFields (bool $ allowedToChangeDisplayName , bool $ allowedToChangeEmail , array $ expected ): void {
44244361 $ this ->config ->method ('getSystemValue ' )->willReturnCallback (fn (string $ key , mixed $ default ) => match ($ key ) {
44254362 'allow_user_to_change_display_name ' => $ allowedToChangeDisplayName ,
44264363 'allow_user_to_change_email ' => $ allowedToChangeEmail ,
@@ -4431,12 +4368,16 @@ public function testGetEditableFields(bool $allowedToChangeDisplayName, bool $al
44314368 $ this ->userSession ->method ('getUser ' )
44324369 ->willReturn ($ user );
44334370
4434- $ backend = $ this ->createMock ($ userBackend );
4435-
44364371 $ user ->method ('getUID ' )
44374372 ->willReturn ('userId ' );
4438- $ user ->method ('getBackend ' )
4439- ->willReturn ($ backend );
4373+ $ user ->method ('canEditProperty ' )
4374+ ->willReturnCallback (
4375+ fn (string $ property ): bool => match ($ property ) {
4376+ IAccountManager::PROPERTY_DISPLAYNAME => $ allowedToChangeDisplayName ,
4377+ IAccountManager::PROPERTY_EMAIL => $ allowedToChangeEmail ,
4378+ default => true ,
4379+ }
4380+ );
44404381
44414382 $ expectedResp = new DataResponse ($ expected );
44424383 $ this ->assertEquals ($ expectedResp , $ this ->api ->getEditableFields ('userId ' ));
0 commit comments