"""Tests for ToolDefinition 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 ToolDefinition def test_constructor_with_kwargs() -> None: td = ToolDefinition(name="read_file", description="read a file", auto_start=True) assert td.name == "read_file" assert td.description == "read a file" assert td.auto_start is True def test_field_access() -> None: td = ToolDefinition(name="x", parameters={"type": "object"}) assert td.parameters == {"type": "object"} def test_frozen_raises_on_mutation() -> None: td = ToolDefinition() with pytest.raises(FrozenInstanceError): td.name = "x" def test_to_dict_from_dict_roundtrip() -> None: td = ToolDefinition(name="f", description="d", auto_start=True, parameters={"k": "v"}) restored = ToolDefinition.from_dict(td.to_dict()) assert restored == td def test_from_dict_filters_unknown_keys() -> None: raw = {"name": "x", "extra_unknown_key": "ignored"} td = ToolDefinition.from_dict(raw) assert td.name == "x" def test_default_values() -> None: td = ToolDefinition() assert td.name == "" assert td.description == "" assert td.parameters == {} assert td.auto_start is False def test_hashability_skipped_unhashable_dict_field() -> None: td = ToolDefinition() assert td.parameters == {}