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.

ChannelFanOutMutatorTest.kt 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package com.dmdirc.ktirc.events.mutators
  2. import com.dmdirc.ktirc.BehaviourConfig
  3. import com.dmdirc.ktirc.IrcClient
  4. import com.dmdirc.ktirc.TestConstants
  5. import com.dmdirc.ktirc.events.*
  6. import com.dmdirc.ktirc.io.CaseMapping
  7. import com.dmdirc.ktirc.io.MessageEmitter
  8. import com.dmdirc.ktirc.model.*
  9. import com.nhaarman.mockitokotlin2.doReturn
  10. import com.nhaarman.mockitokotlin2.mock
  11. import org.junit.jupiter.api.Assertions
  12. import org.junit.jupiter.api.Test
  13. internal class ChannelFanOutMutatorTest {
  14. private val mutator = ChannelFanOutMutator()
  15. private val channelStateMap = ChannelStateMap { CaseMapping.Rfc }
  16. private val serverState = ServerState("", "")
  17. private val behaviour = BehaviourConfig()
  18. private val messageEmitter = mock<MessageEmitter>()
  19. private val ircClient = mock<IrcClient> {
  20. on { serverState } doReturn serverState
  21. on { channelState } doReturn channelStateMap
  22. on { behaviour } doReturn behaviour
  23. on { isLocalUser(User("acidburn", "libby", "root.localhost")) } doReturn true
  24. on { isLocalUser("acidburn") } doReturn true
  25. }
  26. @Test
  27. fun `raises ChannelQuit event for each channel a user quits from`() {
  28. with (ChannelState("#thegibson") { CaseMapping.Rfc }) {
  29. users += ChannelUser("ZeroCool")
  30. channelStateMap += this
  31. }
  32. with (ChannelState("#dumpsterdiving") { CaseMapping.Rfc }) {
  33. users += ChannelUser("ZeroCool")
  34. channelStateMap += this
  35. }
  36. with (ChannelState("#chat") { CaseMapping.Rfc }) {
  37. users += ChannelUser("AcidBurn")
  38. channelStateMap += this
  39. }
  40. val quitEvent = UserQuit(EventMetadata(TestConstants.time), User("zerocool", "dade", "root.localhost"), "Hack the planet!")
  41. val events = mutator.mutateEvent(ircClient, messageEmitter, quitEvent)
  42. val names = mutableListOf<String>()
  43. Assertions.assertEquals(3, events.size)
  44. Assertions.assertSame(quitEvent, events[0])
  45. events.subList(1, events.size).forEach { event ->
  46. (event as ChannelQuit).let {
  47. Assertions.assertEquals(TestConstants.time, it.metadata.time)
  48. Assertions.assertEquals("zerocool", it.user.nickname)
  49. Assertions.assertEquals("Hack the planet!", it.reason)
  50. names.add(it.target)
  51. }
  52. }
  53. Assertions.assertTrue("#thegibson" in names)
  54. Assertions.assertTrue("#dumpsterdiving" in names)
  55. }
  56. @Test
  57. fun `raises ChannelNickChanged event for each channel a user changes nicks in`() {
  58. with (ChannelState("#thegibson") { CaseMapping.Rfc }) {
  59. users += ChannelUser("ZeroCool")
  60. channelStateMap += this
  61. }
  62. with (ChannelState("#dumpsterdiving") { CaseMapping.Rfc }) {
  63. users += ChannelUser("ZeroCool")
  64. channelStateMap += this
  65. }
  66. with (ChannelState("#chat") { CaseMapping.Rfc }) {
  67. users += ChannelUser("AcidBurn")
  68. channelStateMap += this
  69. }
  70. val nickEvent = UserNickChanged(EventMetadata(TestConstants.time), User("zerocool", "dade", "root.localhost"), "zer0c00l")
  71. val events = mutator.mutateEvent(ircClient, messageEmitter, nickEvent)
  72. val names = mutableListOf<String>()
  73. Assertions.assertEquals(3, events.size)
  74. Assertions.assertSame(nickEvent, events[0])
  75. events.subList(1, events.size).forEach { event ->
  76. (event as ChannelNickChanged).let {
  77. Assertions.assertEquals(TestConstants.time, it.metadata.time)
  78. Assertions.assertEquals("zerocool", it.user.nickname)
  79. Assertions.assertEquals("zer0c00l", it.newNick)
  80. names.add(it.target)
  81. }
  82. }
  83. Assertions.assertTrue("#thegibson" in names)
  84. Assertions.assertTrue("#dumpsterdiving" in names)
  85. }
  86. }