Skip to content

Commit 01dc3d3

Browse files
authored
Merge pull request #49595 from nextcloud/backport/49581/stable30
[stable30] chore(absence): Add capability
2 parents 0718ac7 + c3fa1e4 commit 01dc3d3

File tree

4 files changed

+50
-4
lines changed

4 files changed

+50
-4
lines changed

apps/dav/lib/Capabilities.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,19 @@
77

88
use OCP\Capabilities\ICapability;
99
use OCP\IConfig;
10+
use OCP\User\IAvailabilityCoordinator;
1011

1112
class Capabilities implements ICapability {
1213
private IConfig $config;
14+
private IAvailabilityCoordinator $coordinator;
1315

14-
public function __construct(IConfig $config) {
16+
public function __construct(IConfig $config, IAvailabilityCoordinator $coordinator) {
1517
$this->config = $config;
18+
$this->coordinator = $coordinator;
1619
}
1720

1821
/**
19-
* @return array{dav: array{chunking: string, bulkupload?: string}}
22+
* @return array{dav: array{chunking: string, bulkupload?: string, absence-supported?: bool, absence-replacement?: bool}}
2023
*/
2124
public function getCapabilities() {
2225
$capabilities = [
@@ -27,6 +30,10 @@ public function getCapabilities() {
2730
if ($this->config->getSystemValueBool('bulkupload.enabled', true)) {
2831
$capabilities['dav']['bulkupload'] = '1.0';
2932
}
33+
if ($this->coordinator->isEnabled()) {
34+
$capabilities['dav']['absence-supported'] = true;
35+
$capabilities['dav']['absence-replacement'] = true;
36+
}
3037
return $capabilities;
3138
}
3239
}

apps/dav/openapi.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@
3737
},
3838
"bulkupload": {
3939
"type": "string"
40+
},
41+
"absence-supported": {
42+
"type": "boolean"
43+
},
44+
"absence-replacement": {
45+
"type": "boolean"
4046
}
4147
}
4248
}

apps/dav/tests/unit/CalDAV/Reminder/NotificationProviderManagerTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
use OCA\DAV\Capabilities;
1717
use Test\TestCase;
1818

19+
/**
20+
* @group DB
21+
*/
1922
class NotificationProviderManagerTest extends TestCase {
2023

2124
/** @var NotificationProviderManager|\PHPUnit\Framework\MockObject\MockObject */

apps/dav/tests/unit/CapabilitiesTest.php

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
use OCA\DAV\Capabilities;
99
use OCP\IConfig;
10+
use OCP\User\IAvailabilityCoordinator;
1011
use Test\TestCase;
1112

1213
/**
@@ -19,7 +20,11 @@ public function testGetCapabilities(): void {
1920
->method('getSystemValueBool')
2021
->with('bulkupload.enabled', $this->isType('bool'))
2122
->willReturn(false);
22-
$capabilities = new Capabilities($config);
23+
$coordinator = $this->createMock(IAvailabilityCoordinator::class);
24+
$coordinator->expects($this->once())
25+
->method('isEnabled')
26+
->willReturn(false);
27+
$capabilities = new Capabilities($config, $coordinator);
2328
$expected = [
2429
'dav' => [
2530
'chunking' => '1.0',
@@ -34,7 +39,11 @@ public function testGetCapabilitiesWithBulkUpload(): void {
3439
->method('getSystemValueBool')
3540
->with('bulkupload.enabled', $this->isType('bool'))
3641
->willReturn(true);
37-
$capabilities = new Capabilities($config);
42+
$coordinator = $this->createMock(IAvailabilityCoordinator::class);
43+
$coordinator->expects($this->once())
44+
->method('isEnabled')
45+
->willReturn(false);
46+
$capabilities = new Capabilities($config, $coordinator);
3847
$expected = [
3948
'dav' => [
4049
'chunking' => '1.0',
@@ -43,4 +52,25 @@ public function testGetCapabilitiesWithBulkUpload(): void {
4352
];
4453
$this->assertSame($expected, $capabilities->getCapabilities());
4554
}
55+
56+
public function testGetCapabilitiesWithAbsence(): void {
57+
$config = $this->createMock(IConfig::class);
58+
$config->expects($this->once())
59+
->method('getSystemValueBool')
60+
->with('bulkupload.enabled', $this->isType('bool'))
61+
->willReturn(false);
62+
$coordinator = $this->createMock(IAvailabilityCoordinator::class);
63+
$coordinator->expects($this->once())
64+
->method('isEnabled')
65+
->willReturn(true);
66+
$capabilities = new Capabilities($config, $coordinator);
67+
$expected = [
68+
'dav' => [
69+
'chunking' => '1.0',
70+
'absence-supported' => true,
71+
'absence-replacement' => true,
72+
],
73+
];
74+
$this->assertSame($expected, $capabilities->getCapabilities());
75+
}
4676
}

0 commit comments

Comments
 (0)