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.

BatchMutatorTest.kt 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package com.dmdirc.ktirc.events.mutators
  2. import com.dmdirc.ktirc.IrcClient
  3. import com.dmdirc.ktirc.TestConstants
  4. import com.dmdirc.ktirc.events.*
  5. import com.dmdirc.ktirc.io.MessageEmitter
  6. import com.dmdirc.ktirc.model.Batch
  7. import com.dmdirc.ktirc.model.ServerState
  8. import com.dmdirc.ktirc.model.User
  9. import com.nhaarman.mockitokotlin2.*
  10. import org.junit.jupiter.api.Assertions.*
  11. import org.junit.jupiter.api.Test
  12. internal class BatchMutatorTest {
  13. private val mutator = BatchMutator()
  14. private val serverState = ServerState("", "")
  15. private val messageEmitter = mock<MessageEmitter>()
  16. private val ircClient = mock<IrcClient> {
  17. on { serverState } doReturn serverState
  18. }
  19. @Test
  20. fun `returns non-batched events unmodified`() {
  21. val event = ServerWelcome(EventMetadata(TestConstants.time), "the.gibson", "acidBurn")
  22. val events = mutator.mutateEvent(ircClient, messageEmitter, event)
  23. assertEquals(1, events.size)
  24. assertSame(event, events[0])
  25. }
  26. @Test
  27. fun `starts a batch when BatchStarted event is received`() {
  28. val event = BatchStarted(EventMetadata(TestConstants.time), "abcdef", "netsplit", arrayOf("foo", "bar"))
  29. val events = mutator.mutateEvent(ircClient, messageEmitter, event)
  30. assertTrue(events.isEmpty())
  31. assertNotNull(serverState.batches["abcdef"])
  32. serverState.batches["abcdef"]?.let {
  33. assertEquals(listOf("foo", "bar"), it.arguments)
  34. assertEquals("netsplit", it.type)
  35. assertTrue(it.events.isEmpty())
  36. assertNull(it.parent)
  37. }
  38. }
  39. @Test
  40. fun `adds to batch when event has a batch ID`() {
  41. serverState.batches["abcdef"] = Batch("netsplit", emptyList())
  42. val event = UserNickChanged(EventMetadata(TestConstants.time, "abcdef"), User("zeroCool"), "crashOverride")
  43. mutator.mutateEvent(ircClient, messageEmitter, event)
  44. assertEquals(listOf(event), serverState.batches["abcdef"]!!.events)
  45. }
  46. @Test
  47. fun `suppresses event when it has a batch ID`() {
  48. serverState.batches["abcdef"] = Batch("netsplit", emptyList())
  49. val event = UserNickChanged(EventMetadata(TestConstants.time, "abcdef"), User("zeroCool"), "crashOverride")
  50. val events = mutator.mutateEvent(ircClient, messageEmitter, event)
  51. assertTrue(events.isEmpty())
  52. }
  53. @Test
  54. fun `passes event for processing only when it has a batch ID`() {
  55. serverState.batches["abcdef"] = Batch("netsplit", emptyList())
  56. val event = UserNickChanged(EventMetadata(TestConstants.time, "abcdef"), User("zeroCool"), "crashOverride")
  57. mutator.mutateEvent(ircClient, messageEmitter, event)
  58. verify(messageEmitter).handleEvent(any(), same(event), eq(true))
  59. }
  60. @Test
  61. fun `sends a batch when it finishes and the parent is null`() {
  62. serverState.batches["abcdef"] = Batch("netsplit", listOf("p1", "p2"), events = mutableListOf(ServerConnected(EventMetadata(TestConstants.time, "abcdef"))))
  63. val events = mutator.mutateEvent(ircClient, messageEmitter, BatchFinished(EventMetadata(TestConstants.time), "abcdef"))
  64. assertEquals(1, events.size)
  65. assertTrue(events[0] is BatchReceived)
  66. val event = events[0] as BatchReceived
  67. assertEquals("netsplit", event.type)
  68. assertArrayEquals(arrayOf("p1", "p2"), event.params)
  69. assertEquals(1, event.events.size)
  70. assertTrue(event.events[0] is ServerConnected)
  71. }
  72. @Test
  73. fun `adds a batch to its parent when it finishes`() {
  74. serverState.batches["12345"] = Batch("history", emptyList())
  75. serverState.batches["abcdef"] = Batch("netsplit", emptyList(), "12345", mutableListOf(ServerConnected(EventMetadata(TestConstants.time, "abcdef"))))
  76. val events = mutator.mutateEvent(ircClient, messageEmitter, BatchFinished(EventMetadata(TestConstants.time), "abcdef"))
  77. assertEquals(0, events.size)
  78. val parent = serverState.batches["12345"]?.events
  79. assertEquals(1, parent?.size)
  80. val event = parent?.get(0) as BatchReceived
  81. assertEquals(1, event.events.size)
  82. assertTrue(event.events[0] is ServerConnected)
  83. }
  84. @Test
  85. fun `deletes batch when it finishes`() {
  86. serverState.batches["abcdef"] = Batch("netsplit", emptyList(), events = mutableListOf(ServerConnected(EventMetadata(TestConstants.time, "abcdef"))))
  87. mutator.mutateEvent(ircClient, messageEmitter, BatchFinished(EventMetadata(TestConstants.time), "abcdef"))
  88. assertNull(serverState.batches["abcdef"])
  89. }
  90. }