"""TDD — build_unpack_payload: client-side Step 3 payload construction. UP-1 mpack_key is passed through unchanged. UP-2 branch defaults to "main" when not supplied. UP-3 head is passed through unchanged. UP-4 commits_count and objects_count default to 0 when not supplied. UP-5 All five keys are always present in the returned dict. UP-6 Counts are integers, not strings. """ from __future__ import annotations from muse.core.mpack import build_unpack_payload from muse.core.types import blob_id _KEY = blob_id(b"some mpack bytes") _HEAD = blob_id(b"tip commit") def test_up1_mpack_key_passed_through() -> None: payload = build_unpack_payload(_KEY, branch="main", head=_HEAD) assert payload["mpack_key"] == _KEY def test_up2_branch_defaults_to_main() -> None: payload = build_unpack_payload(_KEY, head=_HEAD) assert payload["branch"] == "main" def test_up3_head_passed_through() -> None: payload = build_unpack_payload(_KEY, branch="dev", head=_HEAD) assert payload["head"] == _HEAD def test_up4_counts_default_to_zero() -> None: payload = build_unpack_payload(_KEY, head=_HEAD) assert payload["commits_count"] == 0 assert payload["objects_count"] == 0 def test_up5_all_keys_always_present() -> None: payload = build_unpack_payload(_KEY, head=_HEAD) assert set(payload) == {"mpack_key", "branch", "head", "commits_count", "objects_count"} def test_up6_counts_are_integers() -> None: payload = build_unpack_payload(_KEY, head=_HEAD, commits_count=3, objects_count=12) assert isinstance(payload["commits_count"], int) assert isinstance(payload["objects_count"], int) assert payload["commits_count"] == 3 assert payload["objects_count"] == 12