From 173a338f76a2ac39ee823cf58b9f0c525e17e1f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Tue, 3 Feb 2026 15:01:50 +0100 Subject: [PATCH] chore: Adapt provisioning_api tests to code changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- .../tests/Controller/UsersControllerTest.php | 211 +++++++----------- 1 file changed, 76 insertions(+), 135 deletions(-) diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index da3548375ab..c135360b8f1 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -39,7 +39,6 @@ use OCP\L10N\IFactory; use OCP\Mail\IEMailTemplate; use OCP\Security\Events\GenerateSecurePasswordEvent; use OCP\Security\ISecureRandom; -use OCP\User\Backend\ISetDisplayNameBackend; use OCP\UserInterface; use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; @@ -1635,6 +1634,10 @@ class UsersControllerTest extends TestCase { $targetUser = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); + $targetUser + ->expects($this->once()) + ->method('canChangeDisplayName') + ->willReturn(true); $this->userSession ->expects($this->once()) ->method('getUser') @@ -1644,10 +1647,6 @@ class UsersControllerTest extends TestCase { ->method('get') ->with('UserToEdit') ->willReturn($targetUser); - $targetUser - ->expects($this->once()) - ->method('getBackend') - ->willReturn($this->createMock(ISetDisplayNameBackend::class)); $targetUser ->expects($this->once()) ->method('setDisplayName') @@ -1672,6 +1671,14 @@ class UsersControllerTest extends TestCase { $targetUser = $this->getMockBuilder(IUser::class) ->disableOriginalConstructor() ->getMock(); + $targetUser + ->expects($this->atLeastOnce()) + ->method('canEditProperty') + ->willReturnCallback( + fn (string $property): bool => match($property) { + IAccountManager::PROPERTY_EMAIL => true, + default => false, + }); $this->userSession ->expects($this->once()) ->method('getUser') @@ -1690,12 +1697,6 @@ class UsersControllerTest extends TestCase { ->method('getUID') ->willReturn('UID'); - $backend = $this->createMock(UserInterface::class); - $targetUser - ->expects($this->any()) - ->method('getBackend') - ->willReturn($backend); - $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => $default); $this->assertEquals([], $this->api->editUser('UserToEdit', 'email', 'demo@nextcloud.com')->getData()); @@ -1726,12 +1727,6 @@ class UsersControllerTest extends TestCase { ->method('getUID') ->willReturn('UID'); - $backend = $this->createMock(UserInterface::class); - $targetUser - ->expects($this->any()) - ->method('getBackend') - ->willReturn($backend); - $userAccount = $this->createMock(IAccount::class); $this->accountManager @@ -1772,11 +1767,6 @@ class UsersControllerTest extends TestCase { ->method('getUID') ->willReturn('UID'); - $backend = $this->createMock(UserInterface::class); - $targetUser - ->expects($this->any()) - ->method('getBackend') - ->willReturn($backend); $targetUser ->expects($this->any()) ->method('getSystemEMailAddress') @@ -1824,12 +1814,6 @@ class UsersControllerTest extends TestCase { ->method('getUID') ->willReturn('UID'); - $backend = $this->createMock(UserInterface::class); - $targetUser - ->expects($this->any()) - ->method('getBackend') - ->willReturn($backend); - $property = $this->createMock(IAccountProperty::class); $property->method('getValue') ->willReturn('demo1@nextcloud.com'); @@ -1886,11 +1870,14 @@ class UsersControllerTest extends TestCase { ->method('getUID') ->willReturn('UID'); - $backend = $this->createMock(UserInterface::class); $targetUser - ->expects($this->any()) - ->method('getBackend') - ->willReturn($backend); + ->expects($this->atLeastOnce()) + ->method('canEditProperty') + ->willReturnCallback( + fn (string $property): bool => match($property) { + IAccountManager::PROPERTY_EMAIL => true, + default => false, + }); $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => $default); @@ -1923,6 +1910,14 @@ class UsersControllerTest extends TestCase { ->expects($this->any()) ->method('getUID') ->willReturn('UID'); + $loggedInUser + ->expects($this->atLeastOnce()) + ->method('canEditProperty') + ->willReturnCallback( + fn (string $property): bool => match($property) { + $propertyName => true, + default => false, + }); $this->userSession ->expects($this->once()) ->method('getUser') @@ -4290,137 +4285,79 @@ class UsersControllerTest extends TestCase { public static function dataGetEditableFields(): array { return [ - [false, true, ISetDisplayNameBackend::class, [ + [false, true, [ + IAccountManager::PROPERTY_ADDRESS, + IAccountManager::PROPERTY_BIOGRAPHY, + IAccountManager::PROPERTY_BIRTHDATE, IAccountManager::PROPERTY_EMAIL, - IAccountManager::COLLECTION_EMAIL, - IAccountManager::PROPERTY_PHONE, - IAccountManager::PROPERTY_ADDRESS, - IAccountManager::PROPERTY_WEBSITE, - IAccountManager::PROPERTY_TWITTER, - IAccountManager::PROPERTY_BLUESKY, IAccountManager::PROPERTY_FEDIVERSE, - IAccountManager::PROPERTY_ORGANISATION, - IAccountManager::PROPERTY_ROLE, IAccountManager::PROPERTY_HEADLINE, - IAccountManager::PROPERTY_BIOGRAPHY, + IAccountManager::PROPERTY_ORGANISATION, + IAccountManager::PROPERTY_PHONE, IAccountManager::PROPERTY_PROFILE_ENABLED, IAccountManager::PROPERTY_PRONOUNS, + IAccountManager::PROPERTY_ROLE, + IAccountManager::PROPERTY_TWITTER, + IAccountManager::PROPERTY_BLUESKY, + IAccountManager::PROPERTY_WEBSITE, + IAccountManager::COLLECTION_EMAIL, ]], - [true, false, ISetDisplayNameBackend::class, [ + [true, false, [ + IAccountManager::PROPERTY_ADDRESS, + IAccountManager::PROPERTY_BIOGRAPHY, + IAccountManager::PROPERTY_BIRTHDATE, IAccountManager::PROPERTY_DISPLAYNAME, - IAccountManager::COLLECTION_EMAIL, - IAccountManager::PROPERTY_PHONE, - IAccountManager::PROPERTY_ADDRESS, - IAccountManager::PROPERTY_WEBSITE, - IAccountManager::PROPERTY_TWITTER, - IAccountManager::PROPERTY_BLUESKY, IAccountManager::PROPERTY_FEDIVERSE, - IAccountManager::PROPERTY_ORGANISATION, - IAccountManager::PROPERTY_ROLE, IAccountManager::PROPERTY_HEADLINE, - IAccountManager::PROPERTY_BIOGRAPHY, + IAccountManager::PROPERTY_ORGANISATION, + IAccountManager::PROPERTY_PHONE, IAccountManager::PROPERTY_PROFILE_ENABLED, IAccountManager::PROPERTY_PRONOUNS, + IAccountManager::PROPERTY_ROLE, + IAccountManager::PROPERTY_TWITTER, + IAccountManager::PROPERTY_BLUESKY, + IAccountManager::PROPERTY_WEBSITE, + IAccountManager::COLLECTION_EMAIL, ]], - [true, true, ISetDisplayNameBackend::class, [ + [true, true, [ + IAccountManager::PROPERTY_ADDRESS, + IAccountManager::PROPERTY_BIOGRAPHY, + IAccountManager::PROPERTY_BIRTHDATE, IAccountManager::PROPERTY_DISPLAYNAME, IAccountManager::PROPERTY_EMAIL, - IAccountManager::COLLECTION_EMAIL, - IAccountManager::PROPERTY_PHONE, - IAccountManager::PROPERTY_ADDRESS, - IAccountManager::PROPERTY_WEBSITE, - IAccountManager::PROPERTY_TWITTER, - IAccountManager::PROPERTY_BLUESKY, IAccountManager::PROPERTY_FEDIVERSE, - IAccountManager::PROPERTY_ORGANISATION, - IAccountManager::PROPERTY_ROLE, IAccountManager::PROPERTY_HEADLINE, - IAccountManager::PROPERTY_BIOGRAPHY, + IAccountManager::PROPERTY_ORGANISATION, + IAccountManager::PROPERTY_PHONE, IAccountManager::PROPERTY_PROFILE_ENABLED, IAccountManager::PROPERTY_PRONOUNS, + IAccountManager::PROPERTY_ROLE, + IAccountManager::PROPERTY_TWITTER, + IAccountManager::PROPERTY_BLUESKY, + IAccountManager::PROPERTY_WEBSITE, + IAccountManager::COLLECTION_EMAIL, ]], - [false, false, ISetDisplayNameBackend::class, [ - IAccountManager::COLLECTION_EMAIL, - IAccountManager::PROPERTY_PHONE, + [false, false, [ IAccountManager::PROPERTY_ADDRESS, - IAccountManager::PROPERTY_WEBSITE, - IAccountManager::PROPERTY_TWITTER, - IAccountManager::PROPERTY_BLUESKY, - IAccountManager::PROPERTY_FEDIVERSE, - IAccountManager::PROPERTY_ORGANISATION, - IAccountManager::PROPERTY_ROLE, - IAccountManager::PROPERTY_HEADLINE, IAccountManager::PROPERTY_BIOGRAPHY, + IAccountManager::PROPERTY_BIRTHDATE, + IAccountManager::PROPERTY_FEDIVERSE, + IAccountManager::PROPERTY_HEADLINE, + IAccountManager::PROPERTY_ORGANISATION, + IAccountManager::PROPERTY_PHONE, IAccountManager::PROPERTY_PROFILE_ENABLED, IAccountManager::PROPERTY_PRONOUNS, - ]], - [false, true, UserInterface::class, [ - IAccountManager::PROPERTY_EMAIL, - IAccountManager::COLLECTION_EMAIL, - IAccountManager::PROPERTY_PHONE, - IAccountManager::PROPERTY_ADDRESS, - IAccountManager::PROPERTY_WEBSITE, + IAccountManager::PROPERTY_ROLE, IAccountManager::PROPERTY_TWITTER, IAccountManager::PROPERTY_BLUESKY, - IAccountManager::PROPERTY_FEDIVERSE, - IAccountManager::PROPERTY_ORGANISATION, - IAccountManager::PROPERTY_ROLE, - IAccountManager::PROPERTY_HEADLINE, - IAccountManager::PROPERTY_BIOGRAPHY, - IAccountManager::PROPERTY_PROFILE_ENABLED, - IAccountManager::PROPERTY_PRONOUNS, - ]], - [true, false, UserInterface::class, [ - IAccountManager::COLLECTION_EMAIL, - IAccountManager::PROPERTY_PHONE, - IAccountManager::PROPERTY_ADDRESS, IAccountManager::PROPERTY_WEBSITE, - IAccountManager::PROPERTY_TWITTER, - IAccountManager::PROPERTY_BLUESKY, - IAccountManager::PROPERTY_FEDIVERSE, - IAccountManager::PROPERTY_ORGANISATION, - IAccountManager::PROPERTY_ROLE, - IAccountManager::PROPERTY_HEADLINE, - IAccountManager::PROPERTY_BIOGRAPHY, - IAccountManager::PROPERTY_PROFILE_ENABLED, - IAccountManager::PROPERTY_PRONOUNS, - ]], - [true, true, UserInterface::class, [ - IAccountManager::PROPERTY_EMAIL, IAccountManager::COLLECTION_EMAIL, - IAccountManager::PROPERTY_PHONE, - IAccountManager::PROPERTY_ADDRESS, - IAccountManager::PROPERTY_WEBSITE, - IAccountManager::PROPERTY_TWITTER, - IAccountManager::PROPERTY_BLUESKY, - IAccountManager::PROPERTY_FEDIVERSE, - IAccountManager::PROPERTY_ORGANISATION, - IAccountManager::PROPERTY_ROLE, - IAccountManager::PROPERTY_HEADLINE, - IAccountManager::PROPERTY_BIOGRAPHY, - IAccountManager::PROPERTY_PROFILE_ENABLED, - IAccountManager::PROPERTY_PRONOUNS, - ]], - [false, false, UserInterface::class, [ - IAccountManager::COLLECTION_EMAIL, - IAccountManager::PROPERTY_PHONE, - IAccountManager::PROPERTY_ADDRESS, - IAccountManager::PROPERTY_WEBSITE, - IAccountManager::PROPERTY_TWITTER, - IAccountManager::PROPERTY_BLUESKY, - IAccountManager::PROPERTY_FEDIVERSE, - IAccountManager::PROPERTY_ORGANISATION, - IAccountManager::PROPERTY_ROLE, - IAccountManager::PROPERTY_HEADLINE, - IAccountManager::PROPERTY_BIOGRAPHY, - IAccountManager::PROPERTY_PROFILE_ENABLED, - IAccountManager::PROPERTY_PRONOUNS, ]], ]; } #[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'dataGetEditableFields')] - public function testGetEditableFields(bool $allowedToChangeDisplayName, bool $allowedToChangeEmail, string $userBackend, array $expected): void { + public function testGetEditableFields(bool $allowedToChangeDisplayName, bool $allowedToChangeEmail, array $expected): void { $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => match ($key) { 'allow_user_to_change_display_name' => $allowedToChangeDisplayName, 'allow_user_to_change_email' => $allowedToChangeEmail, @@ -4431,12 +4368,16 @@ class UsersControllerTest extends TestCase { $this->userSession->method('getUser') ->willReturn($user); - $backend = $this->createMock($userBackend); - $user->method('getUID') ->willReturn('userId'); - $user->method('getBackend') - ->willReturn($backend); + $user->method('canEditProperty') + ->willReturnCallback( + fn (string $property): bool => match($property) { + IAccountManager::PROPERTY_DISPLAYNAME => $allowedToChangeDisplayName, + IAccountManager::PROPERTY_EMAIL => $allowedToChangeEmail, + default => true, + } + ); $expectedResp = new DataResponse($expected); $this->assertEquals($expectedResp, $this->api->getEditableFields('userId'));