123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- package com.dmdirc.ktirc.events
-
- import com.dmdirc.ktirc.IrcClient
- import com.dmdirc.ktirc.TestConstants
- import com.dmdirc.ktirc.io.CaseMapping
- import com.dmdirc.ktirc.model.*
- import com.nhaarman.mockitokotlin2.argForWhich
- import com.nhaarman.mockitokotlin2.doReturn
- import com.nhaarman.mockitokotlin2.mock
- import kotlinx.coroutines.runBlocking
- import org.junit.jupiter.api.Assertions.*
- import org.junit.jupiter.api.BeforeEach
- import org.junit.jupiter.api.Test
-
- internal class UserStateHandlerTest {
-
- private val serverState = ServerState("", "")
- private val userState = UserState { CaseMapping.Rfc }
-
- private val ircClient = mock<IrcClient> {
- on { serverState } doReturn serverState
- on { userState } doReturn userState
- on { isLocalUser(argForWhich<User> { nickname == "zeroCool" }) } doReturn true
- on { isLocalUser("zeroCool") } doReturn true
- }
-
- private val handler = UserStateHandler()
-
- @BeforeEach
- fun setUp() {
- serverState.features[ServerFeature.ModePrefixes] = ModePrefixMapping("ov", "@+")
- }
-
- @Test
- fun `adds channel to user on join`() {
- runBlocking {
- userState += User("acidBurn")
-
- handler.processEvent(ircClient, ChannelJoined(TestConstants.time, User("acidBurn", "libby", "root.localhost"), "#thegibson"))
-
- assertEquals(listOf("#thegibson"), userState["acidBurn"]?.channels?.toList())
- }
- }
-
- @Test
- fun `updates user info on join`() {
- runBlocking {
- userState += User("acidBurn")
-
- handler.processEvent(ircClient, ChannelJoined(TestConstants.time, User("acidBurn", "libby", "root.localhost"), "#thegibson"))
-
- val details = userState["acidBurn"]?.details!!
- assertEquals("libby", details.ident)
- assertEquals("root.localhost", details.hostname)
- }
- }
-
- @Test
- fun `removes channel from user on part`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#thegibson")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelParted(TestConstants.time, User("acidBurn", "libby", "root.localhost"), "#dumpsterdiving"))
-
- assertEquals(listOf("#thegibson"), userState["acidBurn"]?.channels?.toList())
- }
- }
-
- @Test
- fun `removes user on part from last channel`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelParted(TestConstants.time, User("acidBurn", "libby", "root.localhost"), "#dumpsterdiving"))
-
- assertNull(userState["acidBurn"])
- }
- }
-
- @Test
- fun `removes channel from all users on local part`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
- userState.addToChannel(User("acidBurn"), "#thegibson")
-
- userState += User("zeroCool")
- userState.addToChannel(User("zeroCool"), "#dumpsterdiving")
- userState.addToChannel(User("zeroCool"), "#thegibson")
-
- handler.processEvent(ircClient, ChannelParted(TestConstants.time, User("zeroCool", "dade", "root.localhost"), "#dumpsterdiving"))
-
- assertEquals(listOf("#thegibson"), userState["acidBurn"]?.channels?.toList())
- assertEquals(listOf("#thegibson"), userState["zeroCool"]?.channels?.toList())
- }
- }
-
- @Test
- fun `removes remote users with no remaining channels on local part`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelParted(TestConstants.time, User("zeroCool", "dade", "root.localhost"), "#dumpsterdiving"))
-
- assertNull(userState["acidBurn"])
- }
- }
-
- @Test
- fun `keeps local user with no remaining channels after local part`() {
- runBlocking {
- userState += User("zeroCool")
- userState.addToChannel(User("zeroCool"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelParted(TestConstants.time, User("zeroCool", "dade", "root.localhost"), "#dumpsterdiving"))
-
- assertNotNull(userState["zeroCool"])
- }
- }
-
-
- @Test
- fun `removes channel from user on kick`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#thegibson")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelUserKicked(TestConstants.time, User("thePlague"), "#dumpsterdiving", "acidBurn"))
-
- assertEquals(listOf("#thegibson"), userState["acidBurn"]?.channels?.toList())
- }
- }
-
- @Test
- fun `removes user on kick from last channel`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelUserKicked(TestConstants.time, User("thePlague"), "#dumpsterdiving", "acidBurn"))
-
- assertNull(userState["acidBurn"])
- }
- }
-
- @Test
- fun `removes channel from all users on local kick`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
- userState.addToChannel(User("acidBurn"), "#thegibson")
-
- userState += User("zeroCool")
- userState.addToChannel(User("zeroCool"), "#dumpsterdiving")
- userState.addToChannel(User("zeroCool"), "#thegibson")
-
- handler.processEvent(ircClient, ChannelUserKicked(TestConstants.time, User("thePlague"), "#dumpsterdiving", "zeroCool"))
-
- assertEquals(listOf("#thegibson"), userState["acidBurn"]?.channels?.toList())
- assertEquals(listOf("#thegibson"), userState["zeroCool"]?.channels?.toList())
- }
- }
-
- @Test
- fun `removes remote users with no remaining channels on local kick`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelUserKicked(TestConstants.time, User("thePlague"), "#dumpsterdiving", "zeroCool"))
-
- assertNull(userState["acidBurn"])
- }
- }
-
- @Test
- fun `keeps local user with no remaining channels after local kick`() {
- runBlocking {
- userState += User("zeroCool")
- userState.addToChannel(User("zeroCool"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelUserKicked(TestConstants.time, User("thePlague"), "#dumpsterdiving", "zeroCool"))
-
- assertNotNull(userState["zeroCool"])
- }
- }
-
- @Test
- fun `removes user entirely on quit`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, UserQuit(TestConstants.time, User("acidBurn", "libby", "root.localhost")))
-
- assertNull(userState["acidBurn"])
- }
- }
-
- @Test
- fun `adds users to channels on names received`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelNamesReceived(TestConstants.time, "#thegibson", listOf("@acidBurn")))
-
- assertEquals(listOf("#dumpsterdiving", "#thegibson"), userState["acidBurn"]?.channels?.toList())
- }
- }
-
- @Test
- fun `updates user details on names received`() {
- runBlocking {
- userState += User("acidBurn")
- userState.addToChannel(User("acidBurn"), "#dumpsterdiving")
-
- handler.processEvent(ircClient, ChannelNamesReceived(TestConstants.time, "#thegibson", listOf("@acidBurn!libby@root.localhost")))
-
- val details = userState["acidBurn"]?.details!!
- assertEquals("libby", details.ident)
- assertEquals("root.localhost", details.hostname)
- }
- }
-
- @Test
- fun `updates user info on account change`() {
- runBlocking {
- userState += User("acidBurn")
-
- handler.processEvent(ircClient, UserAccountChanged(TestConstants.time, User("acidBurn", "libby", "root.localhost"), "acidBurn"))
-
- val details = userState["acidBurn"]?.details!!
- assertEquals("acidBurn", details.account)
- }
- }
- }
|