"""Tests for HistoryMessage in src/type_aliases.py Per-aggregate dataclass regression-guard for the metadata_promotion_20260624 track. CONVENTION: 1-space indentation. NO COMMENTS. """ from __future__ import annotations from dataclasses import FrozenInstanceError import pytest from src.type_aliases import HistoryMessage def test_constructor_with_kwargs() -> None: msg = HistoryMessage(role="user", content="hi", name="alice") assert msg.role == "user" assert msg.content == "hi" assert msg.name == "alice" def test_field_access() -> None: msg = HistoryMessage(role="assistant", tool_call_id="call_123") assert msg.tool_call_id == "call_123" def test_frozen_raises_on_mutation() -> None: msg = HistoryMessage() with pytest.raises(FrozenInstanceError): msg.role = "user" def test_to_dict_from_dict_roundtrip() -> None: msg = HistoryMessage(role="user", content="hi", tool_call_id="c1") restored = HistoryMessage.from_dict(msg.to_dict()) assert restored == msg def test_from_dict_filters_unknown_keys() -> None: raw = {"role": "user", "content": "hi", "extra_unknown_key": "x"} msg = HistoryMessage.from_dict(raw) assert msg.role == "user" assert msg.content == "hi" def test_default_values() -> None: msg = HistoryMessage() assert msg.role == "user" assert msg.content == "" assert msg.tool_calls == () def test_hashability() -> None: msg = HistoryMessage(role="user") assert hash(msg) is not None