Files
cyclone/backend/tests/test_resubmissions_cli.py
T
2026-07-07 17:23:24 -06:00

120 lines
3.9 KiB
Python

"""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")