68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from yuxi.channel.domain.service.message_context import MessageContext
|
||
|
|
from yuxi.channel.domain.model.message.unified_message import UnifiedMessage
|
||
|
|
from yuxi.channel.domain.model.message.peer import Peer
|
||
|
|
|
||
|
|
|
||
|
|
class TestMessageContext:
|
||
|
|
@pytest.fixture
|
||
|
|
def sample_message(self):
|
||
|
|
return UnifiedMessage(
|
||
|
|
message_id="msg123",
|
||
|
|
channel_type="web",
|
||
|
|
sender=Peer(id="user1", name="User"),
|
||
|
|
content="Hello",
|
||
|
|
)
|
||
|
|
|
||
|
|
def test_basic_creation(self, sample_message):
|
||
|
|
ctx = MessageContext(message=sample_message)
|
||
|
|
assert ctx.message == sample_message
|
||
|
|
assert ctx.is_aborted is False
|
||
|
|
assert ctx.is_skipped is False
|
||
|
|
assert ctx.trace_id is None
|
||
|
|
|
||
|
|
def test_abort(self, sample_message):
|
||
|
|
ctx = MessageContext(message=sample_message)
|
||
|
|
ctx.abort("TEST", "test abort")
|
||
|
|
assert ctx.is_aborted is True
|
||
|
|
assert ctx.abort_code == "TEST"
|
||
|
|
assert ctx.abort_reason == "test abort"
|
||
|
|
|
||
|
|
def test_skip(self, sample_message):
|
||
|
|
ctx = MessageContext(message=sample_message)
|
||
|
|
ctx.skip("test skip")
|
||
|
|
assert ctx.is_skipped is True
|
||
|
|
assert ctx.skip_reason == "test skip"
|
||
|
|
|
||
|
|
def test_set_trace_id(self, sample_message):
|
||
|
|
ctx = MessageContext(message=sample_message)
|
||
|
|
ctx.set_trace_id("trace123")
|
||
|
|
assert ctx.trace_id == "trace123"
|
||
|
|
|
||
|
|
def test_set_headers(self, sample_message):
|
||
|
|
ctx = MessageContext(message=sample_message)
|
||
|
|
ctx.set_headers({"Authorization": "Bearer token"})
|
||
|
|
assert ctx.headers == {"Authorization": "Bearer token"}
|
||
|
|
|
||
|
|
def test_set_metadata(self, sample_message):
|
||
|
|
ctx = MessageContext(message=sample_message)
|
||
|
|
ctx.set_metadata({"key": "value"})
|
||
|
|
assert ctx.metadata == {"key": "value"}
|
||
|
|
|
||
|
|
def test_multiple_aborts(self, sample_message):
|
||
|
|
ctx = MessageContext(message=sample_message)
|
||
|
|
ctx.abort("FIRST", "first abort")
|
||
|
|
ctx.abort("SECOND", "second abort")
|
||
|
|
assert ctx.abort_code == "FIRST"
|
||
|
|
assert ctx.abort_reason == "first abort"
|
||
|
|
|
||
|
|
def test_abort_then_skip(self, sample_message):
|
||
|
|
ctx = MessageContext(message=sample_message)
|
||
|
|
ctx.abort("TEST", "test abort")
|
||
|
|
ctx.skip("test skip")
|
||
|
|
assert ctx.is_aborted is True
|
||
|
|
assert ctx.is_skipped is True
|