class TestEmoji: @pytest.mark.parametrize( ("input", "output"), [ ("12345", emojis.CustomEmoji( id=snowflakes.Snowflake(12345), name=None, is_animated=None)), ("<:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=False)), ("<bar:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=False)), ("<a:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=True)), ("\N{OK HAND SIGN}", emojis.UnicodeEmoji(name="\N{OK HAND SIGN}")), ( "\N{REGIONAL INDICATOR SYMBOL LETTER G}\N{REGIONAL INDICATOR SYMBOL LETTER B}", emojis.UnicodeEmoji( name= "\N{REGIONAL INDICATOR SYMBOL LETTER G}\N{REGIONAL INDICATOR SYMBOL LETTER B}" ), ), ], ) def test_parse(self, input, output): assert emojis.Emoji.parse(input) == output
class TestCustomEmoji: @pytest.fixture() def emoji(self): return emojis.CustomEmoji(id=3213452, name="ok", is_animated=False) def test_filename_property(self, emoji): assert emoji.filename == "3213452.png" def test_filename_property_when_animated(self, emoji): emoji.is_animated = True assert emoji.filename == "3213452.gif" def test_url_name_property(self, emoji): assert emoji.url_name == "ok:3213452" def test_mention_property(self, emoji): assert emoji.mention == "<:ok:3213452>" def test_mention_property_when_animated(self, emoji): emoji.is_animated = True assert emoji.mention == "<a:ok:3213452>" def test_url_property(self, emoji): assert emoji.url == "https://cdn.discordapp.com/emojis/3213452.png" def test_str_operator_when_populated_name(self): emoji = emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="peepoSad", is_animated=True) assert str(emoji) == emoji.mention @pytest.mark.parametrize( ("input", "output"), [ ("<:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=False)), ("<bar:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=False)), ("<a:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=True)), ], ) def test_parse(self, input, output): assert emojis.CustomEmoji.parse(input) == output def test_parse_unhappy_path(self): with pytest.raises(ValueError, match="Expected an emoji mention"): emojis.CustomEmoji.parse("xxx")
class TestReactionDeleteEmojiEvent: def test_is_for_emoji_when_custom_emoji_matches(self): event = hikari_test_helpers.mock_class_namespace( reaction_events.ReactionDeleteEmojiEvent, emoji_id=332223333)() assert event.is_for_emoji( emojis.CustomEmoji(id=332223333, name=None, is_animated=True)) def test_is_for_emoji_when_unicode_emoji_matches(self): event = hikari_test_helpers.mock_class_namespace( reaction_events.ReactionDeleteEmojiEvent, emoji_name="🌲e")() assert event.is_for_emoji(emojis.UnicodeEmoji("🌲e")) @pytest.mark.parametrize( ("emoji_id", "emoji_name", "emoji"), [ (None, "heeei", emojis.CustomEmoji(name=None, id=541123, is_animated=False)), (1233211, None, emojis.UnicodeEmoji("no eeeu")), ], ) def test_is_for_emoji_when_wrong_emoji_type(self, emoji_id, emoji_name, emoji): event = hikari_test_helpers.mock_class_namespace( reaction_events.ReactionDeleteEmojiEvent, emoji_id=emoji_id, emoji_name=emoji_name)() assert event.is_for_emoji(emoji) is False @pytest.mark.parametrize( ("emoji_id", "emoji_name", "emoji"), [ (None, "dsahi", emojis.UnicodeEmoji("bye321")), (12331231, None, emojis.CustomEmoji(id=121233312123, name=None, is_animated=False)), ], ) def test_is_for_emoji_when_emoji_miss_match(self, emoji_id, emoji_name, emoji): event = hikari_test_helpers.mock_class_namespace( reaction_events.ReactionDeleteEmojiEvent, emoji_id=emoji_id, emoji_name=emoji_name)() assert event.is_for_emoji(emoji) is False
class TestReactionDeleteEvent: def test_is_for_emoji_when_custom_emoji_matches(self): event = hikari_test_helpers.mock_class_namespace( reaction_events.ReactionDeleteEvent, emoji_id=333)() assert event.is_for_emoji( emojis.CustomEmoji(id=333, name=None, is_animated=True)) def test_is_for_emoji_when_unicode_emoji_matches(self): event = hikari_test_helpers.mock_class_namespace( reaction_events.ReactionDeleteEvent, emoji_name="e")() assert event.is_for_emoji(emojis.UnicodeEmoji("e")) @pytest.mark.parametrize( ("emoji_id", "emoji_name", "emoji"), [ (None, "hasdi", emojis.CustomEmoji(name=None, id=3123, is_animated=False)), (534123, None, emojis.UnicodeEmoji("nodfgdu")), ], ) def test_is_for_emoji_when_wrong_emoji_type(self, emoji_id, emoji_name, emoji): event = hikari_test_helpers.mock_class_namespace( reaction_events.ReactionDeleteEvent, emoji_id=emoji_id, emoji_name=emoji_name)() assert event.is_for_emoji(emoji) is False @pytest.mark.parametrize( ("emoji_id", "emoji_name", "emoji"), [ (None, "hfdasi", emojis.UnicodeEmoji("bgye")), (54123, None, emojis.CustomEmoji(id=34123, name=None, is_animated=False)), ], ) def test_is_for_emoji_when_emoji_miss_match(self, emoji_id, emoji_name, emoji): event = hikari_test_helpers.mock_class_namespace( reaction_events.ReactionDeleteEvent, emoji_id=emoji_id, emoji_name=emoji_name)() assert event.is_for_emoji(emoji) is False
class TestCustomEmoji: def test_str_operator_when_populated_name(self): emoji = emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="peepoSad", is_animated=True) assert str(emoji) == "peepoSad" def test_str_operator_when_name_is_None(self): emoji = emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name=None, is_animated=True) assert str(emoji) == "Unnamed emoji ID 12345" @pytest.mark.parametrize( ("input", "output"), [ ("12345", emojis.CustomEmoji( id=snowflakes.Snowflake(12345), name=None, is_animated=None)), ("<:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=False)), ("<bar:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=False)), ("<a:foo:12345>", emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="foo", is_animated=True)), ], ) def test_parse(self, input, output): assert emojis.CustomEmoji.parse(input) == output def test_parse_unhappy_path(self): with pytest.raises(ValueError, match="Expected an emoji ID or emoji mention"): emojis.CustomEmoji.parse("xxx")
def test_str_operator_when_name_is_None(self): emoji = emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name=None, is_animated=True) assert str(emoji) == "Unnamed emoji ID 12345"
def test_str_operator_when_populated_name(self): emoji = emojis.CustomEmoji(id=snowflakes.Snowflake(12345), name="peepoSad", is_animated=True) assert str(emoji) == "peepoSad"
class Test_SelectOptionBuilder: @pytest.fixture() def option(self): return special_endpoints._SelectOptionBuilder(menu=mock.Mock(), label="ok", value="ok2") def test_label_property(self, option): assert option.label == "ok" def test_value_property(self, option): assert option.value == "ok2" def test_emoji_property(self, option): option._emoji = 123321 assert option.emoji == 123321 def test_set_description(self, option): assert option.set_description("a desk") is option assert option.description == "a desk" @pytest.mark.parametrize( "emoji", ["unicode", emojis.UnicodeEmoji("unicode")]) def test_set_emoji_with_unicode_emoji(self, option, emoji): result = option.set_emoji(emoji) assert result is option assert option._emoji == emoji assert option._emoji_id is undefined.UNDEFINED assert option._emoji_name == "unicode" @pytest.mark.parametrize("emoji", [ emojis.CustomEmoji(name="ok", id=34123123, is_animated=False), 34123123 ]) def test_set_emoji_with_custom_emoji(self, option, emoji): result = option.set_emoji(emoji) assert result is option assert option._emoji == emoji assert option._emoji_id == "34123123" assert option._emoji_name is undefined.UNDEFINED def test_set_emoji_with_undefined(self, option): result = option.set_emoji(undefined.UNDEFINED) assert result is option assert option._emoji_id is undefined.UNDEFINED assert option._emoji_name is undefined.UNDEFINED assert option._emoji is undefined.UNDEFINED def test_set_is_default(self, option): assert option.set_is_default(True) is option assert option.is_default is True def test_add_to_menu(self, option): assert option.add_to_menu() is option._menu option._menu.add_raw_option.assert_called_once_with(option) def test_build_with_custom_emoji(self, option): result = (special_endpoints._SelectOptionBuilder( label="ok", value="ok2", menu=object()).set_is_default( True).set_emoji(123312).set_description("very").build()) assert result == { "label": "ok", "value": "ok2", "default": True, "emoji": { "id": "123312" }, "description": "very", } def test_build_with_unicode_emoji(self, option): result = (special_endpoints._SelectOptionBuilder( label="ok", value="ok2", menu=object()).set_is_default( True).set_emoji("hi").set_description("very").build()) assert result == { "label": "ok", "value": "ok2", "default": True, "emoji": { "name": "hi" }, "description": "very", } def test_build_partial(self, option): result = special_endpoints._SelectOptionBuilder(label="ok", value="ok2", menu=object()).build() assert result == {"label": "ok", "value": "ok2", "default": False}
class Test_ButtonBuilder: @pytest.fixture() def button(self): return special_endpoints._ButtonBuilder( container=mock.Mock(), style=messages.ButtonStyle.DANGER, custom_id="sfdasdasd", url="hi there", emoji=543123, emoji_id="56554456", emoji_name="hi there", label="a lebel", is_disabled=True, ) def test_style_property(self, button): assert button.style is messages.ButtonStyle.DANGER def test_emoji_property(self, button): assert button.emoji == 543123 @pytest.mark.parametrize( "emoji", ["unicode", emojis.UnicodeEmoji("unicode")]) def test_set_emoji_with_unicode_emoji(self, button, emoji): result = button.set_emoji(emoji) assert result is button assert button._emoji == emoji assert button._emoji_id is undefined.UNDEFINED assert button._emoji_name == "unicode" @pytest.mark.parametrize("emoji", [ emojis.CustomEmoji(name="ok", id=34123123, is_animated=False), 34123123 ]) def test_set_emoji_with_custom_emoji(self, button, emoji): result = button.set_emoji(emoji) assert result is button assert button._emoji == emoji assert button._emoji_id == "34123123" assert button._emoji_name is undefined.UNDEFINED def test_set_emoji_with_undefined(self, button): result = button.set_emoji(undefined.UNDEFINED) assert result is button assert button._emoji_id is undefined.UNDEFINED assert button._emoji_name is undefined.UNDEFINED assert button._emoji is undefined.UNDEFINED def test_set_label(self, button): assert button.set_label("hi hi") is button assert button.label == "hi hi" def test_set_is_disabled(self, button): assert button.set_is_disabled(False) assert button.is_disabled is False def test_build(self): result = special_endpoints._ButtonBuilder( container=object(), style=messages.ButtonStyle.DANGER, url=undefined.UNDEFINED, emoji_id=undefined.UNDEFINED, emoji_name="emoji_name", label="no u", custom_id="ooga booga", is_disabled=True, ).build() assert result == { "type": messages.ComponentType.BUTTON, "style": messages.ButtonStyle.DANGER, "emoji": { "name": "emoji_name" }, "label": "no u", "custom_id": "ooga booga", "disabled": True, } def test_build_without_optional_fields(self): result = special_endpoints._ButtonBuilder( container=object(), style=messages.ButtonStyle.LINK, url="OK", emoji_id="123321", emoji_name=undefined.UNDEFINED, label=undefined.UNDEFINED, custom_id=undefined.UNDEFINED, is_disabled=False, ).build() assert result == { "type": messages.ComponentType.BUTTON, "style": messages.ButtonStyle.LINK, "emoji": { "id": "123321" }, "disabled": False, "url": "OK", } def test_add_to_container(self): mock_container = mock.Mock() button = special_endpoints._ButtonBuilder( container=mock_container, style=messages.ButtonStyle.DANGER, url=undefined.UNDEFINED, emoji_id=undefined.UNDEFINED, emoji_name="emoji_name", label="no u", custom_id="ooga booga", is_disabled=True, ) assert button.add_to_container() is mock_container mock_container.add_component.assert_called_once_with(button)
"name": "we are numberr", "description": "oner", "options": [] } @pytest.mark.parametrize("emoji", ["UNICORN", emojis.UnicodeEmoji("UNICORN")]) def test__build_emoji_with_unicode_emoji(emoji): result = special_endpoints._build_emoji(emoji) assert result == (undefined.UNDEFINED, "UNICORN") @pytest.mark.parametrize("emoji", [ snowflakes.Snowflake(54123123), 54123123, emojis.CustomEmoji(id=54123123, name=None, is_animated=None) ]) def test__build_emoji_with_custom_emoji(emoji): result = special_endpoints._build_emoji(emoji) assert result == ("54123123", undefined.UNDEFINED) def test__build_emoji_when_undefined(): assert special_endpoints._build_emoji( undefined.UNDEFINED) == (undefined.UNDEFINED, undefined.UNDEFINED) class Test_ButtonBuilder: @pytest.fixture() def button(self):
def test_is_for_emoji_when_custom_emoji_matches(self): event = hikari_test_helpers.mock_class_namespace(reaction_events.ReactionDeleteEvent, emoji_id=333)() assert event.is_for_emoji(emojis.CustomEmoji(id=333, name=None, is_animated=True))
def _process_known_custom_emoji(emoji: emojis.Emoji, /) -> emojis.Emoji: # For the sake of equality checks we need to ensure we're handling CustomEmoji rather than KnownCustomEmoji if isinstance(emoji, emojis.KnownCustomEmoji): return emojis.CustomEmoji(id=emoji.id, name=emoji.name, is_animated=emoji.is_animated) return emoji
def emoji(self): return emojis.CustomEmoji(id=3213452, name="ok", is_animated=False)