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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 ChannelNickChanged event for each channel a user changes nicks in`() {
  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 nickEvent = UserNickChanged(EventMetadata(TestConstants.time), User("zerocool", "dade", "root.localhost"), "zer0c00l")
  72. val events = mutator.mutateEvent(ircClient, messageEmitter, nickEvent)
  73. val names = mutableListOf<String>()
  74. assertEquals(3, events.size)
  75. assertSame(nickEvent, events[0])
  76. events.subList(1, events.size).forEach { event ->
  77. (event as ChannelNickChanged).let {
  78. Assertions.assertEquals(TestConstants.time, it.metadata.time)
  79. Assertions.assertEquals("zerocool", it.user.nickname)
  80. Assertions.assertEquals("zer0c00l", it.newNick)
  81. names.add(it.target)
  82. }
  83. }
  84. assertTrue("#thegibson" in names)
  85. assertTrue("#dumpsterdiving" in names)
  86. }
  87. }