diff --git a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php index 14ebae7772e..b7a0cc929ed 100644 --- a/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php +++ b/apps/dav/tests/unit/SystemTag/SystemTagNodeTest.php @@ -70,36 +70,43 @@ class SystemTagNodeTest extends \Test\TestCase { [ true, new SystemTag('1', 'Original', true, true), - ['Renamed', true, true, null] + ['Renamed', true, true, null], + true, ], [ true, new SystemTag('1', 'Original', true, true), - ['Original', false, false, null] + ['Original', false, false, null], + true, ], // non-admin [ - // renaming allowed + // renaming not allowed false, new SystemTag('1', 'Original', true, true), - ['Rename', true, true, '0082c9'] + ['Renamed', true, true, null], + false, ], ]; } #[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'tagNodeProvider')] - public function testUpdateTag(bool $isAdmin, ISystemTag $originalTag, array $changedArgs): void { - $this->tagManager->expects($this->once()) - ->method('canUserSeeTag') + public function testUpdateTag(bool $isAdmin, ISystemTag $originalTag, $changedArgs, $allowed): void { + $this->tagManager->method('canUserSeeTag') ->with($originalTag) ->willReturn($originalTag->isUserVisible() || $isAdmin); - $this->tagManager->expects($this->once()) - ->method('canUserAssignTag') + $this->tagManager->method('canUserAssignTag') ->with($originalTag) ->willReturn($originalTag->isUserAssignable() || $isAdmin); - $this->tagManager->expects($this->once()) - ->method('updateTag') - ->with(1, $changedArgs[0], $changedArgs[1], $changedArgs[2], $changedArgs[3]); + if ($allowed) { + $this->tagManager->expects($this->once()) + ->method('updateTag') + ->with(1, $changedArgs[0], $changedArgs[1], $changedArgs[2], $changedArgs[3]); + } else { + $this->expectException(\Sabre\DAV\Exception\Forbidden::class); + $this->tagManager->expects($this->never()) + ->method('updateTag'); + } $this->getTagNode($isAdmin, $originalTag) ->update($changedArgs[0], $changedArgs[1], $changedArgs[2], $changedArgs[3]); } @@ -186,7 +193,7 @@ class SystemTagNodeTest extends \Test\TestCase { ->method('updateTag') ->with(1, 'Renamed', true, true) ->willThrowException(new TagAlreadyExistsException()); - $this->getTagNode(false, $tag)->update('Renamed', true, true, null); + $this->getTagNode(true, $tag)->update('Renamed', true, true, null); } public function testUpdateTagNotFound(): void { @@ -205,7 +212,7 @@ class SystemTagNodeTest extends \Test\TestCase { ->method('updateTag') ->with(1, 'Renamed', true, true) ->willThrowException(new TagNotFoundException()); - $this->getTagNode(false, $tag)->update('Renamed', true, true, null); + $this->getTagNode(true, $tag)->update('Renamed', true, true, null); } #[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'adminFlagProvider')] diff --git a/build/integration/files_features/tags.feature b/build/integration/files_features/tags.feature index fef8068cbc8..f7da05edfcc 100644 --- a/build/integration/files_features/tags.feature +++ b/build/integration/files_features/tags.feature @@ -36,13 +36,13 @@ Feature: tags Then The response should have a status code "400" And "0" tags should exist for "user0" - Scenario: Renaming a normal tag as regular user should work + Scenario: Renaming a normal tag as regular user should fail Given user "user0" exists Given "admin" creates a "normal" tag with name "MySuperAwesomeTagName" When "user0" edits the tag with name "MySuperAwesomeTagName" and sets its name to "AnotherTagName" - Then The response should have a status code "207" + Then The response should have a status code "403" And The following tags should exist for "admin" - |AnotherTagName|true|true| + |MySuperAwesomeTagName|true|true| Scenario: Renaming a not user-assignable tag as regular user should fail Given user "user0" exists