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.

CapabilitiesHandlerTest.kt 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package com.dmdirc.ktirc.events
  2. import com.dmdirc.ktirc.IrcClient
  3. import com.dmdirc.ktirc.model.CapabilitiesNegotiationState
  4. import com.dmdirc.ktirc.model.Capability
  5. import com.dmdirc.ktirc.model.ServerState
  6. import com.nhaarman.mockitokotlin2.argThat
  7. import com.nhaarman.mockitokotlin2.doReturn
  8. import com.nhaarman.mockitokotlin2.mock
  9. import com.nhaarman.mockitokotlin2.verify
  10. import kotlinx.coroutines.runBlocking
  11. import org.junit.jupiter.api.Assertions.assertEquals
  12. import org.junit.jupiter.api.Test
  13. internal class CapabilitiesHandlerTest {
  14. private val handler = CapabilitiesHandler()
  15. private val serverState = ServerState("")
  16. private val ircClient = mock<IrcClient> {
  17. on { serverState } doReturn serverState
  18. }
  19. @Test
  20. fun `CapabilitiesHandler adds new capabilities to the state`() {
  21. runBlocking {
  22. handler.processEvent(ircClient, ServerCapabilitiesReceived(hashMapOf(
  23. Capability.EchoMessages to "",
  24. Capability.HostsInNamesReply to "123"
  25. )))
  26. assertEquals(2, serverState.capabilities.advertisedCapabilities.size)
  27. assertEquals("", serverState.capabilities.advertisedCapabilities[Capability.EchoMessages])
  28. assertEquals("123", serverState.capabilities.advertisedCapabilities[Capability.HostsInNamesReply])
  29. }
  30. }
  31. @Test
  32. fun `CapabilitiesHandler updates negotiation state when capabilities finished`() {
  33. runBlocking {
  34. handler.processEvent(ircClient, ServerCapabilitiesFinished)
  35. assertEquals(CapabilitiesNegotiationState.AWAITING_ACK, serverState.capabilities.negotiationState)
  36. }
  37. }
  38. @Test
  39. fun `CapabilitiesHandler sends REQ when capabilities received`() {
  40. runBlocking {
  41. serverState.capabilities.advertisedCapabilities[Capability.EchoMessages] = ""
  42. serverState.capabilities.advertisedCapabilities[Capability.AccountChangeMessages] = ""
  43. handler.processEvent(ircClient, ServerCapabilitiesFinished)
  44. verify(ircClient).send(argThat { equals("CAP REQ :echo-message account-notify") || equals("CAP REQ :account-notify echo-message") })
  45. }
  46. }
  47. @Test
  48. fun `CapabilitiesHandler sends END when capabilities acknowledged`() {
  49. runBlocking {
  50. handler.processEvent(ircClient, ServerCapabilitiesAcknowledged(hashMapOf(
  51. Capability.EchoMessages to "",
  52. Capability.HostsInNamesReply to "123"
  53. )))
  54. verify(ircClient).send("CAP END")
  55. }
  56. }
  57. @Test
  58. fun `CapabilitiesHandler updates negotiation state when capabilities acknowledged`() {
  59. runBlocking {
  60. handler.processEvent(ircClient, ServerCapabilitiesAcknowledged(hashMapOf(
  61. Capability.EchoMessages to "",
  62. Capability.HostsInNamesReply to "123"
  63. )))
  64. assertEquals(CapabilitiesNegotiationState.FINISHED, serverState.capabilities.negotiationState)
  65. }
  66. }
  67. @Test
  68. fun `CapabilitiesHandler stores enabled caps when capabilities acknowledged`() {
  69. runBlocking {
  70. handler.processEvent(ircClient, ServerCapabilitiesAcknowledged(hashMapOf(
  71. Capability.EchoMessages to "",
  72. Capability.HostsInNamesReply to "123"
  73. )))
  74. assertEquals(2, serverState.capabilities.enabledCapabilities.size)
  75. assertEquals("", serverState.capabilities.enabledCapabilities[Capability.EchoMessages])
  76. assertEquals("123", serverState.capabilities.enabledCapabilities[Capability.HostsInNamesReply])
  77. }
  78. }
  79. }