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.8KB

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