diff --git a/irctest/server_tests/test_away_notify.py b/irctest/server_tests/test_away_notify.py new file mode 100644 index 0000000..d1d2bf0 --- /dev/null +++ b/irctest/server_tests/test_away_notify.py @@ -0,0 +1,52 @@ +""" + +""" + +from irctest import cases + +class AwayNotifyTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): + + @cases.SpecificationSelector.requiredBySpecification('IRCv3.1') + def testAwayNotify(self): + """Basic away-notify test.""" + self.connectClient('foo', capabilities=['away-notify'], skip_if_cap_nak=True) + self.getMessages(1) + self.joinChannel(1, '#chan') + + self.connectClient('bar') + self.getMessages(2) + self.joinChannel(2, '#chan') + self.getMessages(2) + self.getMessages(1) + + self.sendLine(2, "AWAY :i'm going away") + self.getMessages(2) + + messages = [msg for msg in self.getMessages(1) if msg.command == 'AWAY'] + self.assertEqual(len(messages), 1) + awayNotify = messages[0] + self.assertTrue(awayNotify.prefix.startswith('bar!'), 'Unexpected away-notify source: %s' % (awayNotify.prefix,)) + self.assertEqual(awayNotify.params, ["i'm going away"]) + + @cases.SpecificationSelector.requiredBySpecification('IRCv3.2') + def testAwayNotifyOnJoin(self): + """The away-notify specification states: + "Clients will be sent an AWAY message [...] when a user joins and has an away message set." + """ + self.connectClient('foo', capabilities=['away-notify'], skip_if_cap_nak=True) + self.getMessages(1) + self.joinChannel(1, '#chan') + + self.connectClient('bar') + self.getMessages(2) + self.sendLine(2, "AWAY :i'm already away") + self.getMessages(2) + + self.joinChannel(2, '#chan') + self.getMessages(2) + + messages = [msg for msg in self.getMessages(1) if msg.command == 'AWAY'] + self.assertEqual(len(messages), 1) + awayNotify = messages[0] + self.assertTrue(awayNotify.prefix.startswith('bar!'), 'Unexpected away-notify source: %s' % (awayNotify.prefix,)) + self.assertEqual(awayNotify.params, ["i'm already away"])