async def test_remove_user_from_twitch_alert_with_message(twitch_cog): test_custom_message = "We be live gamers!" # Creates guild and channels and adds user and bot guild = dpytest.backend.make_guild(name="TestGuild") channel = dpytest.backend.make_text_channel(name="TestChannel", guild=guild) dpytest.get_config().guilds.append(guild) dpytest.get_config().channels.append(channel) member = await dpytest.member_join(-1, name="TestUser", discrim=1) await dpytest.member_join(-1, dpytest.get_config().client.user) # Creates Twitch Alert await dpytest.message( f"{KoalaBot.COMMAND_PREFIX}add_user_to_twitch_alert {channel.id} monstercat {test_custom_message}", channel=-1, member=member) sql_check_updated_server = f"SELECT custom_message FROM UserInTwitchAlert WHERE twitch_username='******' AND channel_id={channel.id}" assert twitch_cog.ta_database_manager.database_manager.db_execute_select( sql_check_updated_server) == [(test_custom_message, )] await dpytest.empty_queue() # Removes Twitch Alert await dpytest.message( f"{KoalaBot.COMMAND_PREFIX}remove_user_from_twitch_alert {channel.id} monstercat", channel=-1, member=member) new_embed = discord.Embed(title="Removed User from Twitch Alert", colour=KOALA_GREEN, description=f"Channel: {channel.id}\n" f"User: monstercat") dpytest.verify_embed(new_embed) assert twitch_cog.ta_database_manager.database_manager.db_execute_select( sql_check_updated_server) == [] pass
async def test_add_user_to_twitch_alert_custom_message( twitch_cog: twitch_alert.cog.TwitchAlert): test_custom_message = "We be live gamers!" guild = dpytest.backend.make_guild(name="TestGuild") channel = dpytest.backend.make_text_channel(name="TestChannel", guild=guild) dpytest.get_config().guilds.append(guild) dpytest.get_config().channels.append(channel) member = await dpytest.member_join(-1, name="TestUser", discrim=1) await dpytest.member_join(-1, dpytest.get_config().client.user) assert_embed = discord.Embed(title="Added User to Twitch Alert", description=f"Channel: {channel.id}\n" f"User: monstercat\n" f"Message: {test_custom_message}", colour=KOALA_GREEN) await dpytest.message( f"{koalabot.COMMAND_PREFIX}twitch add monstercat {channel.id} {test_custom_message}", channel=-1, member=member) assert dpytest.verify().message().embed(embed=assert_embed) sql_check_updated_server = select(UserInTwitchAlert.custom_message).where( and_(UserInTwitchAlert.twitch_username == 'monstercat', UserInTwitchAlert.channel_id == channel.id)) with session_manager() as session: result = session.execute(sql_check_updated_server).one() assert result.custom_message == test_custom_message
async def test_add_mod_channel_too_many_arguments(): channel = dpytest.backend.make_text_channel( name="TestChannel", guild=dpytest.get_config().guilds[0]) dpytest.get_config().channels.append(channel) with pytest.raises(Exception): await dpytest.message(koalabot.COMMAND_PREFIX + "setupModChannel " + str(channel.id) + " a b c d e")
async def test_add_user_to_twitch_alert_custom_message(twitch_cog): test_custom_message = "We be live gamers!" guild = dpytest.backend.make_guild(name="TestGuild") channel = dpytest.backend.make_text_channel(name="TestChannel", guild=guild) dpytest.get_config().guilds.append(guild) dpytest.get_config().channels.append(channel) member = await dpytest.member_join(-1, name="TestUser", discrim=1) await dpytest.member_join(-1, dpytest.get_config().client.user) assert_embed = discord.Embed(title="Added User to Twitch Alert", description=f"Channel: {channel.id}\n" f"User: monstercat\n" f"Message: {test_custom_message}", colour=KOALA_GREEN) await dpytest.message( f"{KoalaBot.COMMAND_PREFIX}add_user_to_twitch_alert {channel.id} monstercat {test_custom_message}", channel=-1, member=member) dpytest.verify_embed(embed=assert_embed) sql_check_updated_server = f"SELECT custom_message FROM UserInTwitchAlert WHERE twitch_username='******' AND channel_id={channel.id}" assert twitch_cog.ta_database_manager.database_manager.db_execute_select( sql_check_updated_server) == [(test_custom_message, )]
async def test_send_welcome_message_cancelled(): msg_mock = dpytest.back.make_message('n', dpytest.get_config().members[0], dpytest.get_config().channels[0]) with mock.patch('cogs.IntroCog.wait_for_message', mock.AsyncMock(return_value=msg_mock)): await dpytest.message(KoalaBot.COMMAND_PREFIX + "send_welcome_message") dpytest.verify_message("This will DM 1 people. Are you sure you wish to do this? Y/N") dpytest.verify_message("Okay, I won't send out the welcome message then.") dpytest.verify_message(assert_nothing=True)
async def test_remove_team_from_twitch_alert_with_message(twitch_cog): test_custom_message = "We be live gamers!" # Creates guild and channels and adds user and bot guild = dpytest.backend.make_guild(name="TestGuild") channel = dpytest.backend.make_text_channel(name="TestChannel", guild=guild) dpytest.get_config().guilds.append(guild) dpytest.get_config().channels.append(channel) member = await dpytest.member_join(-1, name="TestUser", discrim=1) await dpytest.member_join(-1, dpytest.get_config().client.user) # Creates Twitch Alert await dpytest.message( f"{KoalaBot.COMMAND_PREFIX}add_team_to_twitch_alert {channel.id} faze {test_custom_message}", channel=-1, member=member) await dpytest.empty_queue() # Removes Twitch Alert await dpytest.message( f"{KoalaBot.COMMAND_PREFIX}remove_team_from_twitch_alert {channel.id} faze", channel=-1, member=member) new_embed = discord.Embed(title="Removed Team from Twitch Alert", colour=KOALA_GREEN, description=f"Channel: {channel.id}\n" f"Team: faze") dpytest.verify_embed(new_embed) pass
async def test_send_welcome_message(): msg_mock = dpytest.back.make_message('y', dpytest.get_config().members[0], dpytest.get_config().channels[0]) with mock.patch('cogs.IntroCog.wait_for_message', mock.AsyncMock(return_value=msg_mock)): await dpytest.message(KoalaBot.COMMAND_PREFIX + "send_welcome_message") dpytest.verify_message("This will DM 1 people. Are you sure you wish to do this? Y/N") dpytest.verify_message("Okay, sending out the welcome message now.") dpytest.verify_message(f"{IntroCog.DEFAULT_WELCOME_MESSAGE}\r\n{IntroCog.BASE_LEGAL_MESSAGE}")
async def test_confirm_message(msg_content, expected): author = dpytest.get_config().members[0] channel = dpytest.get_config().channels[0] message = dpytest.back.make_message(author=author, content=msg_content, channel=channel) x = await confirm_message(message) assert x is expected
async def test_ask_for_confirmation(msg_content, is_invalid, expected): author = dpytest.get_config().members[0] channel = dpytest.get_config().channels[0] message = dpytest.back.make_message(author=author, content=msg_content, channel=channel) x = await IntroCog.ask_for_confirmation(message, channel) assert x == expected if is_invalid: dpytest.verify_message()
async def test_add_mod_channel(): channel = dpytest.backend.make_text_channel(name="TestChannel", guild=dpytest.get_config().guilds[0]) dpytest.get_config().channels.append(channel) await dpytest.message(KoalaBot.COMMAND_PREFIX + "setupModChannel "+str(channel.id)) assert_embed = createNewModChannelEmbed(channel) dpytest.verify_embed(embed=assert_embed) cleanup(dpytest.get_config().guilds[0].id)
async def test_list_ignored(): mes = await dpytest.message(KoalaBot.COMMAND_PREFIX + "ignoreChannel " + dpytest.get_config().guilds[0].channels[0].mention) assertNewIgnore(dpytest.get_config().guilds[0].channels[0].mention) await dpytest.message(KoalaBot.COMMAND_PREFIX + "ignoreUser " + mes.author.mention) assertNewIgnore(mes.author.mention) await dpytest.message(KoalaBot.COMMAND_PREFIX + "listIgnored") assert listIgnoredEmbed([dpytest.get_config().guilds[0].channels[0], mes.author])
async def test_custom_colour_invalid_colour_str(): guild: discord.Guild = dpytest.get_config().guilds[0] role = (await make_list_of_roles(guild, 1))[0] DBManager.add_colour_change_role_perms(guild.id, role.id) member: discord.Member = dpytest.get_config().members[0] await member.add_roles(role) await dpytest.message(koalabot.COMMAND_PREFIX + "custom_colour s34a21", member=0) assert dpytest.verify().message().content( f"Invalid colour string specified, make sure it's a valid colour hex.") assert len(member.roles) == 2
async def test_custom_colour_no_no_colour_role(): guild: discord.Guild = dpytest.get_config().guilds[0] role = (await make_list_of_roles(guild, 1))[0] DBManager.add_colour_change_role_perms(guild.id, role.id) member: discord.Member = dpytest.get_config().members[0] await member.add_roles(role) await dpytest.message(koalabot.COMMAND_PREFIX + "custom_colour no", member=0) assert dpytest.verify().message().content("Okay, removing your old custom colour role then, if you have one.") assert dpytest.verify().message().content(f"{member.mention} you don't have any colour roles to remove.") assert dpytest.verify().message().nothing()
async def test_custom_colour_colour_is_protected(): guild: discord.Guild = dpytest.get_config().guilds[0] role = (await make_list_of_roles(guild, 1))[0] DBManager.add_colour_change_role_perms(guild.id, role.id) member: discord.Member = dpytest.get_config().members[0] await member.add_roles(role) fail_colour = discord.Colour.from_rgb(255, 255, 255) await dpytest.message(koalabot.COMMAND_PREFIX + "custom_colour FEFEFE", member=0) assert dpytest.verify().message().content( f"Colour chosen was too close to an already protected colour {hex(fail_colour.value)}. Please choose a different colour.") assert "KoalaBot[0xFEFEFE]" not in [role.name for role in guild.roles]
async def test_add_mod_channel_tag(text_filter_db_manager): channel = dpytest.backend.make_text_channel(name="TestChannel", guild=dpytest.get_config().guilds[0]) dpytest.get_config().channels.append(channel) await dpytest.message(KoalaBot.COMMAND_PREFIX + "setupModChannel <#"+str(channel.id)+">") assert_embed = createNewModChannelEmbed(channel) dpytest.verify_embed(embed=assert_embed) result = text_filter_db_manager.database_manager.db_execute_select("SELECT channel_id FROM TextFilterModeration WHERE guild_id = ?;", args=[channel.guild.id]) assert is_int(result[0][0]) cleanup(dpytest.get_config().guilds[0].id)
async def test_update_welcome_message_too_long(): import random, string guild = dpytest.get_config().guilds[0] old_message = IntroCog.get_guild_welcome_message(guild.id) new_message = "".join(random.choice(string.ascii_letters) for _ in range(1800)) msg_mock = dpytest.back.make_message('y', dpytest.get_config().members[0], dpytest.get_config().channels[0]) with mock.patch('cogs.IntroCog.wait_for_message', mock.AsyncMock(return_value=msg_mock)): await dpytest.message(KoalaBot.COMMAND_PREFIX + "update_welcome_message " + new_message) dpytest.verify_message("Your welcome message is too long to send, sorry. The maximum character limit is 1600.") dpytest.verify_message(assert_nothing=True) assert DBManager.fetch_guild_welcome_message(guild.id) != new_message
async def test_add_mod_channel(tf_cog): with session_manager() as session: channel = dpytest.backend.make_text_channel( name="TestChannel", guild=dpytest.get_config().guilds[0]) dpytest.get_config().channels.append(channel) await dpytest.message(koalabot.COMMAND_PREFIX + "setupModChannel " + str(channel.id)) assert_embed = create_new_mod_channel_embed(channel) assert dpytest.verify().message().embed(embed=assert_embed) cleanup(dpytest.get_config().guilds[0].id, tf_cog, session)
async def test_custom_colour_no_allowed_role(): with pytest.raises(commands.CheckFailure): await dpytest.message(koalabot.COMMAND_PREFIX + "custom_colour ab1234") assert "KoalaBot[0xAB1234]" not in [role.name for role in dpytest.get_config().guilds[0].roles] assert "KoalaBot[0xAB1234]" not in [role.name for role in dpytest.get_config().members[0].roles] assert dpytest.verify().message().content("You don't have the required role to use this command.") assert dpytest.verify().message().nothing() with pytest.raises(commands.CheckFailure): await dpytest.message(koalabot.COMMAND_PREFIX + "custom_colour no") assert "KoalaBot[0xAB1234]" not in [role.name for role in dpytest.get_config().guilds[0].roles] assert dpytest.verify().message().content("You don't have the required role to use this command.") assert dpytest.verify().message().nothing()
async def test_send_welcome_message_cancelled(): msg_mock = dpytest.back.make_message('n', dpytest.get_config().members[0], dpytest.get_config().channels[0]) with mock.patch('discord.client.Client.wait_for', mock.AsyncMock(return_value=msg_mock)): await dpytest.message(koalabot.COMMAND_PREFIX + "send_welcome_message") assert dpytest.verify().message().content( "This will DM 1 people. Are you sure you wish to do this? Y/N") assert dpytest.verify().message().content( "Okay, I won't send out the welcome message then.") assert dpytest.verify().message().nothing()
async def test_prune_member_old_colour_roles(num_members, role_colour_cog): guild: discord.Guild = dpytest.get_config().guilds[0] colour_role = (await make_list_of_custom_colour_roles(guild, 1))[0] test_members = [] for i in range(num_members): member: discord.Member = await dpytest.member_join(name=f"TestMemberWithRole{i}", discrim=i + 1) await member.add_roles(colour_role) test_members.append(member) val = await role_colour_cog.prune_members_old_colour_roles(dpytest.get_config().members) assert val for member in dpytest.get_config().members: assert colour_role not in member.roles
async def test_custom_colour_valid(): guild: discord.Guild = dpytest.get_config().guilds[0] role = (await make_list_of_roles(guild, 1))[0] DBManager.add_colour_change_role_perms(guild.id, role.id) member: discord.Member = dpytest.get_config().members[0] await member.add_roles(role) await dpytest.message(koalabot.COMMAND_PREFIX + "custom_colour e34a21", member=0) colour_role = discord.utils.get(guild.roles, name=f"KoalaBot[0xE34A21]") assert dpytest.verify().message().content( f"Your new custom role colour is #E34A21, with the role {colour_role.mention}") assert dpytest.verify().message().nothing() assert "KoalaBot[0xE34A21]" in [role.name for role in guild.roles] assert "KoalaBot[0xE34A21]" in [role.name for role in member.roles]
async def test_remove_team_from_twitch_alert_wrong_guild(twitch_cog): guild = dpytest.backend.make_guild(name="TestGuild") channel = dpytest.backend.make_text_channel(name="TestChannel", guild=guild) dpytest.get_config().guilds.append(guild) dpytest.get_config().channels.append(channel) member = await dpytest.member_join(1, name="TestUser", discrim=1) await dpytest.member_join(1, dpytest.get_config().client.user) await dpytest.message( f"{KoalaBot.COMMAND_PREFIX}remove_team_from_twitch_alert {dpytest.get_config().channels[0].id} monstercat", channel=-1, member=member) dpytest.verify_embed( embed=TwitchAlert.error_embed("The channel ID provided is either invalid, or not in this server."))
async def test_profile(database): await message("^register") await empty_queue() member = get_config().members[0] member1 = get_config().members[1] await message("^profile") verify_embed() await message(f"^profile {str(member)}") verify_embed() with pytest.raises(derrors.NotRegistered): await message(f"^profile {str(member1)}")
async def test_send_welcome_message(): msg_mock = dpytest.back.make_message('y', dpytest.get_config().members[0], dpytest.get_config().channels[0]) with mock.patch('discord.client.Client.wait_for', mock.AsyncMock(return_value=msg_mock)): await dpytest.message(koalabot.COMMAND_PREFIX + "send_welcome_message") assert dpytest.verify().message().content( "This will DM 1 people. Are you sure you wish to do this? Y/N") assert dpytest.verify().message().content( "Okay, sending out the welcome message now.") assert dpytest.verify().message().content( f"{DEFAULT_WELCOME_MESSAGE}\r\n{BASE_LEGAL_MESSAGE}")
async def test_filter_new_word_correct_database(tf_cog): old = len( tf_cog.tf_database_manager.database_manager.db_execute_select( f"SELECT filtered_text FROM TextFilter WHERE filtered_text = 'no';" )) await dpytest.message(KoalaBot.COMMAND_PREFIX + "filter_word no", channel=dpytest.get_config().guilds[0].channels[0]) assertFilteredConfirmation("no", "banned") assert len( tf_cog.tf_database_manager.database_manager.db_execute_select( f"SELECT filtered_text FROM TextFilter WHERE filtered_text = 'no';" )) == old + 1 cleanup(dpytest.get_config().guilds[0].id, tf_cog)
async def test_cancel_update_welcome_message(): guild = dpytest.get_config().guilds[0] old_message = IntroCog.get_guild_welcome_message(guild.id) new_message = "this is a non default message" msg_mock = dpytest.back.make_message('n', dpytest.get_config().members[0], dpytest.get_config().channels[0]) with mock.patch('cogs.IntroCog.wait_for_message', mock.AsyncMock(return_value=msg_mock)): await dpytest.message(KoalaBot.COMMAND_PREFIX + "update_welcome_message " + new_message) dpytest.verify_message(f"""Your current welcome message is:\n\r{old_message}""") dpytest.verify_message(f"""Your new welcome message will be:\n\r{new_message}\n\r{IntroCog.BASE_LEGAL_MESSAGE}""" + """\n\rWould you like to update the message? Y/N?""") dpytest.verify_message("Okay, I won't update the welcome message then.") dpytest.verify_message(assert_nothing=True) assert DBManager.fetch_guild_welcome_message(guild.id) != new_message
async def test_add_team_to_twitch_alert_wrong_guild(twitch_cog): # Creates guild and channels and adds user and bot guild = dpytest.backend.make_guild(name="TestGuild") channel = dpytest.backend.make_text_channel(name="TestChannel", guild=guild) dpytest.get_config().guilds.append(guild) dpytest.get_config().channels.append(channel) member = await dpytest.member_join(-1, name="TestUser", discrim=1) await dpytest.member_join(-1, dpytest.get_config().client.user) # Creates Twitch Alert await dpytest.message( f"{KoalaBot.COMMAND_PREFIX}add_team_to_twitch_alert {dpytest.get_config().channels[0].id} faze ", channel=-1, member=member) dpytest.verify_embed( embed=TwitchAlert.error_embed("The channel ID provided is either invalid, or not in this server."))
async def test_productivitywar(): member = get_config().members[0] member1 = get_config().members[1] await message("^pw") verify_message() await message("^pw end") verify_message( "There's currently no PW going on. Would you like to **create** one?") await message("^pw join") verify_message("No PW to join. Maybe you want to **create** one?") await message("^pw leave") verify_message("No PW to leave. Maybe you want to **create** one?") await message("^pw create") verify_message("Creating a new PW.") await message("^pw create") verify_message( "There's already a PW going on. Would you like to **join**?") await message("^pw join") verify_message("You're already in this PW.") await message("^pw leave", member=1) verify_message("You aren't in the PW! Would you like to **join**?") await message("^pw join", member=1) verify_message(f"User {member1.display_name} joined the PW.") await message("^pw start") verify_message("Starting PW") await message("^pw leave", member=1) verify_message(f"User {member1.display_name} left the PW.") await message("^pw leave", member=1) verify_message( f"You've already left this PW! Are you going to **end** it?") await message("^pw leave") verify_message(f"User {member.display_name} left the PW.") verify_message("Ending PW.") verify_embed() await message("^pw create") verify_message() await message("^pw end") verify_message("Deleting un-started PW.") await message("^pw create") verify_message() await message("^pw start") verify_message() await message("^pw end") verify_message("Ending PW.") verify_embed()
async def test_filter_new_word_correct_database(tf_cog): with session_manager() as session: old = len( session.execute( select(TextFilter.filtered_text).filter_by( filtered_text="no")).all()) await dpytest.message( koalabot.COMMAND_PREFIX + "filter_word no", channel=dpytest.get_config().guilds[0].channels[0]) assert_filtered_confirmation("no", "banned") assert len( session.execute( select(TextFilter.filtered_text).filter_by( filtered_text="no")).all()) == old + 1 cleanup(dpytest.get_config().guilds[0].id, tf_cog, session)
async def test_confirm(): test_config = dpytest.get_config() guild = test_config.guilds[0] member = guild.members[0] role = dpytest.back.make_role("testRole", guild, id_num=555) db_manager.db_execute_commit( f"INSERT INTO roles VALUES ({guild.id}, 555, 'egg.com')") db_manager.db_execute_commit( f"INSERT INTO non_verified_emails VALUES ({member.id}, '*****@*****.**', 'testtoken')" ) dm = await member.create_dm() await dpytest.message(KoalaBot.COMMAND_PREFIX + "confirm testtoken", dm) verified = db_manager.db_execute_select( f"SELECT * FROM verified_emails WHERE u_id={member.id} AND email='*****@*****.**'" ) exists = db_manager.db_execute_select( f"SELECT * FROM non_verified_emails WHERE u_id={member.id} and email='*****@*****.**'" ) assert verified assert not exists await asyncio.sleep(0.5) assert role in member.roles dpytest.verify_message("Your email has been verified, thank you") db_manager.db_execute_commit(f"DELETE FROM roles WHERE s_id={guild.id}") db_manager.db_execute_commit( f"DELETE FROM verified_emails WHERE u_id={member.id}")
def setup(testlos_m): global dev, devmess dev = backend.make_member( backend.make_user("DevUser", "0001", id_num=testlos.DEVS[0]), get_config().guilds[0] ) devmess = functools.partial(message, member=dev)
async def test_master_nick(): await devmess("^master_nick Newnick") verify_message() for guild in get_config().guilds: assert guild.me.nick == "Newnick"