async def test_get_first_emoji_from_str(): await dpytest.message(KoalaBot.COMMAND_PREFIX + "store_ctx") ctx: commands.Context = utils_cog.get_last_ctx() config: dpytest.RunnerConfig = dpytest.get_config() guild: discord.Guild = config.guilds[0] guild_emoji = utils.fake_guild_emoji(guild) guild_emoji = discord.Emoji(guild=guild, state=None, data={ 'name': "AAA", 'image': None, 'id': dpyfactory.make_id(), 'require_colons': True, 'managed': False }) guild._state.store_emoji(guild=guild, data={ 'name': "AAA", 'image': None, 'id': dpyfactory.make_id(), 'require_colons': True, 'managed': False }) assert guild_emoji in guild.emojis author: discord.Member = config.members[0] channel: discord.TextChannel = guild.text_channels[0] msg: discord.Message = dpytest.back.make_message(str(guild_emoji), author, channel) result = await rfr_cog.get_first_emoji_from_str(ctx, msg.content) print(result) assert isinstance(result, discord.Emoji), msg.content assert guild_emoji == result
async def add_fake_guild_to_db(id=-1): if id == 9999: return -1 if id == -1: id = dpyfactory.make_id() DBManager.remove_guild_welcome_message(id) DBManager.db_execute_commit( f"INSERT INTO GuildWelcomeMessages (guild_id, welcome_message) VALUES ({id}, 'fake guild welcome message');") return id
async def add_fake_guild_to_db(id=-1): with session_manager() as session: if id == 9999: return -1 if id == -1: id = dpyfactory.make_id() intro_db.remove_guild_welcome_message(id) session.add(GuildWelcomeMessages(guild_id=id, welcome_message='fake guild welcome message')) session.commit() return id
def fake_guild_role(guild: discord.Guild) -> discord.Role: fake_role = discord.Role(guild=guild, state=None, data={ 'id': dpyfactory.make_id(), 'name': fake_custom_emoji_name_str(), 'mentionable': True, 'hoist': True, 'managed': False, 'colour': random.randint(0, 16777215), 'permissions': 8 }) guild._add_role(fake_role) return fake_role
def __init__(self, name="FakeUser#0001", id=-1, all_permissions=False): """ Initialises class variables and creates a random id if not specified :param name: the name of the user including identifier (e.g. KoalaBotUK#1075) :param id: The discord ID of the user :param all_permissions: If the user should be given all permissions (admin etc) or none :param roles: The role IDs of the user's roles """ self.name = name if id == -1: self.id = dpyfactory.make_id() else: self.id = id self.allPermissions = all_permissions
def fake_id_str() -> str: """ Creates a fake id string, e.g. message ID, role ID, etc. :return: """ return str(dpyfactory.make_id())
def fake_role_mention() -> str: """ Creates a fake role mention string. :return: """ return "<@&" + str(dpyfactory.make_id()) + ">"
async def test_rfr_db_functions_rfr_message_emoji_roles(): guild: discord.Guild = dpytest.get_config().guilds[0] channel: discord.TextChannel = dpytest.get_config().channels[0] msg_id = dpyfactory.make_id() DBManager.add_rfr_message(guild.id, channel.id, msg_id) guild_rfr_message = independent_get_guild_rfr_message()[0] expected_full_list: List[Tuple[int, str, int]] = [] assert independent_get_rfr_message_emoji_role() == expected_full_list # 1 unicode, 1 role fake_emoji_1 = utils.fake_unicode_emoji() fake_role_id_1 = dpyfactory.make_id() expected_full_list.append((1, fake_emoji_1, fake_role_id_1)) DBManager.add_rfr_message_emoji_role(guild_rfr_message[3], fake_emoji_1, fake_role_id_1) assert independent_get_rfr_message_emoji_role() == expected_full_list assert independent_get_rfr_message_emoji_role(1) == expected_full_list assert independent_get_rfr_message_emoji_role( guild_rfr_message[3], fake_emoji_1, fake_role_id_1) == [ DBManager.get_rfr_reaction_role(guild_rfr_message[3], fake_emoji_1, fake_role_id_1) ] # 1 unicode, 1 custom, trying to get same role fake_emoji_2 = utils.fake_custom_emoji_str_rep() DBManager.add_rfr_message_emoji_role(guild_rfr_message[3], fake_emoji_2, fake_role_id_1) assert independent_get_rfr_message_emoji_role() == expected_full_list assert independent_get_rfr_message_emoji_role( guild_rfr_message[3]) == DBManager.get_rfr_message_emoji_roles( guild_rfr_message[3]) assert [ DBManager.get_rfr_reaction_role(guild_rfr_message[3], fake_emoji_2, fake_role_id_1) ] == [None] # 2 roles, with 1 emoji trying to give both roles fake_role_id_2 = dpyfactory.make_id() DBManager.add_rfr_message_emoji_role(guild_rfr_message[3], fake_emoji_1, fake_role_id_2) assert independent_get_rfr_message_emoji_role() == expected_full_list assert independent_get_rfr_message_emoji_role( guild_rfr_message[3]) == DBManager.get_rfr_message_emoji_roles( guild_rfr_message[3]) assert [ DBManager.get_rfr_reaction_role(guild_rfr_message[3], fake_emoji_1, fake_role_id_2) ] == [None] # 2 roles, 2 emojis, 1 message. split between them fake_emoji_2 = utils.fake_custom_emoji_str_rep() fake_role_id_2 = dpyfactory.make_id() expected_full_list.append((1, fake_emoji_2, fake_role_id_2)) DBManager.add_rfr_message_emoji_role(*expected_full_list[1]) assert independent_get_rfr_message_emoji_role() == expected_full_list assert independent_get_rfr_message_emoji_role(1, fake_emoji_1) == [ (1, fake_emoji_1, fake_role_id_1) ] assert independent_get_rfr_message_emoji_role(1, fake_emoji_2) == [ (1, fake_emoji_2, fake_role_id_2) ] assert independent_get_rfr_message_emoji_role( 1, fake_emoji_1)[0][2] == DBManager.get_rfr_reaction_role_by_emoji_str( 1, fake_emoji_1) assert independent_get_rfr_message_emoji_role( 1) == DBManager.get_rfr_message_emoji_roles(1) assert independent_get_rfr_message_emoji_role( 1, role_id=fake_role_id_2)[0][2] == get_rfr_reaction_role_by_role_id( emoji_role_id=1, role_id=fake_role_id_2) # 2 roles 2 emojis, 2 messages. duplicated messages msg2_id = dpyfactory.make_id() DBManager.add_rfr_message(guild.id, channel.id, msg2_id) assert independent_get_guild_rfr_message() == [ guild_rfr_message, (guild.id, channel.id, msg2_id, 2) ] guild_rfr_message_2 = independent_get_guild_rfr_message()[1] DBManager.add_rfr_message_emoji_role(guild_rfr_message_2[3], fake_emoji_1, fake_role_id_1) DBManager.add_rfr_message_emoji_role(guild_rfr_message_2[3], fake_emoji_2, fake_role_id_2) expected_full_list.extend([ (guild_rfr_message_2[3], fake_emoji_1, fake_role_id_1), (guild_rfr_message_2[3], fake_emoji_2, fake_role_id_2) ]) assert independent_get_rfr_message_emoji_role() == expected_full_list assert independent_get_rfr_message_emoji_role( 2) == DBManager.get_rfr_message_emoji_roles(2) assert independent_get_rfr_message_emoji_role( 1) == DBManager.get_rfr_message_emoji_roles(1) # 2 roles 2 emojis 2 messages. Swapped msg3_id = dpyfactory.make_id() DBManager.add_rfr_message(guild.id, channel.id, msg3_id) assert independent_get_guild_rfr_message() == [ guild_rfr_message, (guild.id, channel.id, msg2_id, 2), (guild.id, channel.id, msg3_id, 3) ] guild_rfr_message_3 = independent_get_guild_rfr_message()[2] DBManager.add_rfr_message_emoji_role(guild_rfr_message_3[3], fake_emoji_1, fake_role_id_2) DBManager.add_rfr_message_emoji_role(guild_rfr_message_3[3], fake_emoji_2, fake_role_id_1) expected_full_list.extend([ (guild_rfr_message_3[3], fake_emoji_1, fake_role_id_2), (guild_rfr_message_3[3], fake_emoji_2, fake_role_id_1) ]) assert independent_get_rfr_message_emoji_role() == expected_full_list assert independent_get_rfr_message_emoji_role( 3) == DBManager.get_rfr_message_emoji_roles(3) assert [ x[2] for x in independent_get_rfr_message_emoji_role(emoji_raw=fake_emoji_1) ] == [ DBManager.get_rfr_reaction_role_by_emoji_str(1, fake_emoji_1), DBManager.get_rfr_reaction_role_by_emoji_str(2, fake_emoji_1), DBManager.get_rfr_reaction_role_by_emoji_str(3, fake_emoji_1) ] assert [ x[2] for x in independent_get_rfr_message_emoji_role(emoji_raw=fake_emoji_2) ] == [ DBManager.get_rfr_reaction_role_by_emoji_str(1, fake_emoji_2), DBManager.get_rfr_reaction_role_by_emoji_str(2, fake_emoji_2), DBManager.get_rfr_reaction_role_by_emoji_str(3, fake_emoji_2) ] # test deletion works from rfr message rfr_message_emoji_roles = independent_get_rfr_message_emoji_role(3) DBManager.remove_rfr_message(guild.id, channel.id, msg3_id) for row in rfr_message_emoji_roles: assert row not in independent_get_rfr_message_emoji_role( ), independent_get_guild_rfr_message() # test deleting just emoji role combos rfr_message_emoji_roles = independent_get_rfr_message_emoji_role(2) DBManager.remove_rfr_message_emoji_roles(2) for row in rfr_message_emoji_roles: assert row not in independent_get_rfr_message_emoji_role( ), independent_get_guild_rfr_message() # test deleteing specific rfr_message_emoji_roles = independent_get_rfr_message_emoji_role(1) DBManager.remove_rfr_message_emoji_role( 1, emoji_raw=rfr_message_emoji_roles[0][1]) assert (rfr_message_emoji_roles[0][0], rfr_message_emoji_roles[0][1], rfr_message_emoji_roles[0][2] ) not in independent_get_rfr_message_emoji_role() DBManager.remove_rfr_message_emoji_role( 1, role_id=rfr_message_emoji_roles[1][2]) assert (rfr_message_emoji_roles[1][0], rfr_message_emoji_roles[1][1], rfr_message_emoji_roles[1][2] ) not in independent_get_rfr_message_emoji_role()
async def test_rfr_db_functions_guild_rfr_messages(): guild: discord.Guild = dpytest.get_config().guilds[0] channel: discord.TextChannel = dpytest.get_config().channels[0] msg_id = dpyfactory.make_id() # Test when no messages exist expected_full_list: List[Tuple[int, int, int, int]] = [] assert independent_get_guild_rfr_message(guild.id, channel.id, msg_id) == expected_full_list assert independent_get_guild_rfr_message() == expected_full_list # Test on adding first message, 1 message, 1 channel, 1 guild DBManager.add_rfr_message(guild.id, channel.id, msg_id) expected_full_list.append((guild.id, channel.id, msg_id, 1)) assert independent_get_guild_rfr_message() == expected_full_list assert independent_get_guild_rfr_message( guild.id, channel.id, msg_id) == [expected_full_list[0]] # 2 guilds, 1 channel each, 2 messages guild2: discord.Guild = dpytest.back.make_guild("TestGuild2") channel2: discord.TextChannel = dpytest.back.make_text_channel( "TestGuild2Channel1", guild2) msg_id = dpyfactory.make_id() dpytest.get_config().guilds.append(guild2) DBManager.add_rfr_message(guild2.id, channel2.id, msg_id) expected_full_list.append((guild2.id, channel2.id, msg_id, 2)) assert independent_get_guild_rfr_message( guild2.id, channel2.id, msg_id) == [expected_full_list[1]] assert independent_get_guild_rfr_message( guild2.id, channel2.id, msg_id)[0] == DBManager.get_rfr_message(guild2.id, channel2.id, msg_id) assert independent_get_guild_rfr_message() == expected_full_list # 1 guild, 2 channels with 1 message each guild1channel2: discord.TextChannel = dpytest.back.make_text_channel( "TestGuild1Channel2", guild) msg_id = dpyfactory.make_id() DBManager.add_rfr_message(guild.id, guild1channel2.id, msg_id) expected_full_list.append((guild.id, guild1channel2.id, msg_id, 3)) assert independent_get_guild_rfr_message( guild.id, guild1channel2.id, msg_id) == [expected_full_list[2]] assert independent_get_guild_rfr_message( guild.id, guild1channel2.id, msg_id)[0] == DBManager.get_rfr_message(guild.id, guild1channel2.id, msg_id) assert independent_get_guild_rfr_message() == expected_full_list assert independent_get_guild_rfr_message( guild.id) == [expected_full_list[0], expected_full_list[2]] # 1 guild, 1 channel, with 2 messages msg_id = dpyfactory.make_id() DBManager.add_rfr_message(guild.id, channel.id, msg_id) expected_full_list.append((guild.id, channel.id, msg_id, 4)) assert independent_get_guild_rfr_message( guild.id, channel.id, msg_id) == [expected_full_list[3]] assert independent_get_guild_rfr_message( guild.id, channel.id, msg_id)[0] == DBManager.get_rfr_message(guild.id, channel.id, msg_id) assert independent_get_guild_rfr_message() == expected_full_list assert independent_get_guild_rfr_message(guild.id, channel.id) == [ expected_full_list[0], expected_full_list[3] ] # remove all messages guild_rfr_messages = independent_get_guild_rfr_message() for guild_rfr_message in guild_rfr_messages: assert guild_rfr_message in guild_rfr_messages DBManager.remove_rfr_message(guild_rfr_message[0], guild_rfr_message[1], guild_rfr_message[2]) assert guild_rfr_message not in independent_get_guild_rfr_message() assert independent_get_guild_rfr_message() == []