Skip to content

Commit 3dc9020

Browse files
Merge pull request #41512 from nextcloud/fix/userstatus/no-message-no-message-timestamp
fix(userstatus): Only track message timestamp for values
2 parents 1b18b97 + bdad290 commit 3dc9020

3 files changed

Lines changed: 38 additions & 2 deletions

File tree

apps/user_status/lib/Db/UserStatus.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
* @method void setCustomMessage(string|null $customMessage)
5151
* @method int|null getClearAt()
5252
* @method void setClearAt(int|null $clearAt)
53-
* @method setIsBackup(bool $true): void
53+
* @method setIsBackup(bool $isBackup): void
5454
* @method getIsBackup(): bool
5555
* @method int getStatusMessageTimestamp()
5656
* @method void setStatusMessageTimestamp(int $statusTimestamp)

apps/user_status/lib/Service/StatusService.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,13 @@ public function setUserStatus(string $userId,
314314
$userStatus->setCustomIcon(null);
315315
$userStatus->setCustomMessage($customMessage);
316316
$userStatus->setClearAt(null);
317-
$userStatus->setStatusMessageTimestamp($this->timeFactory->now()->getTimestamp());
317+
if ($this->predefinedStatusService->getTranslatedStatusForId($messageId) !== null
318+
|| ($customMessage !== null && $customMessage !== '')) {
319+
// Only track status message ID if there is one
320+
$userStatus->setStatusMessageTimestamp($this->timeFactory->now()->getTimestamp());
321+
} else {
322+
$userStatus->setStatusMessageTimestamp(0);
323+
}
318324

319325
if ($userStatus->getId() !== null) {
320326
return $this->mapper->update($userStatus);

apps/user_status/tests/Unit/Service/StatusServiceTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,4 +1130,34 @@ public function testFindByUserIdSystemDefined(): void {
11301130

11311131
$this->assertEquals($status, $this->service->findByUserId('admin'));
11321132
}
1133+
1134+
public function testSetStatusWithoutMessage(): void {
1135+
$this->predefinedStatusService->expects(self::once())
1136+
->method('isValidId')
1137+
->with(IUserStatus::MESSAGE_AVAILABILITY)
1138+
->willReturn(true);
1139+
$this->timeFactory
1140+
->method('getTime')
1141+
->willReturn(1234);
1142+
$status = new UserStatus();
1143+
$status->setUserId('admin');
1144+
$status->setStatusTimestamp(1234);
1145+
$status->setIsUserDefined(true);
1146+
$status->setStatus(IUserStatus::DND);
1147+
$status->setIsBackup(false);
1148+
$status->setMessageId(IUserStatus::MESSAGE_AVAILABILITY);
1149+
$this->mapper->expects(self::once())
1150+
->method('insert')
1151+
->with($this->equalTo($status))
1152+
->willReturnArgument(0);
1153+
1154+
$result = $this->service->setUserStatus(
1155+
'admin',
1156+
IUserStatus::DND,
1157+
IUserStatus::MESSAGE_AVAILABILITY,
1158+
true,
1159+
);
1160+
1161+
self::assertNotNull($result);
1162+
}
11331163
}

0 commit comments

Comments
 (0)