diff --git a/src/main/java/ru/javazen/telegram/bot/scheduler/UnschedulerNotifyHandler.java b/src/main/java/ru/javazen/telegram/bot/scheduler/UnschedulerNotifyHandler.java index 950cd734..11cfbdf8 100644 --- a/src/main/java/ru/javazen/telegram/bot/scheduler/UnschedulerNotifyHandler.java +++ b/src/main/java/ru/javazen/telegram/bot/scheduler/UnschedulerNotifyHandler.java @@ -2,6 +2,7 @@ import org.telegram.telegrambots.meta.api.methods.groupadministration.GetChatAdministrators; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Chat; import org.telegram.telegrambots.meta.api.objects.chatmember.ChatMember; import org.telegram.telegrambots.meta.api.objects.Message; import org.telegram.telegrambots.meta.bots.AbsSender; @@ -51,6 +52,11 @@ private boolean isReplyAuthor(Message message) { } private boolean isChatAdmin(Message message, AbsSender sender) throws TelegramApiException { + Chat chat = message.getChat(); + if (chat != null && chat.isUserChat()) { + return true; + } + GetChatAdministrators getChatAdministrators = new GetChatAdministrators(); getChatAdministrators.setChatId(message.getChatId()); diff --git a/src/test/java/ru/javazen/telegram/bot/scheduler/UnschedulerNotifyHandlerTest.java b/src/test/java/ru/javazen/telegram/bot/scheduler/UnschedulerNotifyHandlerTest.java index 57acf227..45c01471 100644 --- a/src/test/java/ru/javazen/telegram/bot/scheduler/UnschedulerNotifyHandlerTest.java +++ b/src/test/java/ru/javazen/telegram/bot/scheduler/UnschedulerNotifyHandlerTest.java @@ -6,6 +6,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.telegram.telegrambots.meta.api.methods.groupadministration.GetChatAdministrators; +import org.telegram.telegrambots.meta.api.objects.Chat; import org.telegram.telegrambots.meta.api.objects.Message; import org.telegram.telegrambots.meta.api.objects.User; import org.telegram.telegrambots.meta.api.objects.chatmember.ChatMember; @@ -75,6 +76,19 @@ public void chatAdminCanCancelAnotherAuthorTask() throws TelegramApiException { verify(messageSchedulerService).cancelTaskByChatAndMessage(CHAT_ID, TASK_MESSAGE_ID); } + @Test + public void personalChatUserCanCancelAnotherAuthorTask() throws TelegramApiException { + setMessageAuthor(111L); + setReplyAuthor(999L); + setPersonalChat(); + when(messageSchedulerService.cancelTaskByChatAndMessage(CHAT_ID, TASK_MESSAGE_ID)).thenReturn(true); + + assertTrue(handler.handle(message, "", sender)); + + verify(messageSchedulerService).cancelTaskByChatAndMessage(CHAT_ID, TASK_MESSAGE_ID); + verify(sender, never()).execute(any(GetChatAdministrators.class)); + } + @Test public void nonAdminCanNotCancelAnotherAuthorTask() throws TelegramApiException { setMessageAuthor(111L); @@ -86,6 +100,12 @@ public void nonAdminCanNotCancelAnotherAuthorTask() throws TelegramApiException verify(messageSchedulerService, never()).cancelTaskByChatAndMessage(anyLong(), anyInt()); } + private void setPersonalChat() { + Chat chat = mock(Chat.class); + when(chat.isUserChat()).thenReturn(true); + when(message.getChat()).thenReturn(chat); + } + private void setMessageAuthor(Long userId) { when(message.getFrom()).thenReturn(user(userId)); }