Skip to content

Commit ccedc0a

Browse files
Merge pull request #49596 from nextcloud/backport/49581/stable29
[stable29] chore(absence): Add capability
2 parents cbedae6 + 5e01fcc commit ccedc0a

4 files changed

Lines changed: 45 additions & 4 deletions

File tree

apps/dav/lib/Capabilities.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,19 @@
2626

2727
use OCP\Capabilities\ICapability;
2828
use OCP\IConfig;
29+
use OCP\User\IAvailabilityCoordinator;
2930

3031
class Capabilities implements ICapability {
3132
private IConfig $config;
33+
private IAvailabilityCoordinator $coordinator;
3234

33-
public function __construct(IConfig $config) {
35+
public function __construct(IConfig $config, IAvailabilityCoordinator $coordinator) {
3436
$this->config = $config;
37+
$this->coordinator = $coordinator;
3538
}
3639

3740
/**
38-
* @return array{dav: array{chunking: string, bulkupload?: string}}
41+
* @return array{dav: array{chunking: string, bulkupload?: string, absence-supported?: bool}}
3942
*/
4043
public function getCapabilities() {
4144
$capabilities = [
@@ -46,6 +49,9 @@ public function getCapabilities() {
4649
if ($this->config->getSystemValueBool('bulkupload.enabled', true)) {
4750
$capabilities['dav']['bulkupload'] = '1.0';
4851
}
52+
if ($this->coordinator->isEnabled()) {
53+
$capabilities['dav']['absence-supported'] = true;
54+
}
4955
return $capabilities;
5056
}
5157
}

apps/dav/openapi.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737
},
3838
"bulkupload": {
3939
"type": "string"
40+
},
41+
"absence-supported": {
42+
"type": "boolean"
4043
}
4144
}
4245
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@
3737
use OCA\DAV\Capabilities;
3838
use Test\TestCase;
3939

40+
/**
41+
* @group DB
42+
*/
4043
class NotificationProviderManagerTest extends TestCase {
4144

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

apps/dav/tests/unit/CapabilitiesTest.php

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
use OCA\DAV\Capabilities;
2727
use OCP\IConfig;
28+
use OCP\User\IAvailabilityCoordinator;
2829
use Test\TestCase;
2930

3031
/**
@@ -37,7 +38,11 @@ public function testGetCapabilities(): void {
3738
->method('getSystemValueBool')
3839
->with('bulkupload.enabled', $this->isType('bool'))
3940
->willReturn(false);
40-
$capabilities = new Capabilities($config);
41+
$coordinator = $this->createMock(IAvailabilityCoordinator::class);
42+
$coordinator->expects($this->once())
43+
->method('isEnabled')
44+
->willReturn(false);
45+
$capabilities = new Capabilities($config, $coordinator);
4146
$expected = [
4247
'dav' => [
4348
'chunking' => '1.0',
@@ -52,7 +57,11 @@ public function testGetCapabilitiesWithBulkUpload(): void {
5257
->method('getSystemValueBool')
5358
->with('bulkupload.enabled', $this->isType('bool'))
5459
->willReturn(true);
55-
$capabilities = new Capabilities($config);
60+
$coordinator = $this->createMock(IAvailabilityCoordinator::class);
61+
$coordinator->expects($this->once())
62+
->method('isEnabled')
63+
->willReturn(false);
64+
$capabilities = new Capabilities($config, $coordinator);
5665
$expected = [
5766
'dav' => [
5867
'chunking' => '1.0',
@@ -61,4 +70,24 @@ public function testGetCapabilitiesWithBulkUpload(): void {
6170
];
6271
$this->assertSame($expected, $capabilities->getCapabilities());
6372
}
73+
74+
public function testGetCapabilitiesWithAbsence(): void {
75+
$config = $this->createMock(IConfig::class);
76+
$config->expects($this->once())
77+
->method('getSystemValueBool')
78+
->with('bulkupload.enabled', $this->isType('bool'))
79+
->willReturn(false);
80+
$coordinator = $this->createMock(IAvailabilityCoordinator::class);
81+
$coordinator->expects($this->once())
82+
->method('isEnabled')
83+
->willReturn(true);
84+
$capabilities = new Capabilities($config, $coordinator);
85+
$expected = [
86+
'dav' => [
87+
'chunking' => '1.0',
88+
'absence-supported' => true,
89+
],
90+
];
91+
$this->assertSame($expected, $capabilities->getCapabilities());
92+
}
6493
}

0 commit comments

Comments
 (0)