You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PrivmsgProcessorTest.kt 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package com.dmdirc.ktirc.messages
  2. import com.dmdirc.ktirc.TestConstants
  3. import com.dmdirc.ktirc.events.ActionReceived
  4. import com.dmdirc.ktirc.events.CtcpReceived
  5. import com.dmdirc.ktirc.events.MessageReceived
  6. import com.dmdirc.ktirc.model.IrcMessage
  7. import com.dmdirc.ktirc.model.MessageTag
  8. import com.dmdirc.ktirc.model.User
  9. import com.dmdirc.ktirc.params
  10. import com.dmdirc.ktirc.util.currentTimeProvider
  11. import org.junit.jupiter.api.Assertions.assertEquals
  12. import org.junit.jupiter.api.Assertions.assertNull
  13. import org.junit.jupiter.api.BeforeEach
  14. import org.junit.jupiter.api.Test
  15. internal class PrivmsgProcessorTest {
  16. @BeforeEach
  17. fun setUp() {
  18. currentTimeProvider = { TestConstants.time }
  19. }
  20. @Test
  21. fun `PrivsgProcessor raises message received event`() {
  22. val events = PrivmsgProcessor().process(
  23. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "hack the planet!")))
  24. assertEquals(1, events.size)
  25. val event = events[0] as MessageReceived
  26. assertEquals(TestConstants.time, event.time)
  27. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  28. assertEquals("#crashandburn", event.target)
  29. assertEquals("hack the planet!", event.message)
  30. assertNull(event.messageId)
  31. }
  32. @Test
  33. fun `PrivsgProcessor raises message received event with message ID`() {
  34. val events = PrivmsgProcessor().process(
  35. IrcMessage(mapOf(MessageTag.MessageId to "abc123"), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "hack the planet!")))
  36. assertEquals(1, events.size)
  37. val event = events[0] as MessageReceived
  38. assertEquals(TestConstants.time, event.time)
  39. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  40. assertEquals("#crashandburn", event.target)
  41. assertEquals("hack the planet!", event.message)
  42. assertEquals("abc123", event.messageId)
  43. }
  44. @Test
  45. fun `PrivsgProcessor raises action received event with content`() {
  46. val events = PrivmsgProcessor().process(
  47. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001ACTION hacks the planet\u0001")))
  48. assertEquals(1, events.size)
  49. val event = events[0] as ActionReceived
  50. assertEquals(TestConstants.time, event.time)
  51. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  52. assertEquals("#crashandburn", event.target)
  53. assertEquals("hacks the planet", event.action)
  54. assertNull(event.messageId)
  55. }
  56. @Test
  57. fun `PrivsgProcessor raises action received event with message ID`() {
  58. val events = PrivmsgProcessor().process(
  59. IrcMessage(mapOf(MessageTag.MessageId to "abc123"), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001ACTION hacks the planet\u0001")))
  60. assertEquals(1, events.size)
  61. val event = events[0] as ActionReceived
  62. assertEquals(TestConstants.time, event.time)
  63. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  64. assertEquals("#crashandburn", event.target)
  65. assertEquals("hacks the planet", event.action)
  66. assertEquals("abc123", event.messageId)
  67. }
  68. @Test
  69. fun `PrivsgProcessor raises action received event without content`() {
  70. val events = PrivmsgProcessor().process(
  71. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001ACTION\u0001")))
  72. assertEquals(1, events.size)
  73. val event = events[0] as ActionReceived
  74. assertEquals(TestConstants.time, event.time)
  75. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  76. assertEquals("#crashandburn", event.target)
  77. assertEquals("", event.action)
  78. assertNull(event.messageId)
  79. }
  80. @Test
  81. fun `PrivsgProcessor raises action received event with lowercase type`() {
  82. val events = PrivmsgProcessor().process(
  83. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001action hacks the planet\u0001")))
  84. assertEquals(1, events.size)
  85. val event = events[0] as ActionReceived
  86. assertEquals(TestConstants.time, event.time)
  87. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  88. assertEquals("#crashandburn", event.target)
  89. assertEquals("hacks the planet", event.action)
  90. assertNull(event.messageId)
  91. }
  92. @Test
  93. fun `PrivsgProcessor raises CTCP received event with content`() {
  94. val events = PrivmsgProcessor().process(
  95. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001PING 12345\u0001")))
  96. assertEquals(1, events.size)
  97. val event = events[0] as CtcpReceived
  98. assertEquals(TestConstants.time, event.time)
  99. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  100. assertEquals("#crashandburn", event.target)
  101. assertEquals("PING", event.type)
  102. assertEquals("12345", event.content)
  103. }
  104. @Test
  105. fun `PrivsgProcessor raises CTCP received event without content`() {
  106. val events = PrivmsgProcessor().process(
  107. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "PRIVMSG", params("#crashandburn", "\u0001PING\u0001")))
  108. assertEquals(1, events.size)
  109. val event = events[0] as CtcpReceived
  110. assertEquals(TestConstants.time, event.time)
  111. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  112. assertEquals("#crashandburn", event.target)
  113. assertEquals("PING", event.type)
  114. assertEquals("", event.content)
  115. }
  116. @Test
  117. fun `PrivsgProcessor does nothing if prefix missing`() {
  118. val events = PrivmsgProcessor().process(
  119. IrcMessage(emptyMap(), null, "PRIVMSG", params("#crashandburn", "hack the planet!")))
  120. assertEquals(0, events.size)
  121. }
  122. }