Loading cog/inara.py +4 −7 Original line number Diff line number Diff line Loading @@ -279,10 +279,7 @@ class InaraApi(): Present the loosely matched choices and wait for user selection. Returns: Present choices and await a valid numeric reply. None if any of the following true: 1) Timesout waiting for user response. 2) Invalid response from user (i.e. text, invalid number). The selected commander from a select discord component. Raises: CmdAborted - Cmdr either requested abort or failed to respond. Loading @@ -300,7 +297,7 @@ class InaraApi(): check = functools.partial(check_inter_orig_user_or_admin, msg.author, sent) try: inter = await cog.util.BOT.wait_for('select_option', check=check, timeout=30) if inter.values[0] == BUT_CANCEL: if inter.values == [BUT_CANCEL]: raise cog.exc.CmdAborted("WhoIs lookup aborted, user cancelled.") return inter.values[0] except asyncio.TimeoutError: Loading Loading @@ -471,9 +468,9 @@ class InaraApi(): resp = "This report will be cancelled. Have a nice day!" else: resp = """You selected {} resp = """{} will be reported as {}. Leadership will review your report. Thank you.""".format(inter.component.label) Leadership will review your report. Thank you.""".format(cmdr['name'], inter.component.label.lower()) is_friendly = inter.component.label == BUT_FRIENDLY reason = "Manual report after a !whois in {channel} by cmdr {reported_by}" \ .format(channel=msg.channel, reported_by=msg.author) Loading tests/cog/test_actions.py +20 −11 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ from cogdb.schema import (DiscordUser, FortSystem, FortDrop, FortUser, AdminPerm, RolePerm, ChannelPerm, TrackSystem, TrackSystemCached, TrackByID) from tests.conftest import fake_msg_gears, fake_msg_newuser from tests.conftest import fake_msg_gears, fake_msg_newuser, Interaction import tests.conftest as tc from tests.cog.test_inara import INARA_TEST Loading Loading @@ -1723,34 +1723,43 @@ async def test_cmd_vote_display(f_bot, f_admins, f_dusers, f_global_testbed, f_v @INARA_TEST @pytest.mark.asyncio async def test_cmd_whois_canceled(f_bot, f_asheet_kos, f_kos): emoji_no = "\u274C" msg = fake_msg_gears("!whois Prozer") f_bot.wait_for.async_return_value = emoji_no, None f_bot.wait_for.async_side_effect = ( Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_CANCEL), Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_CANCEL), ) await action_map(msg, f_bot).execute() f_bot.send_message.assert_called_with(msg.channel, 'Command ignored.') # f_bot.send_message.assert_called_with(msg.channel, 'Command ignored.') print(str(f_bot.send_message.call_args).replace("\\n", "\n")) @INARA_TEST @pytest.mark.asyncio async def test_cmd_whois_friendly(f_bot, f_asheet_kos, f_kos): emoji_friendly = "\u1F7E2" f_bot.wait_for.async_return_value = emoji_friendly, None msg = fake_msg_gears("!whois Prozer") msg = fake_msg_gears('!whois Prozer') f_bot.wait_for.async_side_effect = ( Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_FRIENDLY), Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_FRIENDLY), ) await action_map(msg, f_bot).execute() f_bot.send_message.assert_called_with(msg.channel, 'CMDR has been reported to Leadership.') # f_bot.send_message.assert_called_with(msg.channel, 'CMDR has been reported to Leadership.') print(str(f_bot.send_message.call_args).replace("\\n", "\n")) @INARA_TEST @pytest.mark.asyncio async def test_cmd_whois_hostile(f_bot, f_asheet_kos, f_kos): emoji_hostile = "\u1F534" f_bot.wait_for.async_return_value = emoji_hostile, None msg = fake_msg_gears("!whois Prozer") f_bot.wait_for.async_side_effect = ( Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_FRIENDLY), Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_FRIENDLY), ) await action_map(msg, f_bot).execute() f_bot.send_message.assert_called_with(msg.channel, 'CMDR has been reported to Leadership.') # f_bot.send_message.assert_called_with(msg.channel, 'CMDR has been reported to Leadership.') print(str(f_bot.send_message.call_args).replace("\\n", "\n")) def test_process_system_args(): Loading tests/cog/test_inara.py +14 −6 Original line number Diff line number Diff line Loading @@ -79,7 +79,11 @@ async def test_search_with_api(f_bot): @pytest.mark.asyncio async def test_reply_with_api_result(f_bot): api = cog.inara.InaraApi() f_bot.wait_for.async_return_value = (fake_msg_gears('stop'), None) msg = fake_msg_gears('stop') comp = aiomock.Mock() comp.label = cog.inara.BUT_CANCEL f_bot.wait_for.async_return_value = Interaction('reply_api', message=msg, user=msg.author, component=comp) f_bot.send_message.async_return_value = fake_msg_gears("A message to send.") cog.util.BOT = f_bot f_msg = fake_msg_gears('!whois gearsandcogs') Loading @@ -87,7 +91,7 @@ async def test_reply_with_api_result(f_bot): await api.reply_with_api_result(cmdr["req_id"], cmdr["event_data"], f_msg) # TODO: Very lazy check :/ assert "CMDR has been reported to Leadership." in str(f_bot.send_message.call_args) assert 'Should the CMDR GearsandCogs be added as friendly or hostile?' in str(f_bot.send_message.call_args) @pytest.mark.asyncio Loading Loading @@ -139,8 +143,11 @@ async def test_friendly_detector_hostile_with_squad(f_bot): @pytest.mark.asyncio async def test_select_from_multiple_exact(f_bot): api = cog.inara.InaraApi() # 7 is not guaranteed, based on external inara cmdr names order in results f_bot.wait_for.async_return_value = fake_msg_gears('cmdr 9') msg = fake_msg_gears('stop') f_bot.wait_for.async_side_effect = [ Interaction('reply_api', message=msg, user=msg.author, comp_label='GearsandCogs'), Interaction('reply_api', message=msg, user=msg.author, comp_label=cog.inara.BUT_DENY), ] cog.util.BOT = f_bot cmdr = await api.search_with_api('gears', fake_msg_gears('!whois gears')) assert cmdr["name"] == "GearsandCogs" Loading @@ -152,7 +159,8 @@ async def test_select_from_multiple_exact(f_bot): @pytest.mark.asyncio async def test_select_from_multiple_stop(f_bot): api = cog.inara.InaraApi() f_bot.wait_for.async_return_value = fake_msg_gears('stop') msg = fake_msg_gears(cog.inara.BUT_CANCEL) f_bot.wait_for.async_return_value = Interaction('multiple_stop', message=msg, user=msg.author, comp_label=cog.inara.BUT_CANCEL) cog.util.BOT = f_bot with pytest.raises(cog.exc.CmdAborted): await api.search_with_api('gears', fake_msg_gears('!whois gears')) Loading Loading @@ -190,7 +198,7 @@ async def test_inara_squad_details(f_bot): def test_check_inter_orig_user_or_admin(f_dusers, f_admins): message = fake_msg_gears('hello') message2 = fake_msg_newuser('goodbye') inter = Interaction('inter1', user=message2.author, message=message2) inter = Interaction('inter1', user=message2.author, message=message2, values=cog.inara.BUT_CANCEL) # Same everything assert cog.inara.check_inter_orig_user_or_admin(message2.author, message2, inter) Loading tests/conftest.py +14 −2 Original line number Diff line number Diff line Loading @@ -464,7 +464,7 @@ class Channel(FakeObject): msg.is_deleted = True self.all_delete_messages += messages async def send(self, embed): async def send(self, embed, **kwargs): return Message(embed, None, self.guild, None) Loading Loading @@ -526,10 +526,22 @@ class Message(FakeObject): class Interaction(FakeObject): def __init__(self, name, *, id=None, user=None, message=None): def __init__(self, name, *, id=None, user=None, message=None, component=None, values=None, comp_label=None): super().__init__(name, id) self.message = message self.user = user self.sent = [] if comp_label: component = aiomock.Mock() print('label', comp_label) component.label = comp_label self.component = component self.values = [component.label] if component and not values else values async def send(self, *args, **kwargs): self.sent += args def fake_servers(): Loading Loading
cog/inara.py +4 −7 Original line number Diff line number Diff line Loading @@ -279,10 +279,7 @@ class InaraApi(): Present the loosely matched choices and wait for user selection. Returns: Present choices and await a valid numeric reply. None if any of the following true: 1) Timesout waiting for user response. 2) Invalid response from user (i.e. text, invalid number). The selected commander from a select discord component. Raises: CmdAborted - Cmdr either requested abort or failed to respond. Loading @@ -300,7 +297,7 @@ class InaraApi(): check = functools.partial(check_inter_orig_user_or_admin, msg.author, sent) try: inter = await cog.util.BOT.wait_for('select_option', check=check, timeout=30) if inter.values[0] == BUT_CANCEL: if inter.values == [BUT_CANCEL]: raise cog.exc.CmdAborted("WhoIs lookup aborted, user cancelled.") return inter.values[0] except asyncio.TimeoutError: Loading Loading @@ -471,9 +468,9 @@ class InaraApi(): resp = "This report will be cancelled. Have a nice day!" else: resp = """You selected {} resp = """{} will be reported as {}. Leadership will review your report. Thank you.""".format(inter.component.label) Leadership will review your report. Thank you.""".format(cmdr['name'], inter.component.label.lower()) is_friendly = inter.component.label == BUT_FRIENDLY reason = "Manual report after a !whois in {channel} by cmdr {reported_by}" \ .format(channel=msg.channel, reported_by=msg.author) Loading
tests/cog/test_actions.py +20 −11 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ from cogdb.schema import (DiscordUser, FortSystem, FortDrop, FortUser, AdminPerm, RolePerm, ChannelPerm, TrackSystem, TrackSystemCached, TrackByID) from tests.conftest import fake_msg_gears, fake_msg_newuser from tests.conftest import fake_msg_gears, fake_msg_newuser, Interaction import tests.conftest as tc from tests.cog.test_inara import INARA_TEST Loading Loading @@ -1723,34 +1723,43 @@ async def test_cmd_vote_display(f_bot, f_admins, f_dusers, f_global_testbed, f_v @INARA_TEST @pytest.mark.asyncio async def test_cmd_whois_canceled(f_bot, f_asheet_kos, f_kos): emoji_no = "\u274C" msg = fake_msg_gears("!whois Prozer") f_bot.wait_for.async_return_value = emoji_no, None f_bot.wait_for.async_side_effect = ( Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_CANCEL), Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_CANCEL), ) await action_map(msg, f_bot).execute() f_bot.send_message.assert_called_with(msg.channel, 'Command ignored.') # f_bot.send_message.assert_called_with(msg.channel, 'Command ignored.') print(str(f_bot.send_message.call_args).replace("\\n", "\n")) @INARA_TEST @pytest.mark.asyncio async def test_cmd_whois_friendly(f_bot, f_asheet_kos, f_kos): emoji_friendly = "\u1F7E2" f_bot.wait_for.async_return_value = emoji_friendly, None msg = fake_msg_gears("!whois Prozer") msg = fake_msg_gears('!whois Prozer') f_bot.wait_for.async_side_effect = ( Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_FRIENDLY), Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_FRIENDLY), ) await action_map(msg, f_bot).execute() f_bot.send_message.assert_called_with(msg.channel, 'CMDR has been reported to Leadership.') # f_bot.send_message.assert_called_with(msg.channel, 'CMDR has been reported to Leadership.') print(str(f_bot.send_message.call_args).replace("\\n", "\n")) @INARA_TEST @pytest.mark.asyncio async def test_cmd_whois_hostile(f_bot, f_asheet_kos, f_kos): emoji_hostile = "\u1F534" f_bot.wait_for.async_return_value = emoji_hostile, None msg = fake_msg_gears("!whois Prozer") f_bot.wait_for.async_side_effect = ( Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_FRIENDLY), Interaction('cmd_who_friendly', message=msg, user=msg.author, comp_label=cog.inara.BUT_FRIENDLY), ) await action_map(msg, f_bot).execute() f_bot.send_message.assert_called_with(msg.channel, 'CMDR has been reported to Leadership.') # f_bot.send_message.assert_called_with(msg.channel, 'CMDR has been reported to Leadership.') print(str(f_bot.send_message.call_args).replace("\\n", "\n")) def test_process_system_args(): Loading
tests/cog/test_inara.py +14 −6 Original line number Diff line number Diff line Loading @@ -79,7 +79,11 @@ async def test_search_with_api(f_bot): @pytest.mark.asyncio async def test_reply_with_api_result(f_bot): api = cog.inara.InaraApi() f_bot.wait_for.async_return_value = (fake_msg_gears('stop'), None) msg = fake_msg_gears('stop') comp = aiomock.Mock() comp.label = cog.inara.BUT_CANCEL f_bot.wait_for.async_return_value = Interaction('reply_api', message=msg, user=msg.author, component=comp) f_bot.send_message.async_return_value = fake_msg_gears("A message to send.") cog.util.BOT = f_bot f_msg = fake_msg_gears('!whois gearsandcogs') Loading @@ -87,7 +91,7 @@ async def test_reply_with_api_result(f_bot): await api.reply_with_api_result(cmdr["req_id"], cmdr["event_data"], f_msg) # TODO: Very lazy check :/ assert "CMDR has been reported to Leadership." in str(f_bot.send_message.call_args) assert 'Should the CMDR GearsandCogs be added as friendly or hostile?' in str(f_bot.send_message.call_args) @pytest.mark.asyncio Loading Loading @@ -139,8 +143,11 @@ async def test_friendly_detector_hostile_with_squad(f_bot): @pytest.mark.asyncio async def test_select_from_multiple_exact(f_bot): api = cog.inara.InaraApi() # 7 is not guaranteed, based on external inara cmdr names order in results f_bot.wait_for.async_return_value = fake_msg_gears('cmdr 9') msg = fake_msg_gears('stop') f_bot.wait_for.async_side_effect = [ Interaction('reply_api', message=msg, user=msg.author, comp_label='GearsandCogs'), Interaction('reply_api', message=msg, user=msg.author, comp_label=cog.inara.BUT_DENY), ] cog.util.BOT = f_bot cmdr = await api.search_with_api('gears', fake_msg_gears('!whois gears')) assert cmdr["name"] == "GearsandCogs" Loading @@ -152,7 +159,8 @@ async def test_select_from_multiple_exact(f_bot): @pytest.mark.asyncio async def test_select_from_multiple_stop(f_bot): api = cog.inara.InaraApi() f_bot.wait_for.async_return_value = fake_msg_gears('stop') msg = fake_msg_gears(cog.inara.BUT_CANCEL) f_bot.wait_for.async_return_value = Interaction('multiple_stop', message=msg, user=msg.author, comp_label=cog.inara.BUT_CANCEL) cog.util.BOT = f_bot with pytest.raises(cog.exc.CmdAborted): await api.search_with_api('gears', fake_msg_gears('!whois gears')) Loading Loading @@ -190,7 +198,7 @@ async def test_inara_squad_details(f_bot): def test_check_inter_orig_user_or_admin(f_dusers, f_admins): message = fake_msg_gears('hello') message2 = fake_msg_newuser('goodbye') inter = Interaction('inter1', user=message2.author, message=message2) inter = Interaction('inter1', user=message2.author, message=message2, values=cog.inara.BUT_CANCEL) # Same everything assert cog.inara.check_inter_orig_user_or_admin(message2.author, message2, inter) Loading
tests/conftest.py +14 −2 Original line number Diff line number Diff line Loading @@ -464,7 +464,7 @@ class Channel(FakeObject): msg.is_deleted = True self.all_delete_messages += messages async def send(self, embed): async def send(self, embed, **kwargs): return Message(embed, None, self.guild, None) Loading Loading @@ -526,10 +526,22 @@ class Message(FakeObject): class Interaction(FakeObject): def __init__(self, name, *, id=None, user=None, message=None): def __init__(self, name, *, id=None, user=None, message=None, component=None, values=None, comp_label=None): super().__init__(name, id) self.message = message self.user = user self.sent = [] if comp_label: component = aiomock.Mock() print('label', comp_label) component.label = comp_label self.component = component self.values = [component.label] if component and not values else values async def send(self, *args, **kwargs): self.sent += args def fake_servers(): Loading