Skip to content

Commit 9f799ac

Browse files
tcitworldMichaIng
authored andcommitted
Delete calendar subscriptions as well when deleting user
Closes #28418 Signed-off-by: Thomas Citharel <tcit@tcit.fr>
1 parent 0b3d763 commit 9f799ac

2 files changed

Lines changed: 36 additions & 20 deletions

File tree

apps/dav/lib/HookManager.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ class HookManager {
5656
/** @var array */
5757
private $calendarsToDelete = [];
5858

59+
/** @var array */
60+
private $subscriptionsToDelete = [];
61+
5962
/** @var array */
6063
private $addressBooksToDelete = [];
6164

@@ -110,9 +113,11 @@ public function postCreateUser($params) {
110113

111114
public function preDeleteUser($params) {
112115
$uid = $params['uid'];
116+
$userPrincipalUri = 'principals/users/' . $uid;
113117
$this->usersToDelete[$uid] = $this->userManager->get($uid);
114-
$this->calendarsToDelete = $this->calDav->getUsersOwnCalendars('principals/users/' . $uid);
115-
$this->addressBooksToDelete = $this->cardDav->getUsersOwnAddressBooks('principals/users/' . $uid);
118+
$this->calendarsToDelete = $this->calDav->getUsersOwnCalendars($userPrincipalUri);
119+
$this->subscriptionsToDelete = $this->calDav->getSubscriptionsForUser($userPrincipalUri);
120+
$this->addressBooksToDelete = $this->cardDav->getUsersOwnAddressBooks($userPrincipalUri);
116121
}
117122

118123
public function preUnassignedUserId($uid) {
@@ -131,6 +136,12 @@ public function postDeleteUser($params) {
131136
true // Make sure the data doesn't go into the trashbin, a new user with the same UID would later see it otherwise
132137
);
133138
}
139+
140+
foreach ($this->subscriptionsToDelete as $subscription) {
141+
$this->calDav->deleteSubscription(
142+
$subscription['id'],
143+
);
144+
}
134145
$this->calDav->deleteAllSharesByUser('principals/users/' . $uid);
135146

136147
foreach ($this->addressBooksToDelete as $addressBook) {

apps/dav/tests/unit/DAV/HookManagerTest.php

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,15 @@
3737
use OCP\IL10N;
3838
use OCP\IUser;
3939
use OCP\IUserManager;
40+
use PHPUnit\Framework\MockObject\MockObject;
4041
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
4142
use Test\TestCase;
4243

4344
class HookManagerTest extends TestCase {
4445
/** @var IL10N */
4546
private $l10n;
4647

47-
/** @var EventDispatcherInterface | \PHPUnit\Framework\MockObject\MockObject */
48+
/** @var EventDispatcherInterface | MockObject */
4849
private $eventDispatcher;
4950

5051
protected function setUp(): void {
@@ -65,17 +66,17 @@ public function test() {
6566
->getMock();
6667
$user->expects($this->once())->method('getUID')->willReturn('newUser');
6768

68-
/** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject $userManager */
69+
/** @var IUserManager | MockObject $userManager */
6970
$userManager = $this->getMockBuilder(IUserManager::class)
7071
->disableOriginalConstructor()
7172
->getMock();
7273

73-
/** @var SyncService | \PHPUnit\Framework\MockObject\MockObject $syncService */
74+
/** @var SyncService | MockObject $syncService */
7475
$syncService = $this->getMockBuilder(SyncService::class)
7576
->disableOriginalConstructor()
7677
->getMock();
7778

78-
/** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject $cal */
79+
/** @var CalDavBackend | MockObject $cal */
7980
$cal = $this->getMockBuilder(CalDavBackend::class)
8081
->disableOriginalConstructor()
8182
->getMock();
@@ -84,7 +85,7 @@ public function test() {
8485
'principals/users/newUser',
8586
'personal', ['{DAV:}displayname' => 'Personal']);
8687

87-
/** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $card */
88+
/** @var CardDavBackend | MockObject $card */
8889
$card = $this->getMockBuilder(CardDavBackend::class)
8990
->disableOriginalConstructor()
9091
->getMock();
@@ -103,24 +104,24 @@ public function testWithExisting() {
103104
->getMock();
104105
$user->expects($this->once())->method('getUID')->willReturn('newUser');
105106

106-
/** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject $userManager */
107+
/** @var IUserManager | MockObject $userManager */
107108
$userManager = $this->getMockBuilder(IUserManager::class)
108109
->disableOriginalConstructor()
109110
->getMock();
110111

111-
/** @var SyncService | \PHPUnit\Framework\MockObject\MockObject $syncService */
112+
/** @var SyncService | MockObject $syncService */
112113
$syncService = $this->getMockBuilder(SyncService::class)
113114
->disableOriginalConstructor()
114115
->getMock();
115116

116-
/** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject $cal */
117+
/** @var CalDavBackend | MockObject $cal */
117118
$cal = $this->getMockBuilder(CalDavBackend::class)
118119
->disableOriginalConstructor()
119120
->getMock();
120121
$cal->expects($this->once())->method('getCalendarsForUserCount')->willReturn(1);
121122
$cal->expects($this->never())->method('createCalendar');
122123

123-
/** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $card */
124+
/** @var CardDavBackend | MockObject $card */
124125
$card = $this->getMockBuilder(CardDavBackend::class)
125126
->disableOriginalConstructor()
126127
->getMock();
@@ -137,17 +138,17 @@ public function testWithBirthdayCalendar() {
137138
->getMock();
138139
$user->expects($this->once())->method('getUID')->willReturn('newUser');
139140

140-
/** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject $userManager */
141+
/** @var IUserManager | MockObject $userManager */
141142
$userManager = $this->getMockBuilder(IUserManager::class)
142143
->disableOriginalConstructor()
143144
->getMock();
144145

145-
/** @var SyncService | \PHPUnit\Framework\MockObject\MockObject $syncService */
146+
/** @var SyncService | MockObject $syncService */
146147
$syncService = $this->getMockBuilder(SyncService::class)
147148
->disableOriginalConstructor()
148149
->getMock();
149150

150-
/** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject $cal */
151+
/** @var CalDavBackend | MockObject $cal */
151152
$cal = $this->getMockBuilder(CalDavBackend::class)
152153
->disableOriginalConstructor()
153154
->getMock();
@@ -156,7 +157,7 @@ public function testWithBirthdayCalendar() {
156157
'principals/users/newUser',
157158
'personal', ['{DAV:}displayname' => 'Personal']);
158159

159-
/** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $card */
160+
/** @var CardDavBackend | MockObject $card */
160161
$card = $this->getMockBuilder(CardDavBackend::class)
161162
->disableOriginalConstructor()
162163
->getMock();
@@ -174,30 +175,34 @@ public function testDeleteCalendar() {
174175
->disableOriginalConstructor()
175176
->getMock();
176177

177-
/** @var IUserManager | \PHPUnit\Framework\MockObject\MockObject $userManager */
178+
/** @var IUserManager | MockObject $userManager */
178179
$userManager = $this->getMockBuilder(IUserManager::class)
179180
->disableOriginalConstructor()
180181
->getMock();
181182
$userManager->expects($this->once())->method('get')->willReturn($user);
182183

183-
/** @var SyncService | \PHPUnit\Framework\MockObject\MockObject $syncService */
184+
/** @var SyncService | MockObject $syncService */
184185
$syncService = $this->getMockBuilder(SyncService::class)
185186
->disableOriginalConstructor()
186187
->getMock();
187188
$syncService->expects($this->once())
188189
->method('deleteUser');
189190

190-
/** @var CalDavBackend | \PHPUnit\Framework\MockObject\MockObject $cal */
191+
/** @var CalDavBackend | MockObject $cal */
191192
$cal = $this->getMockBuilder(CalDavBackend::class)
192193
->disableOriginalConstructor()
193194
->getMock();
194195
$cal->expects($this->once())->method('getUsersOwnCalendars')->willReturn([
195196
['id' => 'personal']
196197
]);
197-
$cal->expects($this->once())->method('deleteCalendar');
198+
$cal->expects($this->once())->method('getSubscriptionsForUser')->willReturn([
199+
['id' => 'some-subscription']
200+
]);
201+
$cal->expects($this->once())->method('deleteCalendar')->with('personal');
202+
$cal->expects($this->once())->method('deleteSubscription')->with('some-subscription');
198203
$cal->expects($this->once())->method('deleteAllSharesByUser');
199204

200-
/** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $card */
205+
/** @var CardDavBackend | MockObject $card */
201206
$card = $this->getMockBuilder(CardDavBackend::class)
202207
->disableOriginalConstructor()
203208
->getMock();

0 commit comments

Comments
 (0)