def setUp(self): self.service = Service() self.service._twitch = MockTwitchEngine() self.parser = LinotParser(usage=argparse.SUPPRESS, add_help=False) interfaces.get('test').reset()
class TestService: def setUp(self): self.service = Service() self.service._twitch = MockTwitchEngine() self.parser = LinotParser(usage=argparse.SUPPRESS, add_help=False) interfaces.get('test').reset() def tearDown(self): try: os.remove(self.service.SUB_FILE) except OSError: pass def test_init(self): # some basic tests ok_(self.service.is_start() is False) ok_(self.service.CMD == 'twitch') def test_setup_argument(self): def set_matching_0(val, sender): set_matching_0.ret = (len(val) == 0) def set_matching_1(val, sender): set_matching_1.ret = (set(val) == set(['test1'])) def set_matching_2(val, sender): set_matching_2.ret = (set(val) == set(['test1', 'test2'])) def ret_val(val, sender): ret_val.ret = val def direct_cmd_set_match(match, cmd, sender): direct_cmd_set_match.ret = (set(match) == set(['kaydada'])) # test argument and function relation test_list = [ # -subscribe + ['-subscribe test1', '_subscribe', set_matching_1], ['-subscribe test1 test2', '_subscribe', set_matching_2], # -unsubscribe + ['-unsubscribe test1', '_unsubscribe', set_matching_1], ['-unsubscribe test1 test2', '_unsubscribe', set_matching_2], # -unsuball ['-unsuball', '_unsub_all', ret_val], ['-unsuball abc', '_unsub_all', ret_val], # -import ['-import test1', '_import', set_matching_1], # -listchannel ['-listchannel', '_list_channel', ret_val], ['-listchannel abc', '_list_channel', ret_val], # -refresh ['-refresh', '_refresh', ret_val], ['-refresh abc', '_refresh', ret_val], # -listusers * ['-listusers', '_list_users', set_matching_0], ['-listusers test1', '_list_users', set_matching_1], ['-listusers test1 test2', '_list_users', set_matching_2], ] for test in test_list: self.setUp() method_bak = None for name, method in inspect.getmembers(self.service, predicate=inspect.ismethod): if name == test[1]: method_bak = method setattr(self.service, name, test[2]) ok_(method_bak is not None, test[0] + ' case method not found') self.service.setup(self.parser) # setup calls _setup_arguments cmd = self.service.CMD + ' ' + test[0] args, unknowns = self.parser.parse_known_args(cmd.split()) test[2].ret = False args.proc(args, None) ok_(test[2].ret, 'failed: '+test[0]) # test direct command test_list = [ # direct command: sub by url ['www.twitch.tv/kaydada', '_sub_by_url', direct_cmd_set_match], ] for test in test_list: self.setUp() method_bak = None for name, method in inspect.getmembers(self.service, predicate=inspect.ismethod): if name == test[1]: method_bak = method setattr(self.service, name, test[2]) ok_(method_bak is not None, test[0] + ' case method not found') self.service.setup(self.parser) # setup calls _setup_arguments cmd = test[0] self.parser.process_direct_commands(cmd, None) ok_(test[2].ret, 'failed: '+test[0]) def test_start_subfile_exists(self): fake_sublist = { 'testid1': ['testch1', 'testch2', 'testch3'], 'testid2': ['testch2'], 'testid3': ['testch1', 'testch3'], 'testid4': ['testch2'], } pickle.dump(fake_sublist, open(self.service.SUB_FILE, 'wb+')) self.service.start() threading.Event().wait(.1) self.service.stop() ok_(self.service._channel_sub_count['testch1'] == 2, 'count =' + str(self.service._channel_sub_count['testch1'])) ok_(self.service._channel_sub_count['testch2'] == 3, 'count =' + str(self.service._channel_sub_count['testch2'])) ok_(self.service._channel_sub_count['testch3'] == 2, 'count =' + str(self.service._channel_sub_count['testch3'])) ok_(self.service._channel_sub_count['testch4'] == 0, 'count =' + str(self.service._channel_sub_count['testch4'])) def test_start_subfile_not_found(self): self.service.start() threading.Event().wait(.1) self.service.stop() ok_(set(self.service._sublist['testid1']) == set([])) ok_(set(self.service._sublist['testid2']) == set([])) ok_(self.service._channel_sub_count['testch1'] == 0, 'count =' + str(self.service._channel_sub_count['testch1'])) ok_(self.service._channel_sub_count['testch2'] == 0, 'count =' + str(self.service._channel_sub_count['testch2'])) def test_get_sublist(self): fake_sublist = { 'testid1': ['testch1', 'testch2', 'testch3'], 'testid2': ['testch2'], 'testid3': ['testch1', 'testch3'], } pickle.dump(fake_sublist, open(self.service.SUB_FILE, 'wb+')) self.service.start() threading.Event().wait(.1) self.service.stop() sublist = self.service.get_sublist() ok_(len(fake_sublist.viewkeys() ^ sublist.viewkeys()) == 0) for key in fake_sublist: ok_(set(fake_sublist[key]) == set(sublist[key])) def test_calculate_channel_count(self): self.service._sublist = { 'testid1': ['testch1', 'testch2', 'testch3'], 'testid2': ['testch2'], 'testid3': ['testch1', 'testch3', 'testch2'], } self.service._calculate_channel_sub_count() ok_(self.service._channel_sub_count['testch1'] == 2) ok_(self.service._channel_sub_count['testch2'] == 3) ok_(self.service._channel_sub_count['testch3'] == 2) ok_(self.service._channel_sub_count['testch4'] == 0) self.service._sublist = defaultdict(list) self.service._calculate_channel_sub_count() ok_(self.service._channel_sub_count['testch1'] == 0) ok_(self.service._channel_sub_count['testch2'] == 0) ok_(self.service._channel_sub_count['testch3'] == 0) ok_(self.service._channel_sub_count['testch4'] == 0) def test_subscribe_one(self): try: os.remove(self.service.SUB_FILE) except OSError: pass self.service.start() threading.Event().wait(.1) self.service.stop() self.service._twitch.set_exists_channel_list(['testch1', 'testch2']) fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch1'], fake_sender) ok_('testch1' in [x.lower() for x in self.service._sublist[fake_sender]], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('not found' not in ' '.join(interfaces.get('test').msg_queue[fake_sender])) ok_(self.service._channel_sub_count['testch1'] == 1) fake_sender2 = CommandSubmitter('test', 'fake_sender2') self.service._subscribe(['testch1'], fake_sender2) ok_(self.service._channel_sub_count['testch1'] == 2) def test_subscribe_one_exists(self): try: os.remove(self.service.SUB_FILE) except OSError: pass self.service.start() threading.Event().wait(.1) self.service.stop() self.service._twitch.set_exists_channel_list(['testch1', 'testch2']) fake_sender = CommandSubmitter('test', 'fake_sender') self.service._sublist[fake_sender] = ['testch1'] self.service._subscribe(['testch1'], fake_sender) ok_(self.service._sublist[fake_sender].count('testch1') == 1, 'sublist = '+str(self.service._sublist[fake_sender])) ok_('not found' not in ' '.join(interfaces.get('test').msg_queue[fake_sender])) def test_subscribe_one_not_found(self): self.service.start() threading.Event().wait(.1) self.service.stop() self.service._twitch.set_exists_channel_list(['testch2', 'testch3']) fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch1'], fake_sender) ok_('testch1' not in self.service._sublist[fake_sender], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('not found' in ' '.join(interfaces.get('test').msg_queue[fake_sender])) def test_subscribe_multi(self): try: os.remove(self.service.SUB_FILE) except OSError: pass self.service.start() threading.Event().wait(.1) self.service.stop() self.service._twitch.set_exists_channel_list(['testch1', 'testch2']) fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch1', 'testch2'], fake_sender) ok_('testch1' in self.service._sublist[fake_sender], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('testch2' in self.service._sublist[fake_sender], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('not found' not in ' '.join(interfaces.get('test').msg_queue[fake_sender])) def test_unsubscribe_one(self): self.test_subscribe_one() fake_sender = CommandSubmitter('test', 'fake_sender') fake_sender2 = CommandSubmitter('test', 'fake_sender2') self.service._subscribe(['testch2'], fake_sender) self.service._unsubscribe(['testch1'], fake_sender) ok_('testch1' not in self.service._sublist[fake_sender], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('not found' not in ' '.join(interfaces.get('test').msg_queue[fake_sender])) ok_(self.service._channel_sub_count['testch1'] == 1) self.service._unsubscribe(['testch1'], fake_sender2) ok_('testch1' not in self.service._sublist[fake_sender2], 'sublist = '+str(self.service._sublist[fake_sender2])) ok_(self.service._channel_sub_count['testch1'] == 0) def test_unsubscribe_one_not_found(self): self.test_subscribe_one() fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch2'], fake_sender) self.service._unsubscribe(['testch3'], fake_sender) ok_('testch1' in self.service._sublist[fake_sender], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('testch2' in self.service._sublist[fake_sender], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('not found' in ' '.join(interfaces.get('test').msg_queue[fake_sender])) ok_(self.service._channel_sub_count['testch1'] == 2) def test_unsubscribe_multi_not_found(self): self.test_subscribe_one() fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch2'], fake_sender) self.service._unsubscribe(['testch3', 'testch1', 'testch2'], fake_sender) ok_('testch1' not in self.service._sublist[fake_sender], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('testch2' not in self.service._sublist[fake_sender], 'sublist = '+str(self.service._sublist[fake_sender])) ok_('not found' in ' '.join(interfaces.get('test').msg_queue[fake_sender])) ok_(self.service._channel_sub_count['testch1'] == 1) def test_list_channel(self): self.service._twitch.set_live_channel_list({'testch2': {'display_name': 'TESTCH2'}}) self.test_subscribe_multi() fake_sender = CommandSubmitter('test', 'fake_sender') self.service._list_channel(True, fake_sender) ok_(' '.join(interfaces.get('test').msg_queue[fake_sender]).count('LIVE') == 1) check_msg = ' '.join(interfaces.get('test').msg_queue[fake_sender]) ok_('testch2' in check_msg.lower()) ok_('testch1' in check_msg.lower()) def test_list_channel_invalidate_cache(self): self.service._twitch.set_live_channel_list({'testch2': {'display_name': 'TESTCH2'}}) self.test_subscribe_multi() self.service._channel_name_cache.clear() fake_sender = CommandSubmitter('test', 'fake_sender') self.service._list_channel(True, fake_sender) ok_(' '.join(interfaces.get('test').msg_queue[fake_sender]).count('LIVE') == 1) check_msg = ' '.join(interfaces.get('test').msg_queue[fake_sender]) ok_('testch2' in check_msg.lower()) ok_('testch1' in check_msg.lower()) def test_refresh(self): # check admin only self.service.start() threading.Event().wait(.1) self.service.stop() def self_ret(): self_ret.val = True self_ret.val = False self.service._check_thread.refresh = self_ret config['interface']['test'] = {'admin_id': 'test_admin'} fake_sender = CommandSubmitter('test', 'fake_sender') self.service._refresh(True, fake_sender) ok_(self_ret.val is not True) self.service._refresh(True, CommandSubmitter('test', 'test_admin')) ok_(self_ret.val is True) def test_list_users_no_user(self): # issue #10, list user hit exception while there is no user config['interface']['test'] = {'admin_id': 'test_admin'} try: os.remove(self.service.SUB_FILE) except OSError: pass self.service.start() threading.Event().wait(.1) self.service.stop() fake_sender = CommandSubmitter('test', 'test_admin') self.service._list_users([], fake_sender) # check there is a response to user ok_(len(''.join(interfaces.get('test').msg_queue[fake_sender])) > 0) def test_list_users(self): self.test_subscribe_one() self.service._subscribe(['testch2'], CommandSubmitter('test', 'fake_sender2')) config['interface']['test'] = {'admin_id': 'test_admin'} # check admin only fake_sender = CommandSubmitter('test', 'fake_sender') self.service._list_users([], fake_sender) ok_('Channels' not in ''.join(interfaces.get('test').msg_queue[fake_sender])) fake_sender = CommandSubmitter('test', 'test_admin') self.service._list_users([], fake_sender) # check msg response ok_('fake_sender' in ''.join(interfaces.get('test').msg_queue[fake_sender])) ok_('fake_sender2' in ''.join(interfaces.get('test').msg_queue[fake_sender])) ok_('testch1' not in ''.join(interfaces.get('test').msg_queue[fake_sender])) ok_('testch2' not in ''.join(interfaces.get('test').msg_queue[fake_sender])) # test list single user, channels interfaces.get('test').reset() for index in range(2): self.service._list_users([index], fake_sender) msg = ' '.join(interfaces.get('test').msg_queue[fake_sender]) if 'fake_sender' in msg: ok_('testch1' in msg) elif 'fake_sender2' in msg: ok_('testch2' in msg) ok_('testch1' in msg) # test list multiple user channels interfaces.get('test').reset() self.service._list_users(range(2), fake_sender) ok_('fake_sender' in ''.join(interfaces.get('test').msg_queue[fake_sender])) ok_('fake_sender2' in ''.join(interfaces.get('test').msg_queue[fake_sender])) ok_('testch1' in ''.join(interfaces.get('test').msg_queue[fake_sender])) ok_('testch2' in ''.join(interfaces.get('test').msg_queue[fake_sender])) def test_sub_by_url(self): sender = CommandSubmitter('test', 'sender') self.service._twitch.exists_ch_list = ['KayDaDa', 'LinotServant'] self.service.setup(self.parser) self.service.start() threading.Event().wait(1) self.service.stop() self.service._sub_by_url(['KayDaDa', 'LinotServant'], 'dummy', sender) ok_('KayDaDa'.lower() in self.service._sublist[sender], 'sublist = '+str(self.service._sublist[sender])) ok_('LinotServant'.lower() in self.service._sublist[sender], 'sublist = '+str(self.service._sublist[sender])) self.service._unsubscribe(['KayDaDa', 'LinotServant'], sender) ok_('KayDaDa'.lower() not in self.service._sublist[sender], 'sublist = '+str(self.service._sublist[sender])) ok_('LinotServant'.lower() not in self.service._sublist[sender], 'sublist = '+str(self.service._sublist[sender])) # Integration test self.parser.process_direct_commands('www.twitch.tv/KayDaDa twitch.tv/LinotServant', sender) ok_('KayDaDa'.lower() in self.service._sublist[sender], 'sublist = '+str(self.service._sublist[sender])) ok_('LinotServant'.lower() in self.service._sublist[sender], 'sublist = '+str(self.service._sublist[sender])) def test_unsub_all(self): sender = CommandSubmitter('test', 'sender') test_channels = ['testch1', 'testch2', 'testch3'] self.service._twitch.set_exists_channel_list(test_channels) self.service.setup(self.parser) self.service.start() threading.Event().wait(1) self.service.stop() self.service._subscribe(test_channels, sender) self.service._list_channel(True, sender) # make sure subscribe success for ch in test_channels: ok_(ch.lower() in ' '.join(interfaces.get('test').msg_queue[sender]).lower()) interfaces.get('test').reset() self.service._unsub_all(True, sender) self.service._list_channel(True, sender) for ch in test_channels: ok_(ch.lower() not in ' '.join(interfaces.get('test').msg_queue[sender]).lower()) def test_import(self): sender = CommandSubmitter('test', 'tester') short_test_channels = ['testch'+str(x) for x in range(3)] long_test_channels = ['testch'+str(x) for x in range(10)] self.service.setup(self.parser) self.service.start() threading.Event().wait(1) self.service.stop() # test small amount of followed channel self.service._twitch.followed_ch_list = {'some_twitch_user': short_test_channels} self.service._import(['some_twitch_user'], sender) self.service._list_channel(True, sender) for ch in short_test_channels: ok_(ch.lower() in ' '.join(interfaces.get('test').msg_queue[sender]).lower()) interfaces.get('test').reset() self.service._unsub_all(True, sender) # test large amount of followed channel self.service._twitch.followed_ch_list = {'some_twitch_user': long_test_channels} self.service._import(['some_twitch_user'], sender) self.service._list_channel(True, sender) for ch in long_test_channels: ok_(ch.lower() in ' '.join(interfaces.get('test').msg_queue[sender]).lower()) ok_('a while' in ' '.join(interfaces.get('test').msg_queue[sender]).lower()) interfaces.get('test').reset() self.service._unsub_all(True, sender) # test not found self.service._twitch.followed_ch_list = {'some_twitch_user': long_test_channels} self.service._import(['some_twitch_user2'], sender) self.service._list_channel(True, sender) for ch in long_test_channels: ok_(ch.lower() not in ' '.join(interfaces.get('test').msg_queue[sender]).lower()) ok_('not found' in ' '.join(interfaces.get('test').msg_queue[sender]).lower()) interfaces.get('test').reset() self.service._unsub_all(True, sender)
class TestService: def setUp(self): self.service = Service() self.service._twitch = MockTwitchEngine() self.parser = LinotParser(usage=argparse.SUPPRESS, add_help=False) interfaces.get('test').reset() def tearDown(self): try: os.remove(self.service.SUB_FILE) except OSError: pass def test_init(self): # some basic tests ok_(self.service.is_start() is False) ok_(self.service.CMD == 'twitch') def test_setup_argument(self): def set_matching_0(val, sender): set_matching_0.ret = (len(val) == 0) def set_matching_1(val, sender): set_matching_1.ret = (set(val) == set(['test1'])) def set_matching_2(val, sender): set_matching_2.ret = (set(val) == set(['test1', 'test2'])) def ret_val(val, sender): ret_val.ret = val def direct_cmd_set_match(match, cmd, sender): direct_cmd_set_match.ret = (set(match) == set(['kaydada'])) # test argument and function relation test_list = [ # -subscribe + ['-subscribe test1', '_subscribe', set_matching_1], ['-subscribe test1 test2', '_subscribe', set_matching_2], # -unsubscribe + ['-unsubscribe test1', '_unsubscribe', set_matching_1], ['-unsubscribe test1 test2', '_unsubscribe', set_matching_2], # -unsuball ['-unsuball', '_unsub_all', ret_val], ['-unsuball abc', '_unsub_all', ret_val], # -import ['-import test1', '_import', set_matching_1], # -listchannel ['-listchannel', '_list_channel', ret_val], ['-listchannel abc', '_list_channel', ret_val], # -refresh ['-refresh', '_refresh', ret_val], ['-refresh abc', '_refresh', ret_val], # -listusers * ['-listusers', '_list_users', set_matching_0], ['-listusers test1', '_list_users', set_matching_1], ['-listusers test1 test2', '_list_users', set_matching_2], ] for test in test_list: self.setUp() method_bak = None for name, method in inspect.getmembers(self.service, predicate=inspect.ismethod): if name == test[1]: method_bak = method setattr(self.service, name, test[2]) ok_(method_bak is not None, test[0] + ' case method not found') self.service.setup(self.parser) # setup calls _setup_arguments cmd = self.service.CMD + ' ' + test[0] args, unknowns = self.parser.parse_known_args(cmd.split()) test[2].ret = False args.proc(args, None) ok_(test[2].ret, 'failed: ' + test[0]) # test direct command test_list = [ # direct command: sub by url ['www.twitch.tv/kaydada', '_sub_by_url', direct_cmd_set_match], ] for test in test_list: self.setUp() method_bak = None for name, method in inspect.getmembers(self.service, predicate=inspect.ismethod): if name == test[1]: method_bak = method setattr(self.service, name, test[2]) ok_(method_bak is not None, test[0] + ' case method not found') self.service.setup(self.parser) # setup calls _setup_arguments cmd = test[0] self.parser.process_direct_commands(cmd, None) ok_(test[2].ret, 'failed: ' + test[0]) def test_start_subfile_exists(self): fake_sublist = { 'testid1': ['testch1', 'testch2', 'testch3'], 'testid2': ['testch2'], 'testid3': ['testch1', 'testch3'], 'testid4': ['testch2'], } pickle.dump(fake_sublist, open(self.service.SUB_FILE, 'wb+')) self.service.start() threading.Event().wait(.1) self.service.stop() ok_(self.service._channel_sub_count['testch1'] == 2, 'count =' + str(self.service._channel_sub_count['testch1'])) ok_(self.service._channel_sub_count['testch2'] == 3, 'count =' + str(self.service._channel_sub_count['testch2'])) ok_(self.service._channel_sub_count['testch3'] == 2, 'count =' + str(self.service._channel_sub_count['testch3'])) ok_(self.service._channel_sub_count['testch4'] == 0, 'count =' + str(self.service._channel_sub_count['testch4'])) def test_start_subfile_not_found(self): self.service.start() threading.Event().wait(.1) self.service.stop() ok_(set(self.service._sublist['testid1']) == set([])) ok_(set(self.service._sublist['testid2']) == set([])) ok_(self.service._channel_sub_count['testch1'] == 0, 'count =' + str(self.service._channel_sub_count['testch1'])) ok_(self.service._channel_sub_count['testch2'] == 0, 'count =' + str(self.service._channel_sub_count['testch2'])) def test_get_sublist(self): fake_sublist = { 'testid1': ['testch1', 'testch2', 'testch3'], 'testid2': ['testch2'], 'testid3': ['testch1', 'testch3'], } pickle.dump(fake_sublist, open(self.service.SUB_FILE, 'wb+')) self.service.start() threading.Event().wait(.1) self.service.stop() sublist = self.service.get_sublist() ok_(len(fake_sublist.viewkeys() ^ sublist.viewkeys()) == 0) for key in fake_sublist: ok_(set(fake_sublist[key]) == set(sublist[key])) def test_calculate_channel_count(self): self.service._sublist = { 'testid1': ['testch1', 'testch2', 'testch3'], 'testid2': ['testch2'], 'testid3': ['testch1', 'testch3', 'testch2'], } self.service._calculate_channel_sub_count() ok_(self.service._channel_sub_count['testch1'] == 2) ok_(self.service._channel_sub_count['testch2'] == 3) ok_(self.service._channel_sub_count['testch3'] == 2) ok_(self.service._channel_sub_count['testch4'] == 0) self.service._sublist = defaultdict(list) self.service._calculate_channel_sub_count() ok_(self.service._channel_sub_count['testch1'] == 0) ok_(self.service._channel_sub_count['testch2'] == 0) ok_(self.service._channel_sub_count['testch3'] == 0) ok_(self.service._channel_sub_count['testch4'] == 0) def test_subscribe_one(self): try: os.remove(self.service.SUB_FILE) except OSError: pass self.service.start() threading.Event().wait(.1) self.service.stop() self.service._twitch.set_exists_channel_list(['testch1', 'testch2']) fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch1'], fake_sender) ok_( 'testch1' in [x.lower() for x in self.service._sublist[fake_sender]], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('not found' not in ' '.join( interfaces.get('test').msg_queue[fake_sender])) ok_(self.service._channel_sub_count['testch1'] == 1) fake_sender2 = CommandSubmitter('test', 'fake_sender2') self.service._subscribe(['testch1'], fake_sender2) ok_(self.service._channel_sub_count['testch1'] == 2) def test_subscribe_one_exists(self): try: os.remove(self.service.SUB_FILE) except OSError: pass self.service.start() threading.Event().wait(.1) self.service.stop() self.service._twitch.set_exists_channel_list(['testch1', 'testch2']) fake_sender = CommandSubmitter('test', 'fake_sender') self.service._sublist[fake_sender] = ['testch1'] self.service._subscribe(['testch1'], fake_sender) ok_(self.service._sublist[fake_sender].count('testch1') == 1, 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('not found' not in ' '.join( interfaces.get('test').msg_queue[fake_sender])) def test_subscribe_one_not_found(self): self.service.start() threading.Event().wait(.1) self.service.stop() self.service._twitch.set_exists_channel_list(['testch2', 'testch3']) fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch1'], fake_sender) ok_('testch1' not in self.service._sublist[fake_sender], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('not found' in ' '.join( interfaces.get('test').msg_queue[fake_sender])) def test_subscribe_multi(self): try: os.remove(self.service.SUB_FILE) except OSError: pass self.service.start() threading.Event().wait(.1) self.service.stop() self.service._twitch.set_exists_channel_list(['testch1', 'testch2']) fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch1', 'testch2'], fake_sender) ok_('testch1' in self.service._sublist[fake_sender], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('testch2' in self.service._sublist[fake_sender], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('not found' not in ' '.join( interfaces.get('test').msg_queue[fake_sender])) def test_unsubscribe_one(self): self.test_subscribe_one() fake_sender = CommandSubmitter('test', 'fake_sender') fake_sender2 = CommandSubmitter('test', 'fake_sender2') self.service._subscribe(['testch2'], fake_sender) self.service._unsubscribe(['testch1'], fake_sender) ok_('testch1' not in self.service._sublist[fake_sender], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('not found' not in ' '.join( interfaces.get('test').msg_queue[fake_sender])) ok_(self.service._channel_sub_count['testch1'] == 1) self.service._unsubscribe(['testch1'], fake_sender2) ok_('testch1' not in self.service._sublist[fake_sender2], 'sublist = ' + str(self.service._sublist[fake_sender2])) ok_(self.service._channel_sub_count['testch1'] == 0) def test_unsubscribe_one_not_found(self): self.test_subscribe_one() fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch2'], fake_sender) self.service._unsubscribe(['testch3'], fake_sender) ok_('testch1' in self.service._sublist[fake_sender], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('testch2' in self.service._sublist[fake_sender], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('not found' in ' '.join( interfaces.get('test').msg_queue[fake_sender])) ok_(self.service._channel_sub_count['testch1'] == 2) def test_unsubscribe_multi_not_found(self): self.test_subscribe_one() fake_sender = CommandSubmitter('test', 'fake_sender') self.service._subscribe(['testch2'], fake_sender) self.service._unsubscribe(['testch3', 'testch1', 'testch2'], fake_sender) ok_('testch1' not in self.service._sublist[fake_sender], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('testch2' not in self.service._sublist[fake_sender], 'sublist = ' + str(self.service._sublist[fake_sender])) ok_('not found' in ' '.join( interfaces.get('test').msg_queue[fake_sender])) ok_(self.service._channel_sub_count['testch1'] == 1) def test_list_channel(self): self.service._twitch.set_live_channel_list( {'testch2': { 'display_name': 'TESTCH2' }}) self.test_subscribe_multi() fake_sender = CommandSubmitter('test', 'fake_sender') self.service._list_channel(True, fake_sender) ok_(' '.join(interfaces.get('test').msg_queue[fake_sender]).count( 'LIVE') == 1) check_msg = ' '.join(interfaces.get('test').msg_queue[fake_sender]) ok_('testch2' in check_msg.lower()) ok_('testch1' in check_msg.lower()) def test_list_channel_invalidate_cache(self): self.service._twitch.set_live_channel_list( {'testch2': { 'display_name': 'TESTCH2' }}) self.test_subscribe_multi() self.service._channel_name_cache.clear() fake_sender = CommandSubmitter('test', 'fake_sender') self.service._list_channel(True, fake_sender) ok_(' '.join(interfaces.get('test').msg_queue[fake_sender]).count( 'LIVE') == 1) check_msg = ' '.join(interfaces.get('test').msg_queue[fake_sender]) ok_('testch2' in check_msg.lower()) ok_('testch1' in check_msg.lower()) def test_refresh(self): # check admin only self.service.start() threading.Event().wait(.1) self.service.stop() def self_ret(): self_ret.val = True self_ret.val = False self.service._check_thread.refresh = self_ret config['interface']['test'] = {'admin_id': 'test_admin'} fake_sender = CommandSubmitter('test', 'fake_sender') self.service._refresh(True, fake_sender) ok_(self_ret.val is not True) self.service._refresh(True, CommandSubmitter('test', 'test_admin')) ok_(self_ret.val is True) def test_list_users_no_user(self): # issue #10, list user hit exception while there is no user config['interface']['test'] = {'admin_id': 'test_admin'} try: os.remove(self.service.SUB_FILE) except OSError: pass self.service.start() threading.Event().wait(.1) self.service.stop() fake_sender = CommandSubmitter('test', 'test_admin') self.service._list_users([], fake_sender) # check there is a response to user ok_(len(''.join(interfaces.get('test').msg_queue[fake_sender])) > 0) def test_list_users(self): self.test_subscribe_one() self.service._subscribe(['testch2'], CommandSubmitter('test', 'fake_sender2')) config['interface']['test'] = {'admin_id': 'test_admin'} # check admin only fake_sender = CommandSubmitter('test', 'fake_sender') self.service._list_users([], fake_sender) ok_('Channels' not in ''.join( interfaces.get('test').msg_queue[fake_sender])) fake_sender = CommandSubmitter('test', 'test_admin') self.service._list_users([], fake_sender) # check msg response ok_('fake_sender' in ''.join( interfaces.get('test').msg_queue[fake_sender])) ok_('fake_sender2' in ''.join( interfaces.get('test').msg_queue[fake_sender])) ok_('testch1' not in ''.join( interfaces.get('test').msg_queue[fake_sender])) ok_('testch2' not in ''.join( interfaces.get('test').msg_queue[fake_sender])) # test list single user, channels interfaces.get('test').reset() for index in range(2): self.service._list_users([index], fake_sender) msg = ' '.join(interfaces.get('test').msg_queue[fake_sender]) if 'fake_sender' in msg: ok_('testch1' in msg) elif 'fake_sender2' in msg: ok_('testch2' in msg) ok_('testch1' in msg) # test list multiple user channels interfaces.get('test').reset() self.service._list_users(range(2), fake_sender) ok_('fake_sender' in ''.join( interfaces.get('test').msg_queue[fake_sender])) ok_('fake_sender2' in ''.join( interfaces.get('test').msg_queue[fake_sender])) ok_('testch1' in ''.join( interfaces.get('test').msg_queue[fake_sender])) ok_('testch2' in ''.join( interfaces.get('test').msg_queue[fake_sender])) def test_sub_by_url(self): sender = CommandSubmitter('test', 'sender') self.service._twitch.exists_ch_list = ['KayDaDa', 'LinotServant'] self.service.setup(self.parser) self.service.start() threading.Event().wait(1) self.service.stop() self.service._sub_by_url(['KayDaDa', 'LinotServant'], 'dummy', sender) ok_('KayDaDa'.lower() in self.service._sublist[sender], 'sublist = ' + str(self.service._sublist[sender])) ok_('LinotServant'.lower() in self.service._sublist[sender], 'sublist = ' + str(self.service._sublist[sender])) self.service._unsubscribe(['KayDaDa', 'LinotServant'], sender) ok_('KayDaDa'.lower() not in self.service._sublist[sender], 'sublist = ' + str(self.service._sublist[sender])) ok_('LinotServant'.lower() not in self.service._sublist[sender], 'sublist = ' + str(self.service._sublist[sender])) # Integration test self.parser.process_direct_commands( 'www.twitch.tv/KayDaDa twitch.tv/LinotServant', sender) ok_('KayDaDa'.lower() in self.service._sublist[sender], 'sublist = ' + str(self.service._sublist[sender])) ok_('LinotServant'.lower() in self.service._sublist[sender], 'sublist = ' + str(self.service._sublist[sender])) def test_unsub_all(self): sender = CommandSubmitter('test', 'sender') test_channels = ['testch1', 'testch2', 'testch3'] self.service._twitch.set_exists_channel_list(test_channels) self.service.setup(self.parser) self.service.start() threading.Event().wait(1) self.service.stop() self.service._subscribe(test_channels, sender) self.service._list_channel(True, sender) # make sure subscribe success for ch in test_channels: ok_(ch.lower() in ' '.join( interfaces.get('test').msg_queue[sender]).lower()) interfaces.get('test').reset() self.service._unsub_all(True, sender) self.service._list_channel(True, sender) for ch in test_channels: ok_(ch.lower() not in ' '.join( interfaces.get('test').msg_queue[sender]).lower()) def test_import(self): sender = CommandSubmitter('test', 'tester') short_test_channels = ['testch' + str(x) for x in range(3)] long_test_channels = ['testch' + str(x) for x in range(10)] self.service.setup(self.parser) self.service.start() threading.Event().wait(1) self.service.stop() # test small amount of followed channel self.service._twitch.followed_ch_list = { 'some_twitch_user': short_test_channels } self.service._import(['some_twitch_user'], sender) self.service._list_channel(True, sender) for ch in short_test_channels: ok_(ch.lower() in ' '.join( interfaces.get('test').msg_queue[sender]).lower()) interfaces.get('test').reset() self.service._unsub_all(True, sender) # test large amount of followed channel self.service._twitch.followed_ch_list = { 'some_twitch_user': long_test_channels } self.service._import(['some_twitch_user'], sender) self.service._list_channel(True, sender) for ch in long_test_channels: ok_(ch.lower() in ' '.join( interfaces.get('test').msg_queue[sender]).lower()) ok_('a while' in ' '.join(interfaces.get( 'test').msg_queue[sender]).lower()) interfaces.get('test').reset() self.service._unsub_all(True, sender) # test not found self.service._twitch.followed_ch_list = { 'some_twitch_user': long_test_channels } self.service._import(['some_twitch_user2'], sender) self.service._list_channel(True, sender) for ch in long_test_channels: ok_(ch.lower() not in ' '.join( interfaces.get('test').msg_queue[sender]).lower()) ok_('not found' in ' '.join(interfaces.get( 'test').msg_queue[sender]).lower()) interfaces.get('test').reset() self.service._unsub_all(True, sender)