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 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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 io.mockk.every
  10. import io.mockk.mockk
  11. import org.junit.jupiter.api.Assertions
  12. import org.junit.jupiter.api.Assertions.*
  13. import org.junit.jupiter.api.Test
  14. internal class ChannelFanOutMutatorTest {
  15. private val mutator = ChannelFanOutMutator()
  16. private val fakeServerState = ServerState("", "")
  17. private val fakeChannelStateMap = ChannelStateMap { CaseMapping.Rfc }
  18. private val fakeBehaviour = BehaviourConfig()
  19. private val messageEmitter = mockk<MessageEmitter>()
  20. private val ircClient = mockk<IrcClient> {
  21. every { serverState } returns fakeServerState
  22. every { channelState } returns fakeChannelStateMap
  23. every { behaviour } returns fakeBehaviour
  24. every { isLocalUser(any<User>()) } answers { arg<User>(0) == User("acidburn", "libby", "root.localhost") }
  25. every { isLocalUser(any<String>()) } answers { arg<String>(0) == "acidburn" }
  26. }
  27. @Test
  28. fun `raises ChannelQuit event for each channel a user quits from`() {
  29. with (ChannelState("#thegibson") { CaseMapping.Rfc }) {
  30. users += ChannelUser("ZeroCool")
  31. fakeChannelStateMap += this
  32. }
  33. with (ChannelState("#dumpsterdiving") { CaseMapping.Rfc }) {
  34. users += ChannelUser("ZeroCool")
  35. fakeChannelStateMap += this
  36. }
  37. with (ChannelState("#chat") { CaseMapping.Rfc }) {
  38. users += ChannelUser("AcidBurn")
  39. fakeChannelStateMap += this
  40. }
  41. val quitEvent = UserQuit(EventMetadata(TestConstants.time), User("zerocool", "dade", "root.localhost"), "Hack the planet!")
  42. val events = mutator.mutateEvent(ircClient, messageEmitter, quitEvent)
  43. val names = mutableListOf<String>()
  44. assertEquals(3, events.size)
  45. assertSame(quitEvent, events[0])
  46. events.subList(1, events.size).forEach { event ->
  47. (event as ChannelQuit).let {
  48. assertEquals(TestConstants.time, it.metadata.time)
  49. assertEquals("zerocool", it.user.nickname)
  50. assertEquals("Hack the planet!", it.reason)
  51. names.add(it.target)
  52. }
  53. }
  54. assertTrue("#thegibson" in names)
  55. assertTrue("#dumpsterdiving" in names)
  56. }
  57. @Test
  58. fun `raises ChannelAway event for each channel a user shares when away`() {
  59. with (ChannelState("#thegibson") { CaseMapping.Rfc }) {
  60. users += ChannelUser("ZeroCool")
  61. fakeChannelStateMap += this
  62. }
  63. with (ChannelState("#dumpsterdiving") { CaseMapping.Rfc }) {
  64. users += ChannelUser("ZeroCool")
  65. fakeChannelStateMap += this
  66. }
  67. with (ChannelState("#chat") { CaseMapping.Rfc }) {
  68. users += ChannelUser("AcidBurn")
  69. fakeChannelStateMap += this
  70. }
  71. val quitEvent = UserAway(EventMetadata(TestConstants.time), User("zerocool", "dade", "root.localhost"), "Hack the planet!")
  72. val events = mutator.mutateEvent(ircClient, messageEmitter, quitEvent)
  73. val names = mutableListOf<String>()
  74. assertEquals(3, events.size)
  75. assertSame(quitEvent, events[0])
  76. events.subList(1, events.size).forEach { event ->
  77. (event as ChannelAway).let {
  78. assertEquals(TestConstants.time, it.metadata.time)
  79. assertEquals("zerocool", it.user.nickname)
  80. assertEquals("Hack the planet!", it.message)
  81. names.add(it.target)
  82. }
  83. }
  84. assertTrue("#thegibson" in names)
  85. assertTrue("#dumpsterdiving" in names)
  86. }
  87. @Test
  88. fun `raises ChannelNickChanged event for each channel a user changes nicks in`() {
  89. with (ChannelState("#thegibson") { CaseMapping.Rfc }) {
  90. users += ChannelUser("ZeroCool")
  91. fakeChannelStateMap += this
  92. }
  93. with (ChannelState("#dumpsterdiving") { CaseMapping.Rfc }) {
  94. users += ChannelUser("ZeroCool")
  95. fakeChannelStateMap += this
  96. }
  97. with (ChannelState("#chat") { CaseMapping.Rfc }) {
  98. users += ChannelUser("AcidBurn")
  99. fakeChannelStateMap += this
  100. }
  101. val nickEvent = UserNickChanged(EventMetadata(TestConstants.time), User("zerocool", "dade", "root.localhost"), "zer0c00l")
  102. val events = mutator.mutateEvent(ircClient, messageEmitter, nickEvent)
  103. val names = mutableListOf<String>()
  104. assertEquals(3, events.size)
  105. assertSame(nickEvent, events[0])
  106. events.subList(1, events.size).forEach { event ->
  107. (event as ChannelNickChanged).let {
  108. Assertions.assertEquals(TestConstants.time, it.metadata.time)
  109. Assertions.assertEquals("zerocool", it.user.nickname)
  110. Assertions.assertEquals("zer0c00l", it.newNick)
  111. names.add(it.target)
  112. }
  113. }
  114. assertTrue("#thegibson" in names)
  115. assertTrue("#dumpsterdiving" in names)
  116. }
  117. }