Skip to content

Commit

Permalink
Test fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
FasterSpeeding committed May 16, 2021
1 parent 67f552a commit 349b4e2
Show file tree
Hide file tree
Showing 28 changed files with 285 additions and 343 deletions.
2 changes: 1 addition & 1 deletion hikari/api/event_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def dispatch(self, event: EventT_inv) -> asyncio.Future[typing.Any]:
from hikari.users import User
from hikari.snowflakes import Snowflake
@attr.define()
@attr.frozen()
class EveryoneMentionedEvent(Event):
app: RESTAware = attr.field()
Expand Down
4 changes: 0 additions & 4 deletions hikari/applications.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,10 +344,6 @@ def flags(self) -> users.UserFlag:
def id(self) -> snowflakes.Snowflake:
return self.user.id

@id.setter
def id(self, value: snowflakes.Snowflake) -> typing.NoReturn:
raise TypeError("Cannot mutate the ID of a member")

@property
def is_bot(self) -> bool:
return self.user.is_bot
Expand Down
8 changes: 2 additions & 6 deletions hikari/channels.py
Original file line number Diff line number Diff line change
Expand Up @@ -715,12 +715,8 @@ def shard_id(self) -> typing.Optional[int]:
This may be `builtins.None` if the shard count is not known.
"""
try:
shard_count = getattr(self.app, "shard_count")
assert isinstance(shard_count, int), f"shard_count attr was expected to be int, but got {shard_count}"
return snowflakes.calculate_shard_id(shard_count, self.guild_id)
except (TypeError, AttributeError, NameError):
pass
if isinstance(self.app, traits.ShardAware):
return snowflakes.calculate_shard_id(self.app, self.guild_id)

return None

Expand Down
7 changes: 3 additions & 4 deletions hikari/events/shard_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,7 @@ def shard(self) -> gateway_shard.GatewayShard:
"""


@attr_extensions.with_copy
@attr.define(kw_only=True, weakref_slot=False)
@attr.frozen(kw_only=True, weakref_slot=False)
class ShardPayload(ShardEvent):
"""Event fired for most shard events with their raw payload.
Expand All @@ -80,10 +79,10 @@ class ShardPayload(ShardEvent):
Discord and not artificial events like the `ShardStateEvent` events.
"""

app: traits.RESTAware = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
app: traits.RESTAware = attr.field()
# <<inherited docstring from Event>>.

shard: gateway_shard.GatewayShard = attr.field(metadata={attr_extensions.SKIP_DEEP_COPY: True})
shard: gateway_shard.GatewayShard = attr.field()
# <<docstring inherited from ShardEvent>>.

name: str = attr.field()
Expand Down
4 changes: 0 additions & 4 deletions hikari/guilds.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,10 +360,6 @@ def flags(self) -> users.UserFlag:
def id(self) -> snowflakes.Snowflake:
return self.user.id

@id.setter
def id(self, value: snowflakes.Snowflake) -> None:
raise TypeError("Cannot mutate the ID of a member")

@property
def is_bot(self) -> bool:
return self.user.is_bot
Expand Down
6 changes: 3 additions & 3 deletions hikari/impl/entity_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ def deserialize_application(self, payload: data_binding.JSONObject) -> applicati
for member_payload in team_payload["members"]:
team_member = application_models.TeamMember(
membership_state=application_models.TeamMembershipState(member_payload["membership_state"]),
permissions=member_payload["permissions"],
permissions=tuple(member_payload["permissions"]),
team_id=snowflakes.Snowflake(member_payload["team_id"]),
user=self.deserialize_user(member_payload["user"]),
)
Expand Down Expand Up @@ -1274,7 +1274,7 @@ def deserialize_guild_preview(self, payload: data_binding.JSONObject) -> guild_m
id=guild_id,
name=payload["name"],
icon_hash=payload["icon"],
features=[guild_models.GuildFeature(feature) for feature in payload["features"]],
features=tuple(guild_models.GuildFeature(feature) for feature in payload["features"]),
splash_hash=payload["splash"],
discovery_splash_hash=payload["discovery_splash"],
emojis=emojis,
Expand Down Expand Up @@ -1509,7 +1509,7 @@ def _set_invite_attributes(self, payload: data_binding.JSONObject) -> _InviteFie
app=self._app,
id=snowflakes.Snowflake(guild_payload["id"]),
name=guild_payload["name"],
features=[guild_models.GuildFeature(feature) for feature in guild_payload["features"]],
features=tuple(guild_models.GuildFeature(feature) for feature in guild_payload["features"]),
icon_hash=guild_payload["icon"],
splash_hash=guild_payload["splash"],
banner_hash=guild_payload["banner"],
Expand Down
6 changes: 3 additions & 3 deletions hikari/impl/event_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,10 +275,10 @@ def deserialize_guild_emojis_update_event(
old_emojis: typing.Optional[typing.Sequence[emojis_models.KnownCustomEmoji]],
) -> guild_events.EmojisUpdateEvent:
guild_id = snowflakes.Snowflake(payload["guild_id"])
emojis = [
emojis = tuple(
self._app.entity_factory.deserialize_known_custom_emoji(emoji, guild_id=guild_id)
for emoji in payload["emojis"]
]
)
return guild_events.EmojisUpdateEvent(
app=self._app, shard=shard, guild_id=guild_id, emojis=emojis, old_emojis=old_emojis
)
Expand Down Expand Up @@ -670,7 +670,7 @@ def deserialize_guild_member_chunk_event(
for m in payload["members"]
}
# Note, these IDs may be returned as ints or strings based on whether they're over a certain value.
not_found = [snowflakes.Snowflake(sn) for sn in payload["not_found"]] if "not_found" in payload else []
not_found = tuple(snowflakes.Snowflake(sn) for sn in payload["not_found"]) if "not_found" in payload else ()

if presence_payloads := payload.get("presences"):
presences = {
Expand Down
2 changes: 1 addition & 1 deletion hikari/internal/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -620,7 +620,7 @@ def build_from_entity(
typing.Mapping[snowflakes.Snowflake, "channels_.PartialChannel"]
] = undefined.UNDEFINED
if mentions.channels is not undefined.UNDEFINED:
channels = {channel_id: channel for channel_id, channel in mentions.channels.items()}
channels = dict(mentions.channels.items())

return cls(
users=users,
Expand Down
4 changes: 2 additions & 2 deletions hikari/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,14 +314,14 @@ def channels_ids(self) -> undefined.UndefinedOr[typing.Sequence[snowflakes.Snowf
if self.channels is undefined.UNDEFINED:
return undefined.UNDEFINED

return list(self.channels.keys())
return tuple(self.channels.keys())

@property
def user_ids(self) -> undefined.UndefinedOr[typing.Sequence[snowflakes.Snowflake]]:
if self.users is undefined.UNDEFINED:
return undefined.UNDEFINED

return list(self.users.keys())
return tuple(self.users.keys())

@property
def members(self) -> undefined.UndefinedOr[typing.Mapping[snowflakes.Snowflake, guilds.Member]]:
Expand Down
5 changes: 0 additions & 5 deletions hikari/snowflakes.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,6 @@ def id(self) -> Snowflake:
The snowflake ID of this object.
"""

# TODO: make immutable interface, as this is a major risk to consistent hash codes.
@id.setter
def id(self, value: Snowflake) -> None:
"""Set the ID on this entity."""

@property
def created_at(self) -> datetime.datetime:
"""When the object was created."""
Expand Down
4 changes: 2 additions & 2 deletions hikari/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,7 @@ def __str__(self) -> str:
return f"{self.username}#{self.discriminator}"


@attr.define(hash=True, kw_only=True, weakref_slot=False)
@attr.frozen(hash=True, kw_only=True, weakref_slot=False)
class UserImpl(PartialUserImpl, User):
"""Concrete implementation of user information."""

Expand All @@ -632,7 +632,7 @@ class UserImpl(PartialUserImpl, User):
"""The public flags for this user."""


@attr.define(hash=True, kw_only=True, weakref_slot=False)
@attr.frozen(hash=True, kw_only=True, weakref_slot=False)
class OwnUser(UserImpl):
"""Represents a user with extended OAuth2 information."""

Expand Down
28 changes: 16 additions & 12 deletions tests/hikari/events/test_message_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,8 +182,8 @@ def event(self):
def test_guild_id_property(self, event):
assert event.guild_id == snowflakes.Snowflake(342123123)

def test_channel_property_when_no_cache_trait(self, event):
event.app = object()
def test_channel_property_when_no_cache_trait(self):
event = message_events.GuildMessageCreateEvent(app=None, message=None, shard=None)

assert event.channel is None

Expand All @@ -195,8 +195,8 @@ def test_channel_property(self, event, guild_channel_impl):
assert result is event.app.cache.get_guild_channel.return_value
event.app.cache.get_guild_channel.assert_called_once_with(9121234)

def test_guild_property_when_no_cache_trait(self, event):
event.app = object()
def test_guild_property_when_no_cache_trait(self):
event = message_events.GuildMessageCreateEvent(app=None, message=None, shard=None)

assert event.guild is None

Expand Down Expand Up @@ -259,8 +259,8 @@ def test_author_property_when_member_none_and_uncached_but_author_defined(self,
def test_guild_id_property(self, event):
assert event.guild_id == snowflakes.Snowflake(54123123123)

def test_channel_property_when_no_cache_trait(self, event):
event.app = object()
def test_channel_property_when_no_cache_trait(self):
event = message_events.GuildMessageUpdateEvent(app=None, message=None, old_message=None, shard=None)

assert event.channel is None

Expand All @@ -272,8 +272,8 @@ def test_channel_property(self, event, guild_channel_impl):
assert result is event.app.cache.get_guild_channel.return_value
event.app.cache.get_guild_channel.assert_called_once_with(800001066)

def test_guild_property_when_no_cache_trait(self, event):
event.app = object()
def test_guild_property_when_no_cache_trait(self):
event = message_events.GuildMessageUpdateEvent(app=None, message=None, old_message=None, shard=None)

assert event.guild is None

Expand Down Expand Up @@ -326,8 +326,10 @@ def event(self):
is_bulk=True,
)

def test_channel_property_when_no_cache_trait(self, event):
event.app = object()
def test_channel_property_when_no_cache_trait(self):
event = message_events.GuildMessageDeleteEvent(
guild_id=None, channel_id=None, app=None, shard=None, message_ids=None, is_bulk=None
)

assert event.channel is None

Expand All @@ -339,8 +341,10 @@ def test_channel_property(self, event, guild_channel_impl):
assert result is event.app.cache.get_guild_channel.return_value
event.app.cache.get_guild_channel.assert_called_once_with(54213123123)

def test_guild_property_when_no_cache_trait(self, event):
event.app = object()
def test_guild_property_when_no_cache_trait(self):
event = message_events.GuildMessageDeleteEvent(
guild_id=None, channel_id=None, app=None, shard=None, message_ids=None, is_bulk=None
)

assert event.guild is None

Expand Down
27 changes: 10 additions & 17 deletions tests/hikari/events/test_shard_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ def event(self):
snowflakes.Snowflake(55): mock.Mock(),
snowflakes.Snowflake(99): mock.Mock(),
snowflakes.Snowflake(455): mock.Mock(),
snowflakes.Snowflake(55555): mock.Mock(),
},
chunk_count=1,
chunk_index=1,
Expand All @@ -47,11 +48,7 @@ def event(self):
)

def test___getitem___with_slice(self, event):
mock_member_0 = object()
mock_member_1 = object()
event.members = {1: object(), 55: object(), 99: mock_member_0, 455: object(), 5444: mock_member_1}

assert event[2:5:2] == (mock_member_0, mock_member_1)
assert event[2:5:2] == (event.members[99], event.members[55555])

def test___getitem___with_valid_index(self, event):
mock_member = object()
Expand All @@ -66,17 +63,13 @@ def test___getitem___with_invalid_index(self, event):
assert event[123]

def test___iter___(self, event):
member_0 = mock.Mock()
member_1 = mock.Mock()
member_2 = mock.Mock()

event.members = {
snowflakes.Snowflake(1): member_0,
snowflakes.Snowflake(2): member_1,
snowflakes.Snowflake(3): member_2,
}

assert list(event) == [member_0, member_1, member_2]
assert list(event) == [
event.members[1],
event.members[55],
event.members[99],
event.members[455],
event.members[55555],
]

def test___len___(self, event):
assert len(event) == 4
assert len(event) == 5
16 changes: 10 additions & 6 deletions tests/hikari/events/test_typing_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@ def event(self):
user=mock.Mock(id=456),
)

def test_channel_when_no_cache(self, event):
event.app = object()
def test_channel_when_no_cache(self):
event = typing_events.GuildTypingEvent(
channel_id=None, timestamp=None, shard=None, app=None, guild_id=None, user=None
)

assert event.channel is None

Expand All @@ -78,8 +80,10 @@ def test_channel(self, event, guild_channel_impl):
assert result is event.app.cache.get_guild_channel.return_value
event.app.cache.get_guild_channel.assert_called_once_with(123)

async def test_guild_when_no_cache(self, event):
event.app = object()
async def test_guild_when_no_cache(self):
event = typing_events.GuildTypingEvent(
channel_id=None, timestamp=None, shard=None, app=None, guild_id=None, user=None
)

assert event.guild is None

Expand Down Expand Up @@ -139,8 +143,8 @@ def event(self):
user_id=456,
)

async def test_user_when_no_cache(self, event):
event.app = object()
async def test_user_when_no_cache(self):
event = typing_events.DMTypingEvent(app=None, shard=None, user_id=None, timestamp=None, channel_id=None)

assert event.user is None

Expand Down
4 changes: 2 additions & 2 deletions tests/hikari/events/test_voice_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,6 @@ def event(self):
def test_endpoint_property(self, event):
assert event.endpoint == "wss://voice.discord.com:123"

def test_endpoint_property_when_raw_endpoint_is_None(self, event):
event.raw_endpoint = None
def test_endpoint_property_when_raw_endpoint_is_None(self):
event = voice_events.VoiceServerUpdateEvent(app=None, shard=None, guild_id=None, token=None, raw_endpoint=None)
assert event.endpoint is None
Loading

0 comments on commit 349b4e2

Please sign in to comment.