Skip to content

Commit

Permalink
Merge pull request #1695 from nextcloud/backport-1558-remove-notifica…
Browse files Browse the repository at this point in the history
…tions-upon-user-deletion

[stable10] Remove notifications upon user deletion
  • Loading branch information
blizzz authored Oct 11, 2016
2 parents a27633b + 6b703e9 commit cd282fa
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 15 deletions.
10 changes: 7 additions & 3 deletions lib/private/User/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -212,10 +212,14 @@ public function delete() {

\OC::$server->getCommentsManager()->deleteReferencesOfActor('users', $this->uid);
\OC::$server->getCommentsManager()->deleteReadMarksFromUser($this);
}

if ($this->emitter) {
$this->emitter->emit('\OC\User', 'postDelete', array($this));
$notification = \OC::$server->getNotificationManager()->createNotification();
$notification->setUser($this->uid);
\OC::$server->getNotificationManager()->markProcessed($notification);

if ($this->emitter) {
$this->emitter->emit('\OC\User', 'postDelete', array($this));
}
}
return !($result === false);
}
Expand Down
84 changes: 72 additions & 12 deletions tests/lib/User/UserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,7 @@ public function testChangeAvatarNotSupported() {

$backend->expects($this->any())
->method('implementsActions')
->will($this->returnCallback(function ($actions) {
return false;
}));
->willReturn(false);

$user = new \OC\User\User('foo', $backend);
$this->assertTrue($user->canChangeAvatar());
Expand Down Expand Up @@ -379,9 +377,7 @@ public function testSetDisplayNameNotSupported() {

$backend->expects($this->any())
->method('implementsActions')
->will($this->returnCallback(function ($actions) {
return false;
}));
->willReturn(false);

$backend->expects($this->never())
->method('setDisplayName');
Expand Down Expand Up @@ -432,7 +428,19 @@ public function testSetPasswordHooks() {
$this->assertEquals(2, $hooksCalled);
}

public function testDeleteHooks() {
public function dataDeleteHooks() {
return [
[true, 2],
[false, 1],
];
}

/**
* @dataProvider dataDeleteHooks
* @param bool $result
* @param int $expectedHooks
*/
public function testDeleteHooks($result, $expectedHooks) {
$hooksCalled = 0;
$test = $this;

Expand All @@ -441,7 +449,10 @@ public function testDeleteHooks() {
*/
$backend = $this->getMock('\Test\Util\User\Dummy');
$backend->expects($this->once())
->method('deleteUser');
->method('deleteUser')
->willReturn($result);
$emitter = new PublicEmitter();
$user = new \OC\User\User('foo', $backend, $emitter);

/**
* @param \OC\User\User $user
Expand All @@ -451,13 +462,62 @@ public function testDeleteHooks() {
$test->assertEquals('foo', $user->getUID());
};

$emitter = new PublicEmitter();
$emitter->listen('\OC\User', 'preDelete', $hook);
$emitter->listen('\OC\User', 'postDelete', $hook);

$user = new \OC\User\User('foo', $backend, $emitter);
$this->assertTrue($user->delete());
$this->assertEquals(2, $hooksCalled);
$config = $this->getMockBuilder('OCP\IConfig')->getMock();
$commentsManager = $this->getMockBuilder('OCP\Comments\ICommentsManager')->getMock();
$notificationManager = $this->getMockBuilder('OCP\Notification\IManager')->getMock();

if ($result) {
$config->expects($this->once())
->method('deleteAllUserValues')
->with('foo');

$commentsManager->expects($this->once())
->method('deleteReferencesOfActor')
->with('users', 'foo');
$commentsManager->expects($this->once())
->method('deleteReadMarksFromUser')
->with($user);

$notification = $this->getMockBuilder('OCP\Notification\INotification')->getMock();
$notification->expects($this->once())
->method('setUser')
->with('foo');

$notificationManager->expects($this->once())
->method('createNotification')
->willReturn($notification);
$notificationManager->expects($this->once())
->method('markProcessed')
->with($notification);
} else {
$config->expects($this->never())
->method('deleteAllUserValues');

$commentsManager->expects($this->never())
->method('deleteReferencesOfActor');
$commentsManager->expects($this->never())
->method('deleteReadMarksFromUser');

$notificationManager->expects($this->never())
->method('createNotification');
$notificationManager->expects($this->never())
->method('markProcessed');
}

$this->overwriteService('NotificationManager', $notificationManager);
$this->overwriteService('CommentsManager', $commentsManager);
$this->overwriteService('AllConfig', $config);

$this->assertSame($result, $user->delete());

$this->restoreService('AllConfig');
$this->restoreService('CommentsManager');
$this->restoreService('NotificationManager');

$this->assertEquals($expectedHooks, $hooksCalled);
}

public function testGetCloudId() {
Expand Down

0 comments on commit cd282fa

Please sign in to comment.