91 lines
4.7 KiB
Python
91 lines
4.7 KiB
Python
from pathlib import Path
|
|
|
|
from contas_mcp.servers.contas_mcp_server.discount_history_service import DiscountHistoryMockService
|
|
from app.domain.contas import ContasDomainService
|
|
from app.domain.contas.workflow_actions import build_contas_workflow_actions
|
|
|
|
|
|
FIXTURE = Path(__file__).resolve().parents[2] / "app" / "domain" / "contas" / "fixtures" / "discount_history.json"
|
|
|
|
|
|
def test_discount_history_mock_returns_structured_authoritative_reason():
|
|
service = DiscountHistoryMockService(FIXTURE)
|
|
result = service.consultar_historico_descontos(msisdn="11999999999")
|
|
assert result["success"] is True
|
|
expired = next(row for row in result["discounts"] if row["discount_status"] == "EXPIRED")
|
|
assert expired["plan_name"] == "TIM Black A 8.0"
|
|
assert expired["previous_value"] == 80.0
|
|
assert expired["current_value"] == 0.0
|
|
assert expired["termination_reason"] == "FIM_PERIODO_FIDELIDADE"
|
|
assert expired["termination_reason_description"] == "O período de fidelidade contratado foi encerrado."
|
|
|
|
|
|
def test_discount_history_mock_can_filter_plan_without_inventing_other_reason():
|
|
service = DiscountHistoryMockService(FIXTURE)
|
|
result = service.consultar_historico_descontos(msisdn="11999999999", nome_plano="CTRL")
|
|
assert result["success"] is True
|
|
assert len(result["discounts"]) == 1
|
|
assert result["discounts"][0]["discount_status"] == "ACTIVE"
|
|
assert result["discounts"][0]["termination_reason"] is None
|
|
|
|
|
|
def test_termino_desconto_formats_only_structured_discount_history_facts():
|
|
service = DiscountHistoryMockService(FIXTURE)
|
|
evidence = service.consultar_historico_descontos(msisdn="11999999999", nome_plano="TIM Black")
|
|
action = build_contas_workflow_actions(ContasDomainService()).get("formatar_capability_resposta")
|
|
result = action({"tipo": "termino_desconto", "discount_evidence": evidence}, {"input": {}})
|
|
text = result["mensagem"]
|
|
assert result["discount_reason_grounded"] is True
|
|
assert result["epistemic_status"] == "grounded_fact"
|
|
assert "TIM Black A 8.0" in text
|
|
assert "R$ 80,00" in text
|
|
assert "20/11/2025" in text
|
|
assert "O período de fidelidade contratado foi encerrado." in text
|
|
assert "FIM_PERIODO_FIDELIDADE" not in text
|
|
|
|
|
|
def test_termino_desconto_active_discount_without_reason_remains_non_conclusive():
|
|
service = DiscountHistoryMockService(FIXTURE)
|
|
evidence = service.consultar_historico_descontos(msisdn="11999999999", nome_plano="CTRL")
|
|
action = build_contas_workflow_actions(ContasDomainService()).get("formatar_capability_resposta")
|
|
result = action({"tipo": "termino_desconto", "discount_evidence": evidence}, {"input": {}})
|
|
assert result["discount_reason_grounded"] is False
|
|
assert result["epistemic_status"] == "insufficient_evidence"
|
|
assert "não informam o motivo" in result["mensagem"]
|
|
|
|
|
|
def test_discount_history_temporal_reference_matches_last_invoice_fixture():
|
|
import json
|
|
|
|
service = DiscountHistoryMockService(FIXTURE)
|
|
result = service.consultar_historico_descontos(msisdn="11999999999", nome_plano="TIM Black")
|
|
expired = result["discounts"][0]
|
|
|
|
invoice_fixture = FIXTURE.parent / "invoice_pdf_include_danfe_true.json"
|
|
invoice = json.loads(invoice_fixture.read_text(encoding="utf-8"))
|
|
summary = {row.get("desc"): row for row in invoice.get("Fatura Resumo", []) if isinstance(row, dict)}
|
|
line = invoice["1199999999"]["Planos"]["TIM Black A 8.0"]
|
|
billed_discount = next(row for row in line["descontos"] if row["desc"].startswith("Desc Fidel 80 TIM Black"))
|
|
|
|
assert result["as_of_date"] == "2025-11-20"
|
|
assert result["last_billed_period"] == summary["PERÍODO"]["period"] == "14/10 a 13/11"
|
|
assert result["last_invoice_issue_date"] == "2025-11-20"
|
|
assert summary["EMISSÃO"]["emissao"] == "20/11/2025"
|
|
assert expired["current_value"] == 0.0
|
|
assert expired["current_value_reference"] == "contract_as_of_date"
|
|
assert expired["last_billed_discount_value"] == abs(float(billed_discount["value"])) == 80.0
|
|
assert expired["last_billed_status"] == "APPLIED"
|
|
|
|
|
|
def test_termino_desconto_explains_contract_vs_last_billed_period_without_contradiction():
|
|
service = DiscountHistoryMockService(FIXTURE)
|
|
evidence = service.consultar_historico_descontos(msisdn="11999999999", nome_plano="TIM Black")
|
|
action = build_contas_workflow_actions(ContasDomainService()).get("formatar_capability_resposta")
|
|
result = action({"tipo": "termino_desconto", "discount_evidence": evidence}, {"input": {}})
|
|
text = result["mensagem"]
|
|
|
|
assert "O último período faturado com esse desconto foi 14/10 a 13/11" in text
|
|
assert "com R$ 80,00 de desconto" in text
|
|
assert "na fatura emitida em 20/11/2025" in text
|
|
assert "a situação contratual em 20/11/2025 já consta como encerrada" in text
|