MessagingTest.kt 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. /*
  2. * Copyright 2019-2022 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/dev/LICENSE
  8. */
  9. package net.mamoe.mirai.mock.test.mock
  10. import kotlinx.coroutines.flow.toList
  11. import net.mamoe.mirai.contact.MemberPermission
  12. import net.mamoe.mirai.event.events.*
  13. import net.mamoe.mirai.message.data.MessageSource.Key.recall
  14. import net.mamoe.mirai.message.data.OnlineMessageSource
  15. import net.mamoe.mirai.message.data.PlainText
  16. import net.mamoe.mirai.message.data.messageChainOf
  17. import net.mamoe.mirai.message.data.source
  18. import net.mamoe.mirai.mock.MockActions.mockFireRecalled
  19. import net.mamoe.mirai.mock.test.MockBotTestBase
  20. import net.mamoe.mirai.mock.utils.broadcastMockEvents
  21. import net.mamoe.mirai.mock.utils.simpleMemberInfo
  22. import org.junit.jupiter.api.Test
  23. import kotlin.test.assertEquals
  24. import kotlin.test.assertFails
  25. import kotlin.test.assertNull
  26. import kotlin.test.assertSame
  27. internal class MessagingTest: MockBotTestBase() {
  28. @Test
  29. internal fun testMessageEventBroadcast() = runTest {
  30. runAndReceiveEventBroadcast {
  31. bot.addGroup(5597122, "testing!")
  32. .addMember(simpleMemberInfo(5971, "test", permission = MemberPermission.OWNER))
  33. .says("Hello World")
  34. bot.addFriend(9815, "tester").says("Msg By TestFriend")
  35. bot.addStranger(987166, "sudo").says("How are you")
  36. bot.getGroupOrFail(5597122).sendMessage("Testing message")
  37. bot.getFriendOrFail(9815).sendMessage("Hi my friend")
  38. bot.getStrangerOrFail(987166).sendMessage("How are you")
  39. }.let { events ->
  40. assertEquals(9, events.size)
  41. assertIsInstance<GroupMessageEvent>(events[0]) {
  42. assertEquals("Hello World", message.contentToString())
  43. assertEquals("test", senderName)
  44. assertEquals(5971, sender.id)
  45. assertEquals(5597122, group.id)
  46. assertIsInstance<OnlineMessageSource.Incoming.FromGroup>(message.source)
  47. }
  48. assertIsInstance<FriendMessageEvent>(events[1]) {
  49. assertEquals("Msg By TestFriend", message.contentToString())
  50. assertEquals("tester", senderName)
  51. assertEquals(9815, sender.id)
  52. assertIsInstance<OnlineMessageSource.Incoming.FromFriend>(message.source)
  53. }
  54. assertIsInstance<StrangerMessageEvent>(events[2]) {
  55. assertEquals("How are you", message.contentToString())
  56. assertEquals("sudo", senderName)
  57. assertEquals(987166, sender.id)
  58. assertIsInstance<OnlineMessageSource.Incoming.FromStranger>(message.source)
  59. }
  60. assertIsInstance<GroupMessagePreSendEvent>(events[3])
  61. assertIsInstance<GroupMessagePostSendEvent>(events[4]) {
  62. assertIsInstance<OnlineMessageSource.Outgoing.ToGroup>(receipt!!.source)
  63. }
  64. assertIsInstance<FriendMessagePreSendEvent>(events[5])
  65. assertIsInstance<FriendMessagePostSendEvent>(events[6]) {
  66. assertIsInstance<OnlineMessageSource.Outgoing.ToFriend>(receipt!!.source)
  67. }
  68. assertIsInstance<StrangerMessagePreSendEvent>(events[7])
  69. assertIsInstance<StrangerMessagePostSendEvent>(events[8]) {
  70. assertIsInstance<OnlineMessageSource.Outgoing.ToStranger>(receipt!!.source)
  71. }
  72. }
  73. }
  74. @Test
  75. internal fun testNudge() = runTest {
  76. val group = bot.addGroup(1, "1")
  77. val nudgeSender = group.addMember(simpleMemberInfo(3, "3", permission = MemberPermission.MEMBER))
  78. val nudged = group.addMember(simpleMemberInfo(4, "4", permission = MemberPermission.MEMBER))
  79. val myFriend = bot.addFriend(1, "514")
  80. val myStranger = bot.addStranger(2, "awef")
  81. runAndReceiveEventBroadcast {
  82. nudged.nudgedBy(nudgeSender)
  83. nudged.nudge().sendTo(group)
  84. myFriend.nudges(bot)
  85. myStranger.nudges(bot)
  86. myFriend.nudgedBy(bot)
  87. myStranger.nudgedBy(bot)
  88. }.let { events ->
  89. assertEquals(6, events.size)
  90. assertIsInstance<NudgeEvent>(events[0]) {
  91. assertSame(nudgeSender, this.from)
  92. assertSame(nudged, this.target)
  93. assertSame(group, this.subject)
  94. }
  95. assertIsInstance<NudgeEvent>(events[1]) {
  96. assertSame(bot, this.from)
  97. assertSame(nudged, this.target)
  98. assertSame(group, this.subject)
  99. }
  100. assertIsInstance<NudgeEvent>(events[2]) {
  101. assertSame(myFriend, this.from)
  102. assertSame(bot, this.target)
  103. assertSame(myFriend, this.subject)
  104. }
  105. assertIsInstance<NudgeEvent>(events[3]) {
  106. assertSame(myStranger, this.from)
  107. assertSame(bot, this.target)
  108. assertSame(myStranger, this.subject)
  109. }
  110. assertIsInstance<NudgeEvent>(events[4]) {
  111. assertSame(bot, this.from)
  112. assertSame(myFriend, this.target)
  113. assertSame(myFriend, this.subject)
  114. }
  115. assertIsInstance<NudgeEvent>(events[5]) {
  116. assertSame(bot, this.from)
  117. assertSame(myStranger, this.target)
  118. assertSame(myStranger, this.subject)
  119. }
  120. }
  121. }
  122. @Test
  123. internal fun testRoamingMessages() = runTest {
  124. val mockFriend = bot.addFriend(1, "1")
  125. broadcastMockEvents {
  126. mockFriend says { append("Testing!") }
  127. mockFriend says { append("Test2!") }
  128. }
  129. mockFriend.sendMessage("Pong!")
  130. mockFriend.roamingMessages.getAllMessages().toList().let { messages ->
  131. assertEquals(3, messages.size)
  132. assertEquals(messageChainOf(PlainText("Testing!")), messages[0])
  133. assertEquals(messageChainOf(PlainText("Test2!")), messages[1])
  134. assertEquals(messageChainOf(PlainText("Pong!")), messages[2])
  135. }
  136. }
  137. @Test
  138. internal fun testMessageRecallEventBroadcast() = runTest {
  139. val group = bot.addGroup(8484846, "g")
  140. val admin = group.addMember(simpleMemberInfo(945474, "admin", permission = MemberPermission.ADMINISTRATOR))
  141. val sender = group.addMember(simpleMemberInfo(178711, "usr", permission = MemberPermission.MEMBER))
  142. runAndReceiveEventBroadcast {
  143. sender.says("Test").recalledBySender()
  144. sender.says("Admin recall").recalledBy(admin)
  145. mockFireRecalled(group.sendMessage("Hello world"), admin)
  146. sender.says("Hi").recall()
  147. admin.says("I'm admin").let { resp ->
  148. resp.recall()
  149. assertFails { resp.recall() }.let(::println)
  150. }
  151. }.dropMsgChat().let { events ->
  152. assertEquals(5, events.size)
  153. assertIsInstance<MessageRecallEvent.GroupRecall>(events[0]) {
  154. assertNull(operator)
  155. assertSame(sender, author)
  156. }
  157. assertIsInstance<MessageRecallEvent.GroupRecall>(events[1]) {
  158. assertSame(admin, operator)
  159. assertSame(sender, author)
  160. }
  161. assertIsInstance<MessageRecallEvent.GroupRecall>(events[2]) {
  162. assertSame(admin, operator)
  163. assertSame(group.botAsMember, author)
  164. }
  165. assertIsInstance<MessageRecallEvent.GroupRecall>(events[3]) {
  166. assertSame(null, operator)
  167. assertSame(sender, author)
  168. }
  169. assertIsInstance<MessageRecallEvent.GroupRecall>(events[4]) {
  170. assertSame(null, operator)
  171. assertSame(admin, author)
  172. }
  173. }
  174. val root = group.addMember(simpleMemberInfo(54986565, "root", permission = MemberPermission.OWNER))
  175. runAndReceiveEventBroadcast {
  176. sender.says("0").runAndAssertFails { recall() }
  177. admin.says("0").runAndAssertFails { recall() }
  178. root.says("0").runAndAssertFails { recall() }
  179. group.sendMessage("Hi").recall()
  180. }.dropMsgChat().let { events ->
  181. assertEquals(1, events.size)
  182. assertIsInstance<MessageRecallEvent.GroupRecall>(events[0]) {
  183. assertEquals(group.botAsMember, author)
  184. assertEquals(null, operator)
  185. }
  186. }
  187. }
  188. }