3
from typing import Dict, Union
4
from unittest import mock
8
from disnake import AllowedMentions, Message, MessageType, Object
11
def test_classmethod_none() -> None:
12
none = AllowedMentions.none()
13
assert none.everyone is False
14
assert none.roles is False
15
assert none.users is False
16
assert none.replied_user is False
19
def test_classmethod_all() -> None:
20
all_mentions = AllowedMentions.all()
21
assert all_mentions.everyone is True
22
assert all_mentions.roles is True
23
assert all_mentions.users is True
24
assert all_mentions.replied_user is True
27
@pytest.mark.parametrize(
30
(AllowedMentions(), {"parse": ["everyone", "users", "roles"], "replied_user": True}),
31
(AllowedMentions.all(), {"parse": ["everyone", "users", "roles"], "replied_user": True}),
32
(AllowedMentions(everyone=False), {"parse": ["users", "roles"], "replied_user": True}),
34
AllowedMentions(users=[Object(x) for x in [123, 456, 789]]),
35
{"parse": ["everyone", "roles"], "replied_user": True, "users": [123, 456, 789]},
39
users=[Object(x) for x in [123, 456, 789]],
40
roles=[Object(x) for x in [123, 456, 789]],
43
"parse": ["everyone"],
45
"users": [123, 456, 789],
46
"roles": [123, 456, 789],
49
(AllowedMentions.none(), {"parse": []}),
52
def test_to_dict(am: AllowedMentions, expected: Dict[str, Union[bool, list]]) -> None:
53
assert expected == am.to_dict()
56
@pytest.mark.parametrize(
57
("og", "to_merge", "expected"),
59
(AllowedMentions.none(), AllowedMentions.none(), AllowedMentions.none()),
60
(AllowedMentions.none(), AllowedMentions(), AllowedMentions.none()),
61
(AllowedMentions.all(), AllowedMentions(), AllowedMentions.all()),
62
(AllowedMentions(), AllowedMentions(), AllowedMentions()),
63
(AllowedMentions.all(), AllowedMentions.none(), AllowedMentions.none()),
65
AllowedMentions(everyone=False),
66
AllowedMentions(users=True),
67
AllowedMentions(everyone=False, users=True),
70
AllowedMentions(users=[Object(x) for x in [123, 456, 789]]),
71
AllowedMentions(users=False),
72
AllowedMentions(users=False),
76
def test_merge(og: AllowedMentions, to_merge: AllowedMentions, expected: AllowedMentions) -> None:
77
merged = og.merge(to_merge)
79
assert expected.everyone is merged.everyone
80
assert expected.users is merged.users
81
assert expected.roles is merged.roles
82
assert expected.replied_user is merged.replied_user
85
def test_from_message() -> None:
87
msg = mock.NonCallableMock()
88
msg.mention_everyone = True
89
users = [Object(x) for x in [123, 456, 789]]
91
roles = [Object(x) for x in [123, 456, 789]]
92
msg.role_mentions = roles
95
am = AllowedMentions.from_message(msg)
97
assert am.everyone is True
99
assert am.users == users
100
assert am.users is not users
102
assert am.roles == roles
103
assert am.roles is not roles
105
assert am.replied_user is False
108
def test_from_message_replied_user() -> None:
109
message = mock.Mock(Message)
111
message.mentions = [author]
112
assert AllowedMentions.from_message(message).replied_user is False
114
message.type = MessageType.reply
115
assert AllowedMentions.from_message(message).replied_user is False
117
resolved = mock.Mock(Message, author=author)
118
message.reference = mock.Mock(resolved=resolved)
119
assert AllowedMentions.from_message(message).replied_user is True