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