astrbbbb / tests /unit /test_astrbot_message.py
qa1145's picture
Upload 1245 files
8ede856 verified
"""Tests for AstrBotMessage and MessageMember classes."""
import time
from unittest.mock import patch
from astrbot.core.message.components import Image, Plain
from astrbot.core.platform.astrbot_message import AstrBotMessage, Group, MessageMember
from astrbot.core.platform.message_type import MessageType
class TestMessageMember:
"""Tests for MessageMember dataclass."""
def test_message_member_creation_basic(self):
"""Test creating a MessageMember with required fields."""
member = MessageMember(user_id="user123")
assert member.user_id == "user123"
assert member.nickname is None
def test_message_member_creation_with_nickname(self):
"""Test creating a MessageMember with nickname."""
member = MessageMember(user_id="user123", nickname="TestUser")
assert member.user_id == "user123"
assert member.nickname == "TestUser"
def test_message_member_str_with_nickname(self):
"""Test __str__ method with nickname."""
member = MessageMember(user_id="user123", nickname="TestUser")
result = str(member)
assert "User ID: user123" in result
assert "Nickname: TestUser" in result
def test_message_member_str_without_nickname(self):
"""Test __str__ method without nickname."""
member = MessageMember(user_id="user123")
result = str(member)
assert "User ID: user123" in result
assert "Nickname: N/A" in result
class TestGroup:
"""Tests for Group dataclass."""
def test_group_creation_basic(self):
"""Test creating a Group with required fields."""
group = Group(group_id="group123")
assert group.group_id == "group123"
assert group.group_name is None
assert group.group_avatar is None
assert group.group_owner is None
assert group.group_admins is None
assert group.members is None
def test_group_creation_with_all_fields(self):
"""Test creating a Group with all fields."""
members = [MessageMember(user_id="user1"), MessageMember(user_id="user2")]
group = Group(
group_id="group123",
group_name="Test Group",
group_avatar="http://example.com/avatar.jpg",
group_owner="owner123",
group_admins=["admin1", "admin2"],
members=members,
)
assert group.group_id == "group123"
assert group.group_name == "Test Group"
assert group.group_avatar == "http://example.com/avatar.jpg"
assert group.group_owner == "owner123"
assert group.group_admins == ["admin1", "admin2"]
assert group.members == members
def test_group_str_with_all_fields(self):
"""Test __str__ method with all fields."""
members = [MessageMember(user_id="user1", nickname="User One")]
group = Group(
group_id="group123",
group_name="Test Group",
group_avatar="http://example.com/avatar.jpg",
group_owner="owner123",
group_admins=["admin1"],
members=members,
)
result = str(group)
assert "Group ID: group123" in result
assert "Name: Test Group" in result
assert "Avatar: http://example.com/avatar.jpg" in result
assert "Owner ID: owner123" in result
assert "Admin IDs: ['admin1']" in result
assert "Members Len: 1" in result
def test_group_str_with_minimal_fields(self):
"""Test __str__ method with minimal fields."""
group = Group(group_id="group123")
result = str(group)
assert "Group ID: group123" in result
assert "Name: N/A" in result
assert "Avatar: N/A" in result
assert "Owner ID: N/A" in result
assert "Admin IDs: N/A" in result
assert "Members Len: 0" in result
assert "First Member: N/A" in result
class TestAstrBotMessage:
"""Tests for AstrBotMessage class."""
def test_astrbot_message_creation(self):
"""Test creating an AstrBotMessage."""
message = AstrBotMessage()
assert message.group is None
assert message.timestamp is not None
assert isinstance(message.timestamp, int)
def test_astrbot_message_timestamp(self):
"""Test timestamp is set on creation."""
with patch.object(time, "time", return_value=1234567890):
message = AstrBotMessage()
assert message.timestamp == 1234567890
def test_astrbot_message_all_attributes(self):
"""Test setting all attributes on AstrBotMessage."""
message = AstrBotMessage()
message.type = MessageType.FRIEND_MESSAGE
message.self_id = "bot123"
message.session_id = "session123"
message.message_id = "msg123"
message.sender = MessageMember(user_id="user123", nickname="TestUser")
message.message = [Plain(text="Hello")]
message.message_str = "Hello"
message.raw_message = {"raw": "data"}
assert message.type == MessageType.FRIEND_MESSAGE
assert message.self_id == "bot123"
assert message.session_id == "session123"
assert message.message_id == "msg123"
assert message.sender.user_id == "user123"
assert len(message.message) == 1
assert message.message_str == "Hello"
assert message.raw_message == {"raw": "data"}
def test_astrbot_message_str(self):
"""Test __str__ method."""
message = AstrBotMessage()
message.type = MessageType.FRIEND_MESSAGE
message.self_id = "bot123"
result = str(message)
assert "'type'" in result
assert "'self_id'" in result
class TestAstrBotMessageGroupId:
"""Tests for AstrBotMessage group_id property."""
def test_group_id_returns_empty_when_no_group(self):
"""Test group_id returns empty string when group is None."""
message = AstrBotMessage()
assert message.group_id == ""
def test_group_id_returns_group_id_when_group_exists(self):
"""Test group_id returns the group's id when group exists."""
message = AstrBotMessage()
message.group = Group(group_id="group123")
assert message.group_id == "group123"
def test_group_id_setter_creates_new_group(self):
"""Test group_id setter creates a new group if none exists."""
message = AstrBotMessage()
message.group_id = "new_group123"
assert message.group is not None
assert message.group.group_id == "new_group123"
def test_group_id_setter_updates_existing_group(self):
"""Test group_id setter updates existing group's id."""
message = AstrBotMessage()
message.group = Group(group_id="old_group")
message.group_id = "new_group"
assert message.group.group_id == "new_group"
def test_group_id_setter_with_none_removes_group(self):
"""Test group_id setter with None removes the group."""
message = AstrBotMessage()
message.group = Group(group_id="group123")
message.group_id = None
assert message.group is None
def test_group_id_setter_with_empty_string_removes_group(self):
"""Test group_id setter with empty string removes the group."""
message = AstrBotMessage()
message.group = Group(group_id="group123")
message.group_id = ""
assert message.group is None
class TestAstrBotMessageTypes:
"""Tests for AstrBotMessage with different message types."""
def test_friend_message_type(self):
"""Test AstrBotMessage with FRIEND_MESSAGE type."""
message = AstrBotMessage()
message.type = MessageType.FRIEND_MESSAGE
assert message.type == MessageType.FRIEND_MESSAGE
assert message.type.value == "FriendMessage"
def test_group_message_type(self):
"""Test AstrBotMessage with GROUP_MESSAGE type."""
message = AstrBotMessage()
message.type = MessageType.GROUP_MESSAGE
assert message.type == MessageType.GROUP_MESSAGE
assert message.type.value == "GroupMessage"
def test_other_message_type(self):
"""Test AstrBotMessage with OTHER_MESSAGE type."""
message = AstrBotMessage()
message.type = MessageType.OTHER_MESSAGE
assert message.type == MessageType.OTHER_MESSAGE
assert message.type.value == "OtherMessage"
class TestAstrBotMessageChain:
"""Tests for AstrBotMessage message chain."""
def test_message_chain_with_plain_text(self):
"""Test message chain with plain text."""
message = AstrBotMessage()
message.message = [Plain(text="Hello world")]
assert len(message.message) == 1
assert isinstance(message.message[0], Plain)
assert message.message[0].text == "Hello world"
def test_message_chain_with_multiple_components(self):
"""Test message chain with multiple components."""
message = AstrBotMessage()
message.message = [
Plain(text="Hello "),
Plain(text="world"),
Image(file="http://example.com/img.jpg"),
]
assert len(message.message) == 3
assert isinstance(message.message[0], Plain)
assert isinstance(message.message[1], Plain)
assert isinstance(message.message[2], Image)
def test_message_chain_empty(self):
"""Test empty message chain."""
message = AstrBotMessage()
message.message = []
assert len(message.message) == 0