Merge pull request #23115 from nextcloud/backport/23108/stable20

[stable20] Reset the user status when clearing the custom message
This commit is contained in:
Roeland Jago Douma 2020-10-01 19:23:51 +02:00 committed by GitHub
commit 61a0069dd5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 6 deletions

View File

@ -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 . '"');

View File

@ -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,