Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2021-07-07 16:38:24 +02:00
Родитель bbed7ef202
Коммит 31a32b6780
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 7076EA9751AACDDA
3 изменённых файлов: 136 добавлений и 22 удалений

Просмотреть файл

@ -207,7 +207,7 @@ class Notifier {
$notification->setObject('chat', $chat->getToken());
$this->notificationManager->markProcessed($notification);
if ($chatOnly) {
if (!$chatOnly) {
$notification->setObject('room', $chat->getToken());
$this->notificationManager->markProcessed($notification);

Просмотреть файл

@ -30,6 +30,7 @@ use OCA\Talk\Chat\Notifier;
use OCA\Talk\Participant;
use OCA\Talk\Room;
use OCA\Talk\Service\ParticipantService;
use OCA\Talk\Share\RoomShareProvider;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Comments\IComment;
use OCP\Comments\ICommentsManager;
@ -51,6 +52,8 @@ class ChatManagerTest extends TestCase {
protected $dispatcher;
/** @var INotificationManager|MockObject */
protected $notificationManager;
/** @var RoomShareProvider|MockObject */
protected $shareProvider;
/** @var ParticipantService|MockObject */
protected $participantService;
/** @var Notifier|MockObject */
@ -66,6 +69,7 @@ class ChatManagerTest extends TestCase {
$this->commentsManager = $this->createMock(CommentsManager::class);
$this->dispatcher = $this->createMock(IEventDispatcher::class);
$this->notificationManager = $this->createMock(INotificationManager::class);
$this->shareProvider = $this->createMock(RoomShareProvider::class);
$this->participantService = $this->createMock(ParticipantService::class);
$this->notifier = $this->createMock(Notifier::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
@ -76,6 +80,44 @@ class ChatManagerTest extends TestCase {
$this->dispatcher,
\OC::$server->getDatabaseConnection(),
$this->notificationManager,
$this->shareProvider,
$this->participantService,
$this->notifier,
$cacheFactory,
$this->timeFactory
);
}
/**
* @param string[] $methods
* @return ChatManager|MockObject
*/
protected function getManager(array $methods = []): ChatManager {
$cacheFactory = $this->createMock(ICacheFactory::class);
if (!empty($methods)) {
return $this->getMockBuilder(ChatManager::class)
->setConstructorArgs([
$this->commentsManager,
$this->dispatcher,
\OC::$server->getDatabaseConnection(),
$this->notificationManager,
$this->shareProvider,
$this->participantService,
$this->notifier,
$cacheFactory,
$this->timeFactory,
])
->setMethods($methods)
->getMock();
}
return new ChatManager(
$this->commentsManager,
$this->dispatcher,
\OC::$server->getDatabaseConnection(),
$this->notificationManager,
$this->shareProvider,
$this->participantService,
$this->notifier,
$cacheFactory,
@ -221,7 +263,7 @@ class ChatManagerTest extends TestCase {
$this->assertCommentEquals($commentExpected, $return);
}
public function testGetHistory() {
public function testGetHistory(): void {
$offset = 1;
$limit = 42;
$expected = [
@ -245,7 +287,7 @@ class ChatManagerTest extends TestCase {
$this->assertEquals($expected, $comments);
}
public function testWaitForNewMessages() {
public function testWaitForNewMessages(): void {
$offset = 1;
$limit = 42;
$timeout = 23;
@ -269,7 +311,7 @@ class ChatManagerTest extends TestCase {
->method('markMentionNotificationsRead')
->with($chat, 'userId');
/** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
/** @var IUser|MockObject $user */
$user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
@ -280,7 +322,7 @@ class ChatManagerTest extends TestCase {
$this->assertEquals($expected, $comments);
}
public function testWaitForNewMessagesWithWaiting() {
public function testWaitForNewMessagesWithWaiting(): void {
$offset = 1;
$limit = 42;
$timeout = 23;
@ -307,7 +349,7 @@ class ChatManagerTest extends TestCase {
->method('markMentionNotificationsRead')
->with($chat, 'userId');
/** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */
/** @var IUser|MockObject $user */
$user = $this->createMock(IUser::class);
$user->expects($this->any())
->method('getUID')
@ -318,7 +360,7 @@ class ChatManagerTest extends TestCase {
$this->assertEquals($expected, $comments);
}
public function testGetUnreadCount() {
public function testGetUnreadCount(): void {
/** @var Room|MockObject $chat */
$chat = $this->createMock(Room::class);
$chat->expects($this->atLeastOnce())
@ -332,7 +374,7 @@ class ChatManagerTest extends TestCase {
$this->chatManager->getUnreadCount($chat, 42);
}
public function testDeleteMessages() {
public function testDeleteMessages(): void {
$chat = $this->createMock(Room::class);
$chat->expects($this->any())
->method('getId')
@ -348,4 +390,47 @@ class ChatManagerTest extends TestCase {
$this->chatManager->deleteMessages($chat);
}
public function testClearHistory(): void {
$chat = $this->createMock(Room::class);
$chat->expects($this->any())
->method('getId')
->willReturn(1234);
$chat->expects($this->any())
->method('getToken')
->willReturn('t0k3n');
$this->commentsManager->expects($this->once())
->method('deleteCommentsAtObject')
->with('chat', 1234);
$this->shareProvider->expects($this->once())
->method('deleteInRoom')
->with('t0k3n');
$this->notifier->expects($this->once())
->method('removePendingNotificationsForRoom')
->with($chat, true);
$this->participantService->expects($this->once())
->method('resetChatDetails')
->with($chat);
$date = new \DateTime();
$this->timeFactory->method('getDateTime')
->willReturn($date);
$manager = $this->getManager(['addSystemMessage']);
$manager->expects($this->once())
->method('addSystemMessage')
->with(
$chat,
'users',
'admin',
json_encode(['message' => 'cleared_history', 'parameters' => []]),
$date,
false
);
$manager->clearHistory($chat, 'users', 'admin');
}
}

Просмотреть файл

@ -83,7 +83,7 @@ class NotifierTest extends TestCase {
);
}
private function newComment($id, $actorType, $actorId, $creationDateTime, $message) {
private function newComment($id, $actorType, $actorId, $creationDateTime, $message): IComment {
// $mentionMatches[0] contains the whole matches, while
// $mentionMatches[1] contains the matched subpattern.
$mentionMatches = [];
@ -107,7 +107,7 @@ class NotifierTest extends TestCase {
return $comment;
}
private function newNotification($room, IComment $comment) {
private function newNotification($room, IComment $comment): INotification {
$notification = $this->createMock(INotification::class);
$notification->expects($this->once())
@ -140,7 +140,7 @@ class NotifierTest extends TestCase {
return $notification;
}
public function testNotifyMentionedUsers() {
public function testNotifyMentionedUsers(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016), 'Mention @anotherUser');
$room = $this->createMock(Room::class);
@ -183,7 +183,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotNotifyMentionedUserIfReplyToAuthor() {
public function testNotNotifyMentionedUserIfReplyToAuthor(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016), 'Mention @anotherUser');
$room = $this->createMock(Room::class);
@ -211,7 +211,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, ['anotherUser']);
}
public function testNotifyMentionedUsersByGuest() {
public function testNotifyMentionedUsersByGuest(): void {
$comment = $this->newComment(108, 'guests', 'testSpreedSession', new \DateTime('@' . 1000000016), 'Mention @anotherUser');
$room = $this->createMock(Room::class);
@ -254,7 +254,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotifyMentionedUsersWithLongMessageStartMention() {
public function testNotifyMentionedUsersWithLongMessageStartMention(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016),
'123456789 @anotherUserWithOddLengthName 123456789-123456789-123456789-123456789-123456789-123456789');
@ -298,7 +298,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotifyMentionedUsersWithLongMessageMiddleMention() {
public function testNotifyMentionedUsersWithLongMessageMiddleMention(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016),
'123456789-123456789-123456789-1234 @anotherUserWithOddLengthName 6789-123456789-123456789-123456789');
@ -342,7 +342,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotifyMentionedUsersWithLongMessageEndMention() {
public function testNotifyMentionedUsersWithLongMessageEndMention(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016),
'123456789-123456789-123456789-123456789-123456789-123456789 @anotherUserWithOddLengthName 123456789');
@ -386,7 +386,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotifyMentionedUsersToSelf() {
public function testNotifyMentionedUsersToSelf(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016), 'Mention @testUser');
$room = $this->createMock(Room::class);
@ -406,7 +406,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotifyMentionedUsersToUnknownUser() {
public function testNotifyMentionedUsersToUnknownUser(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016), 'Mention @unknownUser');
$room = $this->createMock(Room::class);
@ -427,7 +427,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotifyMentionedUsersToUserNotInvitedToChat() {
public function testNotifyMentionedUsersToUserNotInvitedToChat(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016), 'Mention @userNotInOneToOneChat');
$room = $this->createMock(Room::class);
@ -458,7 +458,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotifyMentionedUsersNoMentions() {
public function testNotifyMentionedUsersNoMentions(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016), 'No mentions');
$room = $this->createMock(Room::class);
@ -475,7 +475,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testNotifyMentionedUsersSeveralMentions() {
public function testNotifyMentionedUsersSeveralMentions(): void {
$comment = $this->newComment(108, 'users', 'testUser', new \DateTime('@' . 1000000016), 'Mention @anotherUser, and @unknownUser, and @testUser, and @userAbleToJoin');
$room = $this->createMock(Room::class);
@ -524,7 +524,7 @@ class NotifierTest extends TestCase {
$this->notifier->notifyMentionedUsers($room, $comment, []);
}
public function testRemovePendingNotificationsForRoom() {
public function testRemovePendingNotificationsForRoom(): void {
$notification = $this->createMock(INotification::class);
$room = $this->createMock(Room::class);
@ -556,4 +556,33 @@ class NotifierTest extends TestCase {
$this->notifier->removePendingNotificationsForRoom($room);
}
public function testRemovePendingNotificationsForChatOnly(): void {
$notification = $this->createMock(INotification::class);
$room = $this->createMock(Room::class);
$room->expects($this->any())
->method('getToken')
->willReturn('Token123');
$this->notificationManager->expects($this->once())
->method('createNotification')
->willReturn($notification);
$notification->expects($this->once())
->method('setApp')
->with('spreed')
->willReturnSelf();
$notification->expects($this->exactly(1))
->method('setObject')
->with('chat', 'Token123')
->willReturnSelf();
$this->notificationManager->expects($this->exactly(1))
->method('markProcessed')
->with($notification);
$this->notifier->removePendingNotificationsForRoom($room, true);
}
}