From 32b577a5df926b7de030e6d7abb5c7fe2f1c171a Mon Sep 17 00:00:00 2001
From: Joas Schilling <coding@schilljs.com>
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 <coding@schilljs.com>
---
 .../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 ffbe1e753ef..950cafb104d 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 5d1e15b0d3e..fbf86ba92c4 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,
-- 
GitLab