Skip to content

Commit d7c2f1d

Browse files
committed
test(ocm): Add tests for deduplication of resourceTypes
Also update 3rdparty Assisted-by: ClaudeCode:claude-fable-5 Signed-off-by: Micke Nordin <kano@sunet.se>
1 parent 4f3c8a3 commit d7c2f1d

2 files changed

Lines changed: 73 additions & 1 deletion

File tree

3rdparty

tests/lib/OCM/OCMProviderTest.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
10+
namespace Test\OCM;
11+
12+
use OC\OCM\Model\OCMProvider;
13+
use OCP\OCM\IOCMResource;
14+
use Test\TestCase;
15+
16+
class OCMProviderTest extends TestCase {
17+
private OCMProvider $provider;
18+
19+
#[\Override]
20+
protected function setUp(): void {
21+
parent::setUp();
22+
$this->provider = new OCMProvider();
23+
}
24+
25+
private function resource(string $name, array $shareTypes, array $protocols): IOCMResource {
26+
$resource = $this->provider->createNewResourceType();
27+
$resource->setName($name)
28+
->setShareTypes($shareTypes)
29+
->setProtocols($protocols);
30+
return $resource;
31+
}
32+
33+
public function testAddResourceTypeKeepsDistinctNames(): void {
34+
$this->provider->addResourceType($this->resource('file', ['user'], ['webdav' => '/dav/']));
35+
$this->provider->addResourceType($this->resource('folder', ['user'], ['webapp' => []]));
36+
37+
$this->assertCount(2, $this->provider->getResourceTypes());
38+
}
39+
40+
public function testAddResourceTypeMergesSameName(): void {
41+
$this->provider->addResourceType($this->resource('folder', ['user'], ['webapp' => []]));
42+
$this->provider->addResourceType($this->resource('folder', ['user'], ['webapp-receive' => ['targets' => ['blank', 'iframe']]]));
43+
44+
$resourceTypes = $this->provider->getResourceTypes();
45+
$this->assertCount(1, $resourceTypes);
46+
$this->assertSame(
47+
['webapp' => [], 'webapp-receive' => ['targets' => ['blank', 'iframe']]],
48+
$resourceTypes[0]->getProtocols(),
49+
);
50+
}
51+
52+
public function testAddResourceTypeDedupesShareTypes(): void {
53+
$this->provider->addResourceType($this->resource('folder', ['user'], ['webapp' => []]));
54+
$this->provider->addResourceType($this->resource('folder', ['user', 'group'], ['webapp-receive' => []]));
55+
56+
$shareTypes = $this->provider->getResourceTypes()[0]->getShareTypes();
57+
$this->assertSame(['user', 'group'], $shareTypes);
58+
// Deduplication must not leave key gaps, or shareTypes would
59+
// serialize as a JSON object instead of an array.
60+
$this->assertSame('["user","group"]', json_encode($shareTypes));
61+
}
62+
63+
public function testAddResourceTypeMergeOverwritesSameProtocol(): void {
64+
$this->provider->addResourceType($this->resource('folder', ['user'], ['webapp' => ['a' => 1]]));
65+
$this->provider->addResourceType($this->resource('folder', ['user'], ['webapp' => ['b' => 2]]));
66+
67+
$this->assertSame(
68+
['webapp' => ['b' => 2]],
69+
$this->provider->getResourceTypes()[0]->getProtocols(),
70+
);
71+
}
72+
}

0 commit comments

Comments
 (0)