"""SP39: tests for the `cyclone resubmissions status` CLI.""" from __future__ import annotations from datetime import datetime, timezone from click.testing import CliRunner from cyclone import db as cycl_db from cyclone.cli import resubmissions_status_cmd from cyclone.db import Resubmission def _seed_one(claim_id: str = "claim-1", batch_id: str = "batch-1", icn: str = "000000001") -> None: cycl_db.init_db() with cycl_db.SessionLocal()() as s: s.add(Resubmission( claim_id=claim_id, batch_id=batch_id, resubmitted_at=datetime.now(timezone.utc), source_corrected_path=f"/tmp/{claim_id}.x12", interchange_control_number=icn, group_control_number="1", )) s.commit() def _cleanup(batch_id: str) -> None: with cycl_db.SessionLocal()() as s: s.query(Resubmission).filter(Resubmission.batch_id == batch_id).delete() s.commit() def test_no_resubmissions_prints_message_and_exits_0(): cycl_db.init_db() runner = CliRunner() result = runner.invoke( resubmissions_status_cmd, ["--batch-id", "no-such-batch-zzz"], ) assert result.exit_code == 0, result.output assert "no resubmissions recorded" in result.output def test_one_resubmission_prints_status_row(): try: _seed_one(claim_id="claim-A", batch_id="batch-A") runner = CliRunner() result = runner.invoke( resubmissions_status_cmd, ["--batch-id", "batch-A"], ) assert result.exit_code == 0, result.output assert "claim-A" in result.output assert "pending_999" in result.output # no inbound ack yet assert "batch-A" in result.output finally: _cleanup("batch-A") def test_limit_truncates_output(): try: for i in range(5): _seed_one( claim_id=f"claim-L{i}", batch_id="batch-L", icn=f"00000000{i}", ) runner = CliRunner() result = runner.invoke( resubmissions_status_cmd, ["--batch-id", "batch-L", "--limit", "2"], ) assert result.exit_code == 0, result.output assert "more" in result.output # Only 2 rows printed in the table (plus 1 "(N more)" line). body_lines = [ ln for ln in result.output.splitlines() if ln.startswith("claim-L") ] assert len(body_lines) == 2 finally: _cleanup("batch-L") def test_status_reflects_paid_when_remittance_links(): """When a remittance.claim_id links to the resubmitted claim, the payment column shows 'paid'.""" try: from cyclone.db import Remittance from decimal import Decimal _seed_one(claim_id="claim-P", batch_id="batch-P") with cycl_db.SessionLocal()() as s: s.add(Remittance( id="remit-P-1", batch_id="batch-P", payer_claim_control_number="claim-P", claim_id="claim-P", status_code="1", status_label="Processed as Primary", total_charge=Decimal("100.00"), total_paid=Decimal("80.00"), adjustment_amount=Decimal("0"), claim_level_adjustment_amount=Decimal("0"), received_at=datetime.now(timezone.utc), )) s.commit() runner = CliRunner() result = runner.invoke( resubmissions_status_cmd, ["--batch-id", "batch-P"], ) assert result.exit_code == 0, result.output assert "claim-P" in result.output assert "paid" in result.output finally: from cyclone.db import Remittance as _R with cycl_db.SessionLocal()() as s: s.query(_R).filter(_R.id == "remit-P-1").delete() s.commit() _cleanup("batch-P")