Пример #1
0
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
Пример #2
0
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")
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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")
Пример #6
0
 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"
Пример #7
0
 def test_str_operator_when_populated_name(self):
     emoji = emojis.CustomEmoji(id=snowflakes.Snowflake(12345),
                                name="peepoSad",
                                is_animated=True)
     assert str(emoji) == "peepoSad"
Пример #8
0
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}
Пример #9
0
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)
Пример #10
0
            "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):
Пример #11
0
    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))
Пример #12
0
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
Пример #13
0
 def emoji(self):
     return emojis.CustomEmoji(id=3213452, name="ok", is_animated=False)