From 413a6042f3c99b424d351bee9b94d570d0dc0c6c Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 30 Sep 2020 14:12:02 +0200 Subject: [PATCH] Reset the user status when clearing the custom message Signed-off-by: Joas Schilling --- .../lib/Controller/UserStatusController.php | 7 ++++- .../Controller/UserStatusControllerTest.php | 28 +++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/apps/user_status/lib/Controller/UserStatusController.php b/apps/user_status/lib/Controller/UserStatusController.php index ffbe1e753e..950cafb104 100644 --- a/apps/user_status/lib/Controller/UserStatusController.php +++ b/apps/user_status/lib/Controller/UserStatusController.php @@ -138,7 +138,12 @@ class UserStatusController extends OCSController { string $message, ?int $clearAt): DataResponse { try { - $status = $this->service->setCustomMessage($this->userId, $statusIcon, $message, $clearAt); + if ($message !== '') { + $status = $this->service->setCustomMessage($this->userId, $statusIcon, $message, $clearAt); + } else { + $this->service->clearMessage($this->userId); + $status = $this->service->findByUserId($this->userId); + } return new DataResponse($this->formatStatus($status)); } catch (InvalidClearAtException $ex) { $this->logger->debug('New user-status for "' . $this->userId . '" was rejected due to an invalid clearAt value "' . $clearAt . '"'); diff --git a/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php b/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php index 5d1e15b0d3..fbf86ba92c 100644 --- a/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php +++ b/apps/user_status/tests/Unit/Controller/UserStatusControllerTest.php @@ -243,6 +243,7 @@ class UserStatusControllerTest extends TestCase { * @param Throwable|null $exception * @param bool $expectLogger * @param string|null $expectedLogMessage + * @param bool $expectSuccessAsReset * * @dataProvider setCustomMessageDataProvider */ @@ -253,7 +254,8 @@ class UserStatusControllerTest extends TestCase { bool $expectException, ?Throwable $exception, bool $expectLogger, - ?string $expectedLogMessage): void { + ?string $expectedLogMessage, + bool $expectSuccessAsReset = false): void { $userStatus = $this->getUserStatus(); if ($expectException) { @@ -262,10 +264,25 @@ class UserStatusControllerTest extends TestCase { ->with('john.doe', $statusIcon, $message, $clearAt) ->willThrowException($exception); } else { - $this->service->expects($this->once()) - ->method('setCustomMessage') - ->with('john.doe', $statusIcon, $message, $clearAt) - ->willReturn($userStatus); + if ($expectSuccessAsReset) { + $this->service->expects($this->never()) + ->method('setCustomMessage'); + $this->service->expects($this->once()) + ->method('clearMessage') + ->with('john.doe'); + $this->service->expects($this->once()) + ->method('findByUserId') + ->with('john.doe') + ->willReturn($userStatus); + } else { + $this->service->expects($this->once()) + ->method('setCustomMessage') + ->with('john.doe', $statusIcon, $message, $clearAt) + ->willReturn($userStatus); + + $this->service->expects($this->never()) + ->method('clearMessage'); + } } if ($expectLogger) { @@ -297,6 +314,7 @@ class UserStatusControllerTest extends TestCase { public function setCustomMessageDataProvider(): array { return [ ['👨🏽‍💻', 'Busy developing the status feature', 500, true, false, null, false, null], + ['👨🏽‍💻', '', 500, true, false, null, false, null, true], ['👨🏽‍💻', 'Busy developing the status feature', 500, false, true, new InvalidClearAtException('Original exception message'), true, 'New user-status for "john.doe" was rejected due to an invalid clearAt value "500"'], ['👨🏽‍💻', 'Busy developing the status feature', 500, false, true, new InvalidStatusIconException('Original exception message'), true,