Projeto do Agent Contas ORACLE
This commit is contained in:
85
tests/migration/test_dispute_actions_remaining_parity.py
Normal file
85
tests/migration/test_dispute_actions_remaining_parity.py
Normal file
@@ -0,0 +1,85 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from app.domain.contas.workflow_actions import build_contas_workflow_actions
|
||||
|
||||
|
||||
class Client:
|
||||
def __init__(self):
|
||||
self.sms_args=None; self.status_payload=None; self.tracking_payload=None; self.protocol_payload=None
|
||||
self.fail_protocol=False; self.fail_status=False
|
||||
def sms(self, msisdn, message, **ctx):
|
||||
self.sms_args=(msisdn,message,ctx)
|
||||
return {"resource_url":"http://sms/mock","_transport":{"attempts":[{"api_url":"http://mock/sms","status_code":200,"latency_ms":1}]}}
|
||||
def status_sr(self,payload):
|
||||
self.status_payload=payload
|
||||
if self.fail_status: raise RuntimeError("status fail")
|
||||
return {"ok":True,"_transport":{"attempts":[{"api_url":"http://mock/status","status_code":200,"latency_ms":1}]}}
|
||||
def tracking(self,payload): self.tracking_payload=payload; return {"ok":True}
|
||||
def abrir_protocolo(self,payload):
|
||||
self.protocol_payload=payload
|
||||
if self.fail_protocol: raise RuntimeError("gateway indisponivel")
|
||||
return {"interactionProtocol":"CCM-1"}
|
||||
|
||||
class Service:
|
||||
def __init__(self): self.client=Client()
|
||||
|
||||
|
||||
def test_sms_usa_barcode_titular_e_payload_padrao():
|
||||
s=Service(); a=build_contas_workflow_actions(s).get("enviar_sms")
|
||||
out=a({"msisdn":"15981110643"},{"input":{"msisdn":"11964200059"},"vars":{"abrir_contestacao_cliente":{"barcode":"3419179001"}}})
|
||||
assert out["success"] is True
|
||||
msisdn,message,ctx=s.client.sms_args
|
||||
assert msisdn == "15981110643"
|
||||
assert message == "Codigo do boleto: 3419179001"
|
||||
assert ctx["sender_name"] == "TIM Brasil"
|
||||
assert ctx["long_url"] == "https://meutim.com.br"
|
||||
assert out["sms_not_send_error"] is False
|
||||
|
||||
|
||||
def test_sms_falha_nao_interrompe_fluxo_e_marca_flag():
|
||||
s=Service()
|
||||
def fail(*args,**kwargs): raise RuntimeError("sms fail")
|
||||
s.client.sms=fail
|
||||
a=build_contas_workflow_actions(s).get("enviar_sms")
|
||||
out=a({"msisdn":"119"},{"input":{}})
|
||||
assert out["success"] is True
|
||||
assert out["sms_sent"] is False
|
||||
assert out["sms_not_send_error"] is True
|
||||
|
||||
|
||||
def test_conta_certa_manual_falha_api_e_best_effort():
|
||||
s=Service(); s.client.fail_protocol=True
|
||||
a=build_contas_workflow_actions(s).get("abrir_sr_conta_certa_manual")
|
||||
out=a({"msisdn":"119","social_sec_no":"123","dia_vencimento":"20"},{"input":{}})
|
||||
assert out["success"] is True
|
||||
assert out["status"] == "Encaminhado"
|
||||
assert out["sr_conta_certa_id"] == ""
|
||||
assert out["conta_certa_manual_error"] is True
|
||||
assert s.client.protocol_payload["reason3"].endswith("20")
|
||||
|
||||
|
||||
def test_status_sr_sms_path_e_tracking_completo():
|
||||
s=Service(); a=build_contas_workflow_actions(s).get("atualizar_status_sr")
|
||||
state={"input":{},"vars":{
|
||||
"registrar_protocolo":{"protocolo_id":"PRT-10"},
|
||||
"enviar_sms":{"sms_sent":True,"sms_not_send_error":False},
|
||||
"check_invoice_status":{"open_invoices":[{"invoiceId":"300","invoiceStatus":"A Vencer","issueDate":"2026-06-01","dueDate":"2026-06-20","openAmount":"349.29","amount":"349.29"}]},
|
||||
}}
|
||||
out=a({"msisdn":"119","scenario":"contestacao","current_invoice_number":"300","social_sec_no":"123.456.789-01","invoice_amount_open":"349.29","invoice_amount":"349.29"},state)
|
||||
assert out["success"] is True and out["protocol_closed"] is True
|
||||
assert out["format_text"] == "sms" and out["resolution_type"] == "new_boleto"
|
||||
assert s.client.status_payload["reason1"] == "Reclamação"
|
||||
assert s.client.status_payload["reason2"] == "Conta"
|
||||
assert s.client.status_payload["reason3"] == "Valor"
|
||||
assert s.client.tracking_payload["protocolNumber"] == "PRT-10"
|
||||
assert s.client.tracking_payload["invoiceEmissionDate"] == "2026-06-01T00:00:00.00Z"
|
||||
assert s.client.tracking_payload["invoiceExpirationDate"] == "2026-06-20T00:00:00.00Z"
|
||||
assert s.client.tracking_payload["invoiceStatus"] == "Aberto"
|
||||
|
||||
|
||||
def test_status_sr_nao_faz_tracking_de_fatura_errada():
|
||||
s=Service(); a=build_contas_workflow_actions(s).get("atualizar_status_sr")
|
||||
state={"vars":{"registrar_protocolo":{"protocolo_id":"P"},"check_invoice_status":{"open_invoices":[{"invoiceId":"OTHER"}]}}}
|
||||
out=a({"msisdn":"119","scenario":"contestacao","current_invoice_number":"TARGET"},state)
|
||||
assert out["success"] is True
|
||||
assert s.client.tracking_payload is None
|
||||
Reference in New Issue
Block a user