aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/SystemTag/SystemTagManagerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/SystemTag/SystemTagManagerTest.php')
-rw-r--r--tests/lib/SystemTag/SystemTagManagerTest.php219
1 files changed, 131 insertions, 88 deletions
diff --git a/tests/lib/SystemTag/SystemTagManagerTest.php b/tests/lib/SystemTag/SystemTagManagerTest.php
index 99f033cfd95..b443d7222b2 100644
--- a/tests/lib/SystemTag/SystemTagManagerTest.php
+++ b/tests/lib/SystemTag/SystemTagManagerTest.php
@@ -11,11 +11,16 @@ namespace Test\SystemTag;
use OC\SystemTag\SystemTagManager;
use OC\SystemTag\SystemTagObjectMapper;
use OCP\EventDispatcher\IEventDispatcher;
+use OCP\IAppConfig;
use OCP\IDBConnection;
use OCP\IGroupManager;
use OCP\IUser;
+use OCP\IUserSession;
+use OCP\Server;
use OCP\SystemTag\ISystemTag;
use OCP\SystemTag\ISystemTagManager;
+use OCP\SystemTag\TagAlreadyExistsException;
+use OCP\SystemTag\TagNotFoundException;
use Test\TestCase;
/**
@@ -25,44 +30,36 @@ use Test\TestCase;
* @package Test\SystemTag
*/
class SystemTagManagerTest extends TestCase {
- /**
- * @var ISystemTagManager
- **/
- private $tagManager;
-
- /**
- * @var IDBConnection
- */
- private $connection;
-
- /**
- * @var IGroupManager
- */
- private $groupManager;
-
- /**
- * @var IEventDispatcher
- */
- private $dispatcher;
+ private ISystemTagManager $tagManager;
+ private IDBConnection $connection;
+ private IGroupManager $groupManager;
+ private IUserSession $userSession;
+ private IAppConfig $appConfig;
+ private IEventDispatcher $dispatcher;
protected function setUp(): void {
parent::setUp();
- $this->connection = \OC::$server->getDatabaseConnection();
+ $this->connection = Server::get(IDBConnection::class);
$this->dispatcher = $this->createMock(IEventDispatcher::class);
$this->groupManager = $this->createMock(IGroupManager::class);
+ $this->userSession = $this->createMock(IUserSession::class);
+ $this->appConfig = $this->createMock(IAppConfig::class);
$this->tagManager = new SystemTagManager(
$this->connection,
$this->groupManager,
- $this->dispatcher
+ $this->dispatcher,
+ $this->userSession,
+ $this->appConfig,
);
$this->pruneTagsTables();
}
protected function tearDown(): void {
$this->pruneTagsTables();
+ \OC::$CLI = true;
parent::tearDown();
}
@@ -72,7 +69,7 @@ class SystemTagManagerTest extends TestCase {
$query->delete(SystemTagManager::TAG_TABLE)->execute();
}
- public static function getAllTagsDataProvider() {
+ public static function getAllTagsDataProvider(): array {
return [
[
// no tags at all
@@ -85,23 +82,10 @@ class SystemTagManagerTest extends TestCase {
['two', false, false],
]
],
- [
- // duplicate names, different flags
- [
- ['one', false, false],
- ['one', true, false],
- ['one', false, true],
- ['one', true, true],
- ['two', false, false],
- ['two', false, true],
- ]
- ]
];
}
- /**
- * @dataProvider getAllTagsDataProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('getAllTagsDataProvider')]
public function testGetAllTags($testTags): void {
$testTagsById = [];
foreach ($testTags as $testTag) {
@@ -119,7 +103,7 @@ class SystemTagManagerTest extends TestCase {
}
}
- public static function getAllTagsFilteredDataProvider() {
+ public static function getAllTagsFilteredDataProvider(): array {
return [
[
[
@@ -168,14 +152,14 @@ class SystemTagManagerTest extends TestCase {
[
[
['one', true, false],
- ['one', false, false],
+ ['one_different', false, false],
['two', true, false],
],
null,
'on',
[
['one', true, false],
- ['one', false, false],
+ ['one_different', false, false],
]
],
// filter by name pattern and visibility
@@ -184,7 +168,7 @@ class SystemTagManagerTest extends TestCase {
[
['one', true, false],
['two', true, false],
- ['one', false, false],
+ ['one_different', false, false],
],
true,
'on',
@@ -208,9 +192,7 @@ class SystemTagManagerTest extends TestCase {
];
}
- /**
- * @dataProvider getAllTagsFilteredDataProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('getAllTagsFilteredDataProvider')]
public function testGetAllTagsFiltered($testTags, $visibilityFilter, $nameSearch, $expectedResults): void {
foreach ($testTags as $testTag) {
$this->tagManager->createTag($testTag[0], $testTag[1], $testTag[2]);
@@ -232,7 +214,7 @@ class SystemTagManagerTest extends TestCase {
}
}
- public static function oneTagMultipleFlagsProvider() {
+ public static function oneTagMultipleFlagsProvider(): array {
return [
['one', false, false],
['one', true, false],
@@ -241,11 +223,9 @@ class SystemTagManagerTest extends TestCase {
];
}
- /**
- * @dataProvider oneTagMultipleFlagsProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('oneTagMultipleFlagsProvider')]
public function testCreateDuplicate($name, $userVisible, $userAssignable): void {
- $this->expectException(\OCP\SystemTag\TagAlreadyExistsException::class);
+ $this->expectException(TagAlreadyExistsException::class);
try {
$this->tagManager->createTag($name, $userVisible, $userAssignable);
@@ -255,14 +235,21 @@ class SystemTagManagerTest extends TestCase {
$this->tagManager->createTag($name, $userVisible, $userAssignable);
}
+ public function testCreateDuplicateWithDifferentFlags(): void {
+ $this->expectException(TagAlreadyExistsException::class);
+
+ // Create a tag with specific flags
+ $this->tagManager->createTag('duplicate', true, false);
+ // Try to create a tag with the same name but different flags - should fail
+ $this->tagManager->createTag('duplicate', false, true);
+ }
+
public function testCreateOverlongName(): void {
$tag = $this->tagManager->createTag('Zona circundante do Palácio Nacional da Ajuda (Jardim das Damas, Salão de Física, Torre Sineira, Paço Velho e Jardim Botânico)', true, true);
$this->assertSame('Zona circundante do Palácio Nacional da Ajuda (Jardim das Damas', $tag->getName()); // 63 characters but 64 bytes due to "á"
}
- /**
- * @dataProvider oneTagMultipleFlagsProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('oneTagMultipleFlagsProvider')]
public function testGetExistingTag($name, $userVisible, $userAssignable): void {
$tag1 = $this->tagManager->createTag($name, $userVisible, $userAssignable);
$tag2 = $this->tagManager->getTag($name, $userVisible, $userAssignable);
@@ -284,14 +271,14 @@ class SystemTagManagerTest extends TestCase {
public function testGetNonExistingTag(): void {
- $this->expectException(\OCP\SystemTag\TagNotFoundException::class);
+ $this->expectException(TagNotFoundException::class);
$this->tagManager->getTag('nonexist', false, false);
}
public function testGetNonExistingTagsById(): void {
- $this->expectException(\OCP\SystemTag\TagNotFoundException::class);
+ $this->expectException(TagNotFoundException::class);
$tag1 = $this->tagManager->createTag('one', true, false);
$this->tagManager->getTagsByIds([$tag1->getId(), 100, 101]);
@@ -305,7 +292,7 @@ class SystemTagManagerTest extends TestCase {
$this->tagManager->getTagsByIds([$tag1->getId() . 'suffix']);
}
- public static function updateTagProvider() {
+ public static function updateTagProvider(): array {
return [
[
// update name
@@ -330,9 +317,7 @@ class SystemTagManagerTest extends TestCase {
];
}
- /**
- * @dataProvider updateTagProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('updateTagProvider')]
public function testUpdateTag($tagCreate, $tagUpdated): void {
$tag1 = $this->tagManager->createTag(
$tagCreate[0],
@@ -362,32 +347,20 @@ class SystemTagManagerTest extends TestCase {
}
- /**
- * @dataProvider updateTagProvider
- */
- public function testUpdateTagDuplicate($tagCreate, $tagUpdated): void {
- $this->expectException(\OCP\SystemTag\TagAlreadyExistsException::class);
+ public function testUpdateTagToExistingName(): void {
+ $this->expectException(TagAlreadyExistsException::class);
- $this->tagManager->createTag(
- $tagCreate[0],
- $tagCreate[1],
- $tagCreate[2],
- $tagCreate[3],
- );
- $tag2 = $this->tagManager->createTag(
- $tagUpdated[0],
- $tagUpdated[1],
- $tagUpdated[2],
- $tagUpdated[3],
- );
+ // Create two different tags
+ $tag1 = $this->tagManager->createTag('first', true, true);
+ $tag2 = $this->tagManager->createTag('second', false, false);
- // update to match the first tag
+ // Try to update tag2 to have the same name as tag1 - should fail
$this->tagManager->updateTag(
$tag2->getId(),
- $tagCreate[0],
- $tagCreate[1],
- $tagCreate[2],
- $tagCreate[3],
+ 'first',
+ false,
+ false,
+ null
);
}
@@ -402,7 +375,7 @@ class SystemTagManagerTest extends TestCase {
public function testDeleteNonExistingTag(): void {
- $this->expectException(\OCP\SystemTag\TagNotFoundException::class);
+ $this->expectException(TagNotFoundException::class);
$this->tagManager->deleteTags([100]);
}
@@ -430,7 +403,7 @@ class SystemTagManagerTest extends TestCase {
], $tagIdMapping);
}
- public static function visibilityCheckProvider() {
+ public static function visibilityCheckProvider(): array {
return [
[false, false, false, false],
[true, false, false, true],
@@ -439,9 +412,7 @@ class SystemTagManagerTest extends TestCase {
];
}
- /**
- * @dataProvider visibilityCheckProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('visibilityCheckProvider')]
public function testVisibilityCheck($userVisible, $userAssignable, $isAdmin, $expectedResult): void {
$user = $this->getMockBuilder(IUser::class)->getMock();
$user->expects($this->any())
@@ -457,7 +428,7 @@ class SystemTagManagerTest extends TestCase {
$this->assertEquals($expectedResult, $this->tagManager->canUserSeeTag($tag1, $user));
}
- public static function assignabilityCheckProvider() {
+ public static function assignabilityCheckProvider(): array {
return [
// no groups
[false, false, false, false],
@@ -486,9 +457,7 @@ class SystemTagManagerTest extends TestCase {
];
}
- /**
- * @dataProvider assignabilityCheckProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('assignabilityCheckProvider')]
public function testAssignabilityCheck($userVisible, $userAssignable, $isAdmin, $expectedResult, $userGroupIds = [], $tagGroupIds = []): void {
$user = $this->getMockBuilder(IUser::class)->getMock();
$user->expects($this->any())
@@ -535,6 +504,80 @@ class SystemTagManagerTest extends TestCase {
$this->assertEquals([], $this->tagManager->getTagGroups($tag1));
}
+ public static function allowedToCreateProvider(): array {
+ return [
+ [true, null, true],
+ [true, null, false],
+ [false, true, true],
+ [false, true, false],
+ [false, false, false],
+ ];
+ }
+
+ #[\PHPUnit\Framework\Attributes\DataProvider('allowedToCreateProvider')]
+ public function testAllowedToCreateTag(bool $isCli, ?bool $isAdmin, bool $isRestricted): void {
+ $oldCli = \OC::$CLI;
+ \OC::$CLI = $isCli;
+
+ $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user->expects($this->any())
+ ->method('getUID')
+ ->willReturn('test');
+ $this->userSession->expects($this->any())
+ ->method('getUser')
+ ->willReturn($isAdmin === null ? null : $user);
+ $this->groupManager->expects($this->any())
+ ->method('isAdmin')
+ ->with('test')
+ ->willReturn($isAdmin);
+ $this->appConfig->expects($this->any())
+ ->method('getValueBool')
+ ->with('systemtags', 'restrict_creation_to_admin')
+ ->willReturn($isRestricted);
+
+ $name = uniqid('tag_', true);
+ $tag = $this->tagManager->createTag($name, true, true);
+ $this->assertEquals($tag->getName(), $name);
+ $this->tagManager->deleteTags($tag->getId());
+
+ \OC::$CLI = $oldCli;
+ }
+
+ public static function disallowedToCreateProvider(): array {
+ return [
+ [false],
+ [null],
+ ];
+ }
+
+ #[\PHPUnit\Framework\Attributes\DataProvider('disallowedToCreateProvider')]
+ public function testDisallowedToCreateTag(?bool $isAdmin): void {
+ $oldCli = \OC::$CLI;
+ \OC::$CLI = false;
+
+ $user = $this->getMockBuilder(IUser::class)->getMock();
+ $user->expects($this->any())
+ ->method('getUID')
+ ->willReturn('test');
+ $this->userSession->expects($this->any())
+ ->method('getUser')
+ ->willReturn($isAdmin === null ? null : $user);
+ $this->groupManager->expects($this->any())
+ ->method('isAdmin')
+ ->with('test')
+ ->willReturn($isAdmin);
+ $this->appConfig->expects($this->any())
+ ->method('getValueBool')
+ ->with('systemtags', 'restrict_creation_to_admin')
+ ->willReturn(true);
+
+ $this->expectException(\Exception::class);
+ $tag = $this->tagManager->createTag(uniqid('tag_', true), true, true);
+
+ \OC::$CLI = $oldCli;
+ }
+
+
/**
* @param ISystemTag $tag1
* @param ISystemTag $tag2