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.

JoinProcessorTest.kt 9.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. package com.dmdirc.ktirc.messages.processors
  2. import com.dmdirc.ktirc.TestConstants
  3. import com.dmdirc.ktirc.events.ChannelJoinFailed
  4. import com.dmdirc.ktirc.events.ChannelJoined
  5. import com.dmdirc.ktirc.model.IrcMessage
  6. import com.dmdirc.ktirc.model.User
  7. import com.dmdirc.ktirc.params
  8. import com.dmdirc.ktirc.util.currentTimeProvider
  9. import org.junit.jupiter.api.Assertions.assertEquals
  10. import org.junit.jupiter.api.BeforeEach
  11. import org.junit.jupiter.api.Test
  12. internal class JoinProcessorTest {
  13. @BeforeEach
  14. fun setUp() {
  15. currentTimeProvider = { TestConstants.time }
  16. }
  17. @Test
  18. fun `raises join event`() {
  19. val events = JoinProcessor().process(
  20. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", params("#crashandburn")))
  21. assertEquals(1, events.size)
  22. assertEquals(TestConstants.time, events[0].metadata.time)
  23. val event = events[0] as ChannelJoined
  24. assertEquals(User("acidburn", "libby", "root.localhost"), event.user)
  25. assertEquals("#crashandburn", event.target)
  26. }
  27. @Test
  28. fun `does nothing if prefix missing`() {
  29. val events = JoinProcessor().process(
  30. IrcMessage(emptyMap(), null, "JOIN", params("#crashandburn")))
  31. assertEquals(0, events.size)
  32. }
  33. @Test
  34. fun `adds real name and account from extended join`() {
  35. val events = JoinProcessor().process(
  36. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", params("#crashandburn", "acidBurn", "Libby")))
  37. assertEquals(1, events.size)
  38. assertEquals(TestConstants.time, events[0].metadata.time)
  39. val event = events[0] as ChannelJoined
  40. assertEquals(User("acidburn", "libby", "root.localhost", account = "acidBurn", realName = "Libby"), event.user)
  41. assertEquals("#crashandburn", event.target)
  42. }
  43. @Test
  44. fun `ignores account if the user is not authed`() {
  45. val events = JoinProcessor().process(
  46. IrcMessage(emptyMap(), "acidburn!libby@root.localhost".toByteArray(), "JOIN", params("#crashandburn", "*", "Libby")))
  47. assertEquals(1, events.size)
  48. assertEquals(TestConstants.time, events[0].metadata.time)
  49. val event = events[0] as ChannelJoined
  50. assertEquals(User("acidburn", "libby", "root.localhost", realName = "Libby"), event.user)
  51. assertEquals("#crashandburn", event.target)
  52. }
  53. @Test
  54. fun `raises join failed if too many channels reached`() {
  55. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "405", params("acidBurn", "#thegibson", "You have joined too many channels")))
  56. assertEquals(1, events.size)
  57. assertEquals(TestConstants.time, events[0].metadata.time)
  58. val event = events[0] as ChannelJoinFailed
  59. assertEquals("#thegibson", event.target)
  60. assertEquals(ChannelJoinFailed.JoinError.TooManyChannels, event.reason)
  61. }
  62. @Test
  63. fun `raises join failed if hiding not allowed`() {
  64. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "459", params("acidBurn", "#thegibson", "You are not allowed to hide")))
  65. assertEquals(1, events.size)
  66. assertEquals(TestConstants.time, events[0].metadata.time)
  67. val event = events[0] as ChannelJoinFailed
  68. assertEquals("#thegibson", event.target)
  69. assertEquals(ChannelJoinFailed.JoinError.NoHiding, event.reason)
  70. }
  71. @Test
  72. fun `raises join failed if channel is full`() {
  73. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "471", params("acidBurn", "#thegibson", "Channel is full")))
  74. assertEquals(1, events.size)
  75. assertEquals(TestConstants.time, events[0].metadata.time)
  76. val event = events[0] as ChannelJoinFailed
  77. assertEquals("#thegibson", event.target)
  78. assertEquals(ChannelJoinFailed.JoinError.ChannelFull, event.reason)
  79. }
  80. @Test
  81. fun `raises join failed if channel is invite only`() {
  82. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "473", params("acidBurn", "#thegibson", "Channel is invite only")))
  83. assertEquals(1, events.size)
  84. assertEquals(TestConstants.time, events[0].metadata.time)
  85. val event = events[0] as ChannelJoinFailed
  86. assertEquals("#thegibson", event.target)
  87. assertEquals(ChannelJoinFailed.JoinError.NeedInvite, event.reason)
  88. }
  89. @Test
  90. fun `raises join failed if banned`() {
  91. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "474", params("acidBurn", "#thegibson", "You are banned")))
  92. assertEquals(1, events.size)
  93. assertEquals(TestConstants.time, events[0].metadata.time)
  94. val event = events[0] as ChannelJoinFailed
  95. assertEquals("#thegibson", event.target)
  96. assertEquals(ChannelJoinFailed.JoinError.Banned, event.reason)
  97. }
  98. @Test
  99. fun `raises join failed if channel is keyed`() {
  100. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "475", params("acidBurn", "#thegibson", "Bad key (+k)")))
  101. assertEquals(1, events.size)
  102. assertEquals(TestConstants.time, events[0].metadata.time)
  103. val event = events[0] as ChannelJoinFailed
  104. assertEquals("#thegibson", event.target)
  105. assertEquals(ChannelJoinFailed.JoinError.NeedKey, event.reason)
  106. }
  107. @Test
  108. fun `raises join failed if need a registered nickname`() {
  109. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "477", params("acidBurn", "#thegibson", "Must be registered")))
  110. assertEquals(1, events.size)
  111. assertEquals(TestConstants.time, events[0].metadata.time)
  112. val event = events[0] as ChannelJoinFailed
  113. assertEquals("#thegibson", event.target)
  114. assertEquals(ChannelJoinFailed.JoinError.NeedRegisteredNick, event.reason)
  115. }
  116. @Test
  117. fun `raises join failed if bad channel name`() {
  118. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "479", params("acidBurn", "#thegibson", "Bad channel name")))
  119. assertEquals(1, events.size)
  120. assertEquals(TestConstants.time, events[0].metadata.time)
  121. val event = events[0] as ChannelJoinFailed
  122. assertEquals("#thegibson", event.target)
  123. assertEquals(ChannelJoinFailed.JoinError.BadChannelName, event.reason)
  124. }
  125. @Test
  126. fun `raises join failed if throttled`() {
  127. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "480", params("acidBurn", "#thegibson", "You are throttled")))
  128. assertEquals(1, events.size)
  129. assertEquals(TestConstants.time, events[0].metadata.time)
  130. val event = events[0] as ChannelJoinFailed
  131. assertEquals("#thegibson", event.target)
  132. assertEquals(ChannelJoinFailed.JoinError.Throttled, event.reason)
  133. }
  134. @Test
  135. fun `raises join failed if secure only`() {
  136. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "489", params("acidBurn", "#thegibson", "You must use a secure connection")))
  137. assertEquals(1, events.size)
  138. assertEquals(TestConstants.time, events[0].metadata.time)
  139. val event = events[0] as ChannelJoinFailed
  140. assertEquals("#thegibson", event.target)
  141. assertEquals(ChannelJoinFailed.JoinError.NeedTls, event.reason)
  142. }
  143. @Test
  144. fun `raises join failed if too many joins`() {
  145. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "500", params("acidBurn", "#thegibson", "Too many joins")))
  146. assertEquals(1, events.size)
  147. assertEquals(TestConstants.time, events[0].metadata.time)
  148. val event = events[0] as ChannelJoinFailed
  149. assertEquals("#thegibson", event.target)
  150. assertEquals(ChannelJoinFailed.JoinError.Throttled, event.reason)
  151. }
  152. @Test
  153. fun `raises join failed if admin onnly`() {
  154. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "519", params("acidBurn", "#thegibson", "Admins only")))
  155. assertEquals(1, events.size)
  156. assertEquals(TestConstants.time, events[0].metadata.time)
  157. val event = events[0] as ChannelJoinFailed
  158. assertEquals("#thegibson", event.target)
  159. assertEquals(ChannelJoinFailed.JoinError.NeedAdmin, event.reason)
  160. }
  161. @Test
  162. fun `raises join failed if oper only`() {
  163. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "520", params("acidBurn", "#thegibson", "Opers only")))
  164. assertEquals(1, events.size)
  165. assertEquals(TestConstants.time, events[0].metadata.time)
  166. val event = events[0] as ChannelJoinFailed
  167. assertEquals("#thegibson", event.target)
  168. assertEquals(ChannelJoinFailed.JoinError.NeedOper, event.reason)
  169. }
  170. @Test
  171. fun `raises join failed if unknown numeric`() {
  172. val events = JoinProcessor().process(IrcMessage(emptyMap(), null, "999", params("acidBurn", "#thegibson", "Weird")))
  173. assertEquals(1, events.size)
  174. assertEquals(TestConstants.time, events[0].metadata.time)
  175. val event = events[0] as ChannelJoinFailed
  176. assertEquals("#thegibson", event.target)
  177. assertEquals(ChannelJoinFailed.JoinError.Unknown, event.reason)
  178. }
  179. }