Files
agent_contas/tests/migration/test_tim_contract_parity.py

70 lines
3.2 KiB
Python

def test_protocol_v2_contract(monkeypatch):
from app.domain.contas.client import TimApiClient
monkeypatch.setenv("TIM_USE_MOCK_GATEWAY", "false")
monkeypatch.setenv("TIM_GATEWAY_MODE", "real")
monkeypatch.setenv("TIM_PROTOCOL_URL", "http://test/protocol")
client = TimApiClient()
captured = {}
def fake_request(method, url, **kwargs):
captured.update(method=method, url=url, **kwargs)
return {"interactionProtocol": "PRT-999"}
monkeypatch.setattr(client, "request", fake_request)
result = client.abrir_protocolo({
"msisdn": "11999998888",
"socialSecNo": "12345678900",
"customerId": "C1",
"customerName": "Cliente Teste",
"customerEmail": "teste@example.com",
"customerPhone1": "11999999999",
"accessType": "Pós-Pago",
"serviceRequestUserId": "USR123",
"reason1": "Vendas", "reason2": "Cancelamento", "reason3": "Retencao",
"requestStatus": "Aberto", "status": "OPENED",
"serviceRequestNotes": "Obs",
"interactionCallId": "CALL-1",
"interactionReasonId": "R1", "interactionAmount": "1", "interactionRequestSla": "SLA-1",
"directionContact": "FROM-CLIENT", "clientId": "BFFDIGITAL", "messageId": "msg-9",
"authorization_oam": "Bearer oam", "cn_field": "CN", "type_field": "TYPE",
})
assert result["interactionProtocol"] == "PRT-999"
assert captured["method"] == "POST"
body = captured["payload"]
assert body["assetId"] == "11999998888"
assert body["channel"] == "AIAGENTCR"
assert body["serviceRequest"]["reason2"] == "Cancelamento"
assert body["interaction"]["crmSource"] == "Siebel Pós"
assert body["interaction"]["source"] == "AIAGENTCR"
assert body["interaction"]["requestFlag"] is False
assert captured["headers"]["messageId"] == "msg-9"
assert captured["headers"]["Authorizationoam"] == "Bearer oam"
def test_rct_retry_policy_preserves_attempt_semantics():
from app.domain.contas.rct_policy import rct_tags_for_attempt
assert rct_tags_for_attempt("cancela_vas", 1, success=False) == ("RCT.002",)
assert rct_tags_for_attempt("cancela_vas", 2, success=True) == ("RCT.003",)
assert rct_tags_for_attempt("sgr_codbar", 1, success=False) == ("RCT.014",)
assert rct_tags_for_attempt("sgr_codbar", 2, success=True) == ("RCT.015",)
assert rct_tags_for_attempt("contestacao", 3, success=True) == ("RCT.011",)
def test_billing_analysis_anexa_transport_metadata_de_tentativas(monkeypatch):
from app.domain.contas.client import TimApiClient
client = TimApiClient(); client.mock = False
monkeypatch.setenv("TIM_DIVERGENCIA_URL", "http://tim/billingAnalysis")
def fake_request(method, url, **kwargs):
kwargs["attempt_log"].extend([
{"attempt": 1, "success": False, "status_code": 500, "latency_ms": 10, "error": "x"},
{"attempt": 2, "success": True, "status_code": 200, "latency_ms": 8},
])
return {"invoiceExplanation": "ok"}
monkeypatch.setattr(client, "request", fake_request)
result = client.billing_analysis("11999999999")
assert result["_transport"]["rct_operation"] == "base_conhecimento"
assert [a["attempt"] for a in result["_transport"]["attempts"]] == [1, 2]