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