"""Unit tests for the shared session activity observation contract.""" import sys import pytest from agent.session_activity import ( ACTIVITY_DESCRIPTION_MAX, ActivityProvenance, bound_activity_description, build_activity_snapshot, format_iteration_progress, normalize_activity_provenance, ) @pytest.mark.parametrize( "max_iterations, expected", [ (sys.maxsize, "iteration 3"), # AIAgent's default: unbounded, so no ceiling is shown (None, "iteration 3"), (250, "iteration 3/250"), # a real budget (e.g. delegation.max_iterations) keeps N/M ], ) def test_format_iteration_progress_hides_unbounded_ceiling(max_iterations, expected): out = format_iteration_progress(3, max_iterations) assert out == expected assert str(sys.maxsize) not in out def test_bound_activity_description_truncates(): long = "x" * (ACTIVITY_DESCRIPTION_MAX + 80) out = bound_activity_description(long) assert len(out) == ACTIVITY_DESCRIPTION_MAX assert out.endswith("…") def test_normalize_activity_provenance_defaults_to_unknown(): assert normalize_activity_provenance(None) is ActivityProvenance.UNKNOWN assert normalize_activity_provenance("") is ActivityProvenance.UNKNOWN assert normalize_activity_provenance("not-a-real-source") is ActivityProvenance.UNKNOWN assert normalize_activity_provenance("agent.activity") is ActivityProvenance.UNKNOWN assert ( normalize_activity_provenance(ActivityProvenance.AGENT_COMPRESSION) is ActivityProvenance.AGENT_COMPRESSION ) assert ( normalize_activity_provenance("agent.compression_timeout") is ActivityProvenance.AGENT_COMPRESSION_TIMEOUT ) def test_build_activity_snapshot_includes_compat_aliases(): snap = build_activity_snapshot( last_activity_at=100.0, last_activity_description="starting API call #1", last_activity_provenance=ActivityProvenance.UNKNOWN, now=110.0, extra={"api_call_count": 1}, ) assert snap["last_activity_at"] == 100.0 assert snap["last_activity_description"] == "starting API call #1" assert snap["last_activity_provenance"] == "unknown" assert snap["seconds_since_activity"] == 10.0 assert snap["last_activity_ts"] == 100.0 assert snap["last_activity_desc"] == "starting API call #1" assert snap["description"] == "starting API call #1" assert snap["api_call_count"] == 1 assert "phase" not in snap assert "last_progress_at" not in snap