import argparse import json from glas_harness.channels.base import Channel, GatewayInvocation from glas_harness.channels.cli_channel import CLIChannel def test_cli_channel_is_a_channel() -> None: assert issubclass(CLIChannel, Channel) def _args(**overrides) -> argparse.Namespace: defaults = dict( harness_profile="harness.agent-dev-local@1.0.0", repo="/tmp/repo", title="t", description="d", actor="agt", project="glas-harness", no_hub=False, ) defaults.update(overrides) return argparse.Namespace(**defaults) def test_parse_invocation_maps_all_fields() -> None: channel = CLIChannel() invocation = channel.parse_invocation(_args()) assert invocation == GatewayInvocation( harness_profile="harness.agent-dev-local@1.0.0", repo="/tmp/repo", title="t", description="d", actor="agt", project="glas-harness", report_to_hub=True, ) def test_parse_invocation_inverts_no_hub_flag() -> None: channel = CLIChannel() invocation = channel.parse_invocation(_args(no_hub=True)) assert invocation.report_to_hub is False def test_render_result_matches_pre_refactor_output() -> None: channel = CLIChannel() result = {"sandbox_id": "sbx1", "tool_ok": True, "summary": {"committed": "True"}} rendered = channel.render_result(result) assert rendered == json.dumps(result, indent=2) assert json.loads(rendered) == result