Skip to content

Commit d26d05d

Browse files
committed
tests: basic test cases for coretasks.recv_who()
1 parent 384b1b6 commit d26d05d

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

test/test_coretasks.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,3 +571,77 @@ def test_handle_rpl_namreply_with_malformed_uhnames(mockbot, caplog):
571571

572572
assert len(caplog.messages) == 1
573573
assert 'RPL_NAMREPLY item without a hostmask' in caplog.messages[0]
574+
575+
576+
def test_handle_who_reply(mockbot):
577+
"""Make sure Sopel correctly updates user info from WHO replies"""
578+
# verify we start with no users/channels
579+
assert len(mockbot.users) == 0
580+
assert 'Internets' not in mockbot.users
581+
assert len(mockbot.channels) == 0
582+
assert '#channel' not in mockbot.channels
583+
584+
# add one user, who is Here
585+
mockbot.on_message(
586+
':some.irc.network 352 Sopel #channel '
587+
'internets services.irc.network * Internets Hr* '
588+
':0 Network Services Bot')
589+
mockbot.on_message(
590+
':some.irc.network 315 Sopel #channel '
591+
':End of /WHO list.')
592+
593+
assert len(mockbot.users) == 1
594+
assert 'Internets' in mockbot.users
595+
assert mockbot.users['Internets'].nick == 'Internets'
596+
assert mockbot.users['Internets'].user == 'internets'
597+
assert mockbot.users['Internets'].host == 'services.irc.network'
598+
assert mockbot.users['Internets'].realname == 'Network Services Bot'
599+
assert mockbot.users['Internets'].away == False
600+
assert mockbot.users['Internets'].is_bot == None
601+
602+
assert '#channel' in mockbot.channels
603+
assert mockbot.channels['#channel']
604+
assert len(mockbot.channels['#channel'].users) == 1
605+
assert 'Internets' in mockbot.channels['#channel'].users
606+
assert (
607+
mockbot.users['Internets'] is mockbot.channels['#channel'].users['Internets']
608+
)
609+
610+
# on next WHO, user has been marked as Gone
611+
mockbot.on_message(
612+
':some.irc.network 352 Sopel #channel '
613+
'internets services.irc.network * Internets Gr* '
614+
':0 Network Services Bot')
615+
mockbot.on_message(
616+
':some.irc.network 315 Sopel #channel '
617+
':End of /WHO list.')
618+
619+
assert mockbot.users['Internets'].away == True
620+
assert mockbot.users['Internets'].is_bot == None
621+
622+
623+
def test_handle_who_reply_botmode(mockbot):
624+
"""Make sure Sopel correctly tracks users' bot status from WHO replies"""
625+
mockbot.on_message(
626+
':irc.example.com 005 Sopel '
627+
'BOT=B '
628+
':are supported by this server')
629+
630+
# non-bot user
631+
mockbot.on_message(
632+
':some.irc.network 352 Sopel #channel '
633+
'human somewhere.in.the.world * E_R_Bradshaw H* '
634+
':0 E. R. Bradshaw')
635+
636+
assert mockbot.users['E_R_Bradshaw'].is_bot == False
637+
638+
# bot user
639+
mockbot.on_message(
640+
':some.irc.network 352 Sopel #channel '
641+
'internets services.irc.network * Internets HBr* '
642+
':0 Network Services Bot')
643+
mockbot.on_message(
644+
':some.irc.network 315 Sopel #channel '
645+
':End of /WHO list.')
646+
647+
assert mockbot.users['Internets'].is_bot == True

0 commit comments

Comments
 (0)