def setUp(self): self.client = Client('kylef', 'kyle', 'Kyle Fuller') self.client.nick.nick = 'kylef' self.client.delegate = self self.private_messages = []
class ClientTests(unittest.TestCase): def setUp(self): self.client = Client('kylef', 'kyle', 'Kyle Fuller') self.client.nick.nick = 'kylef' self.client.delegate = self self.private_messages = [] # Delegate def irc_private_message(self, client, nick, message): self.private_messages.append((client, nick, message)) # Tests def test_client_has_nickname(self): self.assertEqual(self.client.nickname, 'kylef') def test_client_has_ident(self): self.assertEqual(self.client.ident, 'kyle') def test_client_has_realname(self): self.assertEqual(self.client.realname, 'Kyle Fuller') # Registration def test_client_is_not_registered_by_default(self): self.assertFalse(self.client.is_registered) def test_client_is_registered_after_001(self): self.client.read_data(':irc.kylefuller.co.uk 001 kyle :Welcome') self.assertTrue(self.client.is_registered) # Ping def test_client_sends_pong_when_pinged(self): self.client.read_data('PING :hello') self.assertEqual(self.client.sent_lines, ['PONG hello']) # Handling def test_client_handles_5_parsing_support(self): self.client.read_data(':irc.kylefuller.co.uk 005 kyle :NICKLEN=5 CHANNELLEN=6') self.assertEqual(self.client.isupport.maximum_nick_length, 5) self.assertEqual(self.client.isupport.maximum_channel_length, 6) def test_client_handles_joining_channel(self): channel = self.client.add_channel('#test') self.client.read_data(':kylef!kyle@kyle JOIN #test') self.assertEqual(channel.nicks, [self.client.nick]) def test_client_handles_parting_channel(self): channel = self.client.add_channel('#test') self.client.read_data(':kylef!kyle@kyle JOIN #test') self.client.read_data(':kylef!kyle@kyle PART #test :goodbye') self.assertEqual(channel.nicks, []) def test_client_handles_parting_channel_without_reason(self): channel = self.client.add_channel('#test') self.client.read_data(':kylef!kyle@kyle JOIN #test') self.client.read_data(':kylef!kyle@kyle PART #test') self.assertEqual(channel.nicks, []) def test_client_handles_getting_kicked_from_channel(self): channel = self.client.add_channel('#test') self.client.read_data(':kylef!kyle@kyle JOIN #test') self.client.read_data(':kylef!kyle@kyle KICK #test kylef :goodbye') self.assertEqual(channel.nicks, []) def test_client_handles_channel_new_mode(self): channel = self.client.add_channel('#test') self.client.read_data(':kyle!kyle@kyle MODE #test +tn') self.assertTrue(channel.modes['t']) self.assertTrue(channel.modes['n']) def test_client_handles_channel_remove_mode(self): channel = self.client.add_channel('#test') self.client.read_data(':kyle!kyle@kyle MODE #test +tn') self.client.read_data(':kyle!kyle@kyle MODE #test -tn') self.assertEqual(channel.modes, {}) def test_client_handles_setting_channel_list_mode(self): channel = self.client.add_channel('#test') self.client.read_data(':kyle!kyle@kyle MODE #test +b cake') self.client.read_data(':kyle!kyle@kyle MODE #test +b snake') self.assertEqual(channel.modes['b'], ['cake', 'snake']) def test_client_handles_removing_channel_list_mode(self): channel = self.client.add_channel('#test') self.client.read_data(':kyle!kyle@kyle MODE #test +b cake') self.client.read_data(':kyle!kyle@kyle MODE #test +b snake') self.client.read_data(':kyle!kyle@kyle MODE #test -b cake') self.assertEqual(channel.modes['b'], ['snake']) def test_client_handles_removing_channel_list_mode(self): channel = self.client.add_channel('#test') self.client.read_data(':kyle!kyle@kyle MODE #test +l 5') self.client.read_data(':kyle!kyle@kyle MODE #test +l 6') self.assertEqual(channel.modes['l'], '6') def test_client_handles_324_mode(self): channel = self.client.add_channel('#test') self.client.read_data(':server 324 kylef #test +nt') self.assertEqual(channel.modes, {'n': True, 't': True}) def test_client_handles_329_creation_date(self): channel = self.client.add_channel('#test') self.client.read_data(':server 329 kylef #test 1358579621') self.assertEqual(channel.creation_date, datetime.datetime(2013, 1, 19, 7, 13, 41)) def test_client_handles_332_topic(self): channel = self.client.add_channel('#test') self.client.read_data(':server 332 kylef #test :My Awesome Topic') self.assertEqual(channel.topic, 'My Awesome Topic') def test_client_handles_333_topic(self): channel = self.client.add_channel('#test') self.client.read_data(':server 333 kylef #test james!james@james 1395663680') self.assertEqual(channel.topic_owner, 'james!james@james') self.assertEqual(channel.topic_date, datetime.datetime(2014, 3, 24, 12, 21, 20)) def test_client_handles_353_names(self): channel = self.client.add_channel('#test') self.client.read_data(':server 353 kylef = #test :Derecho!der@der +Tempest!tmp@tmp dijit') self.assertEqual(len(channel.nicks), 3) self.assertEqual(channel.nicks[0], Nick.parse(self.client, 'Derecho!der@der')) self.assertEqual(channel.nicks[1], Nick.parse(self.client, 'Tempest!tmp@tmp')) self.assertEqual(channel.nicks[2], Nick(self.client, nick='dijit')) self.assertTrue(channel.nicks[1].has_perm('v')) def test_client_updates_to_channel_topic(self): channel = self.client.add_channel('#test') self.client.read_data(':kyle!kyle@kyle TOPIC #test :Hello World') self.assertEqual(channel.topic, 'Hello World') self.assertEqual(channel.topic_owner, 'kyle') # Capabilities def test_client_asks_for_server_capabilities_on_connection(self): self.client.socket_did_connect() self.assertEqual(self.client.sent_lines[0], 'CAP LS') def test_client_ends_capabilities_negotiation_after_no_caps(self): self.client.socket_did_connect() self.client.sent_lines = [] # reset, we dont care about auth stuff self.client.read_data(':barjavel.freenode.net CAP * LS :unknown-capability') self.assertEqual(self.client.sent_lines, ['CAP END']) def test_client_requests_multi_prefix_capability(self): self.client.socket_did_connect() self.client.sent_lines = [] # reset, we dont care about auth stuff self.client.read_data(':barjavel.freenode.net CAP * LS :multi-prefix') self.assertEqual(self.client.sent_lines, ['CAP REQ multi-prefix']) self.client.sent_lines = [] self.client.read_data(':barjavel.freenode.net CAP * ACK :multi-prefix') self.assertEqual(self.client.sent_lines, ['CAP END']) self.assertEqual(self.client.cap_accepted, ['multi-prefix']) # Delegate def test_client_forwards_private_messages_to_delegate(self): self.client.read_data(':[email protected] PRIVMSG kylef :Hey') self.assertEqual(self.private_messages, [(self.client, Nick.parse(self.client, '[email protected]'), 'Hey')])