118 lines
4.6 KiB
Python
118 lines
4.6 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from unittest.mock import patch
|
|
|
|
from app.domain.contas.client import TimApiClient
|
|
|
|
|
|
def _real_client() -> TimApiClient:
|
|
c = TimApiClient()
|
|
c.mock = False
|
|
return c
|
|
|
|
|
|
def test_vas_history_preserves_original_header_contract(monkeypatch):
|
|
monkeypatch.setenv("TIM_VAS_HISTORY_URL", "http://mock/servicesHistory")
|
|
monkeypatch.setenv("TIM_VAS_HISTORY_AUTH", "Basic token")
|
|
monkeypatch.setenv("TIM_VAS_HISTORY_CLIENT_ID", "TIMX")
|
|
monkeypatch.setenv("TIM_VAS_HISTORY_MESSAGE_ID", "msg-1")
|
|
c = _real_client()
|
|
with patch.object(c, "request", return_value={}) as req:
|
|
c.historico_vas("12981114135")
|
|
args, kwargs = req.call_args
|
|
assert args[:2] == ("GET", "http://mock/servicesHistory?msisdn=12981114135")
|
|
assert kwargs["headers"]["clientId"] == "TIMX"
|
|
assert kwargs["headers"]["messageId"] == "msg-1"
|
|
assert kwargs["headers"]["Authorization"] == "Basic token"
|
|
|
|
|
|
def test_contrato_uses_clientId_not_client_id(monkeypatch):
|
|
monkeypatch.setenv("TIM_CONTRATO_URL", "http://test")
|
|
monkeypatch.setenv("TIM_CONTRATO_AUTH", "Basic test")
|
|
monkeypatch.setenv("TIM_CONTRATO_CLIENT_ID", "TEST")
|
|
c = _real_client()
|
|
with patch.object(c, "request", return_value={}) as req:
|
|
c.contrato("11988888888")
|
|
args, kwargs = req.call_args
|
|
assert args[:2] == ("GET", "http://test/11988888888")
|
|
assert kwargs["headers"]["clientId"] == "TEST"
|
|
assert "client_id" not in kwargs["headers"]
|
|
assert kwargs["headers"]["Authorization"] == "Basic test"
|
|
|
|
|
|
def test_profile_full_uses_original_ClientID_header(monkeypatch):
|
|
monkeypatch.setenv("TIM_PROFILE_FULL_URL", "http://test/access/v1/info/{msisdn}")
|
|
monkeypatch.setenv("TIM_PROFILE_FULL_AUTH", "Basic token")
|
|
monkeypatch.setenv("TIM_PROFILE_FULL_CLIENT_ID", "AIAGENTCR")
|
|
c = _real_client()
|
|
with patch.object(c, "request", return_value={}) as req:
|
|
c.profile_full("5511999999999")
|
|
args, kwargs = req.call_args
|
|
assert args[:2] == ("GET", "http://test/access/v1/info/5511999999999")
|
|
assert kwargs["headers"]["ClientID"] == "AIAGENTCR"
|
|
assert kwargs["headers"]["Authorization"] == "Basic token"
|
|
|
|
|
|
def test_cancelamento_always_sends_non_empty_message_id(monkeypatch):
|
|
monkeypatch.setenv("TIM_CANCELAMENTO_URL", "http://test/cancel")
|
|
c = _real_client()
|
|
service = {"appId": "14534", "cspId": "740"}
|
|
with patch.object(c, "request", return_value={"ok": True}) as req:
|
|
c.cancelar_vas("11943896592", service, protocol="PROT-789")
|
|
_args, kwargs = req.call_args
|
|
assert kwargs["payload"]["channel"] == "AIAGENTCR"
|
|
assert kwargs["payload"]["interactionProtocol"] == "PROT-789"
|
|
assert kwargs["headers"]["messageId"]
|
|
|
|
|
|
def test_sms_preserva_sender_name_original(monkeypatch):
|
|
from app.domain.contas.client import TimApiClient
|
|
|
|
monkeypatch.setenv("TIM_USE_MOCK_GATEWAY", "false")
|
|
monkeypatch.setenv("TIM_GATEWAY_MODE", "real")
|
|
monkeypatch.setenv("TIM_SMS_URL", "http://test/sms")
|
|
monkeypatch.setenv("TIM_SMS_AUTH", "Basic static")
|
|
monkeypatch.setenv("TIM_SMS_CLIENT_ID", "CHAT")
|
|
monkeypatch.setenv("TIM_SMS_SENDER_ADDRESS", "324")
|
|
monkeypatch.delenv("TIM_SMS_SENDER_NAME", raising=False)
|
|
client = TimApiClient()
|
|
captured = {}
|
|
|
|
def fake_request(method, url, **kwargs):
|
|
captured.update({"method": method, "url": url, **kwargs})
|
|
return {"resourceURL": "http://sms/1"}
|
|
|
|
monkeypatch.setattr(client, "request", fake_request)
|
|
client.sms("11999999999", "mensagem")
|
|
assert captured["method"] == "POST"
|
|
assert captured["payload"]["senderAddress"] == "324"
|
|
assert captured["payload"]["senderName"] == "TIM Brasil"
|
|
assert captured["payload"]["longURL"] == "mensagem"
|
|
assert captured["headers"]["clientId"] == "CHAT"
|
|
assert captured["headers"]["Authorization"] == "Basic static"
|
|
|
|
|
|
def test_service_request_status_message_id_prioriza_call_id(monkeypatch):
|
|
from app.domain.contas.client import TimApiClient
|
|
|
|
monkeypatch.setenv("TIM_USE_MOCK_GATEWAY", "false")
|
|
monkeypatch.setenv("TIM_GATEWAY_MODE", "real")
|
|
monkeypatch.setenv("TIM_SERVICE_REQUEST_STATUS_URL", "http://test/sr")
|
|
client = TimApiClient()
|
|
captured = {}
|
|
|
|
def fake_request(method, url, **kwargs):
|
|
captured.update({"method": method, "url": url, **kwargs})
|
|
return {"ok": True}
|
|
|
|
monkeypatch.setattr(client, "request", fake_request)
|
|
client.status_sr({
|
|
"channel": "AIAGENTCR",
|
|
"protocolNumber": "PRT-123",
|
|
"ura_call_id": "CALL-123",
|
|
"session_id": "sess-1",
|
|
})
|
|
assert captured["payload"]["serviceRequest"]["protocolNumber"] == "PRT-123"
|
|
assert captured["headers"]["messageId"] == "CALL-123"
|