Browse Source

Add user parameter to mode changed event

tags/v0.11.0
Chris Smith 5 years ago
parent
commit
fa98c18345

+ 1
- 0
CHANGELOG View File

@@ -4,6 +4,7 @@ vNEXT (in development)
4 4
  * Added ChannelJoinFailed event
5 5
  * Added ChannelMembershipAdjustment interface for events that concern
6 6
    users joining/leaving channels
7
+ * Added missing user parameter to ModeChangedEvent
7 8
 
8 9
 v0.10.3
9 10
 

+ 2
- 1
src/main/kotlin/com/dmdirc/ktirc/events/Events.kt View File

@@ -274,7 +274,8 @@ class MotdFinished(metadata: EventMetadata, val missing: Boolean = false) : IrcE
274 274
  * and the given modes are thus exhaustive. Otherwise, the modes are a sequence of changes to apply to the existing
275 275
  * state.
276 276
  */
277
-class ModeChanged(metadata: EventMetadata, target: String, val modes: String, val arguments: Array<String>, val discovered: Boolean = false) : TargetedEvent(metadata, target)
277
+class ModeChanged(metadata: EventMetadata, override val user: User, target: String, val modes: String, val arguments: Array<String>, val discovered: Boolean = false)
278
+    : TargetedEvent(metadata, target), SourcedEvent
278 279
 
279 280
 /** Raised when an AUTHENTICATION message is received. [argument] is `null` if the server sent an empty reply ("+") */
280 281
 class AuthenticationMessage(metadata: EventMetadata, val argument: String?) : IrcEvent(metadata)

+ 2
- 0
src/main/kotlin/com/dmdirc/ktirc/messages/processors/ModeProcessor.kt View File

@@ -4,6 +4,7 @@ import com.dmdirc.ktirc.events.ModeChanged
4 4
 import com.dmdirc.ktirc.messages.RPL_CHANNELMODEIS
5 5
 import com.dmdirc.ktirc.messages.RPL_UMODEIS
6 6
 import com.dmdirc.ktirc.model.IrcMessage
7
+import com.dmdirc.ktirc.model.User
7 8
 import com.dmdirc.ktirc.util.logger
8 9
 
9 10
 internal class ModeProcessor : MessageProcessor {
@@ -23,6 +24,7 @@ internal class ModeProcessor : MessageProcessor {
23 24
 
24 25
         return listOf(ModeChanged(
25 26
                 message.metadata,
27
+                user = message.sourceUser ?: User("*"),
26 28
                 target = String(message.params[paramOffset]),
27 29
                 modes = String(message.params[paramOffset + 1]),
28 30
                 arguments = message.params.takeLast(message.params.size - paramOffset - 2).map { String(it) }.toTypedArray(),

+ 9
- 9
src/test/kotlin/com/dmdirc/ktirc/events/handlers/ChannelStateHandlerTest.kt View File

@@ -290,7 +290,7 @@ internal class ChannelStateHandlerTest {
290 290
         fakeChannelState += channel
291 291
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
292 292
 
293
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+", emptyArray(), true))
293
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+", emptyArray(), true))
294 294
 
295 295
         assertTrue(channel.modesDiscovered)
296 296
     }
@@ -301,7 +301,7 @@ internal class ChannelStateHandlerTest {
301 301
         fakeChannelState += channel
302 302
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
303 303
 
304
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+ceg", arrayOf("CCC", "EEE"), true))
304
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+ceg", arrayOf("CCC", "EEE"), true))
305 305
 
306 306
         assertEquals("CCC", channel.modes['c'])
307 307
         assertEquals("EEE", channel.modes['e'])
@@ -317,7 +317,7 @@ internal class ChannelStateHandlerTest {
317 317
         fakeChannelState += channel
318 318
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
319 319
 
320
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "-c+d-eh+fg", arrayOf("CCC", "DDD", "FFF"), true))
320
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "-c+d-eh+fg", arrayOf("CCC", "DDD", "FFF"), true))
321 321
 
322 322
         assertNull(channel.modes['c'])
323 323
         assertEquals("DDD", channel.modes['d'])
@@ -334,7 +334,7 @@ internal class ChannelStateHandlerTest {
334 334
             fakeChannelState += this
335 335
         }
336 336
 
337
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+o", arrayOf("zeroCool")))
337
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+o", arrayOf("zeroCool")))
338 338
 
339 339
         assertEquals("o", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
340 340
     }
@@ -346,7 +346,7 @@ internal class ChannelStateHandlerTest {
346 346
             fakeChannelState += this
347 347
         }
348 348
 
349
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+v", arrayOf("zeroCool")))
349
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+v", arrayOf("zeroCool")))
350 350
 
351 351
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
352 352
     }
@@ -358,7 +358,7 @@ internal class ChannelStateHandlerTest {
358 358
             fakeChannelState += this
359 359
         }
360 360
 
361
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+o", arrayOf("zeroCool")))
361
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+o", arrayOf("zeroCool")))
362 362
 
363 363
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
364 364
     }
@@ -370,7 +370,7 @@ internal class ChannelStateHandlerTest {
370 370
             fakeChannelState += this
371 371
         }
372 372
 
373
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "+vo", arrayOf("zeroCool", "zeroCool")))
373
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "+vo", arrayOf("zeroCool", "zeroCool")))
374 374
 
375 375
         assertEquals("ov", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
376 376
     }
@@ -382,7 +382,7 @@ internal class ChannelStateHandlerTest {
382 382
             fakeChannelState += this
383 383
         }
384 384
 
385
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "-vo", arrayOf("zeroCool", "zeroCool")))
385
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "-vo", arrayOf("zeroCool", "zeroCool")))
386 386
 
387 387
         assertEquals("", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
388 388
     }
@@ -395,7 +395,7 @@ internal class ChannelStateHandlerTest {
395 395
         }
396 396
         fakeServerState.features[ServerFeature.ChannelModes] = arrayOf("ab", "cd", "ef", "gh")
397 397
 
398
-        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), "#thegibson", "oa-v+b", arrayOf("zeroCool", "aaa", "zeroCool", "bbb")))
398
+        handler.processEvent(ircClient, ModeChanged(EventMetadata(TestConstants.time), User("acidBurn"), "#thegibson", "oa-v+b", arrayOf("zeroCool", "aaa", "zeroCool", "bbb")))
399 399
 
400 400
         assertEquals("o", fakeChannelState["#thegibson"]?.users?.get("zeroCool")?.modes)
401 401
         assertEquals("aaa", fakeChannelState["#thegibson"]?.modes?.get('a'))

+ 23
- 0
src/test/kotlin/com/dmdirc/ktirc/messages/processors/ModeProcessorTest.kt View File

@@ -2,6 +2,7 @@ package com.dmdirc.ktirc.messages.processors
2 2
 
3 3
 import com.dmdirc.ktirc.TestConstants
4 4
 import com.dmdirc.ktirc.model.IrcMessage
5
+import com.dmdirc.ktirc.model.User
5 6
 import com.dmdirc.ktirc.params
6 7
 import com.dmdirc.ktirc.util.currentTimeProvider
7 8
 import org.junit.jupiter.api.Assertions.*
@@ -22,6 +23,7 @@ internal class ModeProcessorTest {
22 23
         assertEquals(1, events.size)
23 24
 
24 25
         assertEquals(TestConstants.time, events[0].metadata.time)
26
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
25 27
         assertEquals("acidBurn", events[0].target)
26 28
         assertEquals("+hax", events[0].modes)
27 29
         assertEquals(0, events[0].arguments.size)
@@ -35,6 +37,7 @@ internal class ModeProcessorTest {
35 37
         assertEquals(1, events.size)
36 38
 
37 39
         assertEquals(TestConstants.time, events[0].metadata.time)
40
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
38 41
         assertEquals("acidBurn", events[0].target)
39 42
         assertEquals("+hax", events[0].modes)
40 43
         assertEquals(2, events[0].arguments.size)
@@ -50,6 +53,7 @@ internal class ModeProcessorTest {
50 53
         assertEquals(1, events.size)
51 54
 
52 55
         assertEquals(TestConstants.time, events[0].metadata.time)
56
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
53 57
         assertEquals("acidBurn", events[0].target)
54 58
         assertEquals("+hax", events[0].modes)
55 59
         assertEquals(0, events[0].arguments.size)
@@ -63,6 +67,7 @@ internal class ModeProcessorTest {
63 67
         assertEquals(1, events.size)
64 68
 
65 69
         assertEquals(TestConstants.time, events[0].metadata.time)
70
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
66 71
         assertEquals("acidBurn", events[0].target)
67 72
         assertEquals("+hax", events[0].modes)
68 73
         assertEquals(2, events[0].arguments.size)
@@ -78,6 +83,21 @@ internal class ModeProcessorTest {
78 83
         assertEquals(1, events.size)
79 84
 
80 85
         assertEquals(TestConstants.time, events[0].metadata.time)
86
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
87
+        assertEquals("#thegibson", events[0].target)
88
+        assertEquals("+hax", events[0].modes)
89
+        assertEquals(0, events[0].arguments.size)
90
+        assertTrue(events[0].discovered)
91
+    }
92
+
93
+    @Test
94
+    fun `raises event for channel mode discovery with no params and no prefix`() {
95
+        val events = ModeProcessor().process(
96
+                IrcMessage(emptyMap(), null, "324", params("acidBurn", "#thegibson", "+hax")))
97
+        assertEquals(1, events.size)
98
+
99
+        assertEquals(TestConstants.time, events[0].metadata.time)
100
+        assertEquals(User("*"), events[0].user)
81 101
         assertEquals("#thegibson", events[0].target)
82 102
         assertEquals("+hax", events[0].modes)
83 103
         assertEquals(0, events[0].arguments.size)
@@ -91,6 +111,7 @@ internal class ModeProcessorTest {
91 111
         assertEquals(1, events.size)
92 112
 
93 113
         assertEquals(TestConstants.time, events[0].metadata.time)
114
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
94 115
         assertEquals("#thegibson", events[0].target)
95 116
         assertEquals("+hax", events[0].modes)
96 117
         assertEquals(2, events[0].arguments.size)
@@ -106,6 +127,7 @@ internal class ModeProcessorTest {
106 127
         assertEquals(1, events.size)
107 128
 
108 129
         assertEquals(TestConstants.time, events[0].metadata.time)
130
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
109 131
         assertEquals("#thegibson", events[0].target)
110 132
         assertEquals("+hax", events[0].modes)
111 133
         assertEquals(0, events[0].arguments.size)
@@ -119,6 +141,7 @@ internal class ModeProcessorTest {
119 141
         assertEquals(1, events.size)
120 142
 
121 143
         assertEquals(TestConstants.time, events[0].metadata.time)
144
+        assertEquals(User("acidburn", "libby", "root.localhost"), events[0].user)
122 145
         assertEquals("#thegibson", events[0].target)
123 146
         assertEquals("+hax", events[0].modes)
124 147
         assertEquals(2, events[0].arguments.size)

Loading…
Cancel
Save