67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
|
|
import asyncio
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
||
|
|
from app.services import email_workflow_service as workflow_module
|
||
|
|
|
||
|
|
|
||
|
|
def test_bankruptcy_exact_cvr_creates_case_alert_and_links_email(monkeypatch):
|
||
|
|
queries = []
|
||
|
|
updates = []
|
||
|
|
|
||
|
|
def fake_query(sql, params=()):
|
||
|
|
queries.append((sql, params))
|
||
|
|
if "FROM customers" in sql:
|
||
|
|
return [{"id": 42, "name": "Testkunde ApS", "cvr_number": "12345678"}]
|
||
|
|
if "FROM sag_sager s" in sql:
|
||
|
|
return []
|
||
|
|
if "INSERT INTO sag_sager" in sql:
|
||
|
|
return [{"id": 700, "titel": "KONKURSVARSEL", "customer_id": 42}]
|
||
|
|
if "SELECT id FROM alert_notes" in sql:
|
||
|
|
return []
|
||
|
|
if "INSERT INTO alert_notes" in sql:
|
||
|
|
return [{"id": 900}]
|
||
|
|
return []
|
||
|
|
|
||
|
|
monkeypatch.setattr(workflow_module, "execute_query", fake_query)
|
||
|
|
monkeypatch.setattr(
|
||
|
|
workflow_module,
|
||
|
|
"execute_update",
|
||
|
|
lambda sql, params=(): updates.append((sql, params)) or 1,
|
||
|
|
)
|
||
|
|
service = workflow_module.EmailWorkflowService()
|
||
|
|
monkeypatch.setattr(service, "_add_helpdesk_comment", lambda *args: None)
|
||
|
|
monkeypatch.setattr(service, "_link_email_to_sag", lambda *args: None)
|
||
|
|
|
||
|
|
result = asyncio.run(service._handle_bankruptcy_analysis({
|
||
|
|
"id": 55,
|
||
|
|
"subject": "Konkursdekret",
|
||
|
|
"body_text": "Vedrørende CVR-nr.: 12345678",
|
||
|
|
"body_html": "",
|
||
|
|
"sender_email": "statstidende@example.dk",
|
||
|
|
}))
|
||
|
|
|
||
|
|
assert result["action"] == "created_bankruptcy_cases_and_alerts"
|
||
|
|
assert result["customer_ids"] == [42]
|
||
|
|
assert result["sag_ids"] == [700]
|
||
|
|
assert result["alert_note_ids"] == [900]
|
||
|
|
assert any("linked_case_id" in sql for sql, _ in updates)
|
||
|
|
assert any("INSERT INTO alert_notes" in sql for sql, _ in queries)
|
||
|
|
|
||
|
|
|
||
|
|
def test_bankruptcy_without_explicit_cvr_does_nothing(monkeypatch):
|
||
|
|
monkeypatch.setattr(
|
||
|
|
workflow_module,
|
||
|
|
"execute_query",
|
||
|
|
lambda *args, **kwargs: (_ for _ in ()).throw(AssertionError("DB må ikke kaldes")),
|
||
|
|
)
|
||
|
|
service = workflow_module.EmailWorkflowService()
|
||
|
|
result = asyncio.run(service._handle_bankruptcy_analysis({
|
||
|
|
"id": 56,
|
||
|
|
"subject": "Mulig konkurs",
|
||
|
|
"body_text": "Ingen CVR-oplysning i teksten",
|
||
|
|
"body_html": "",
|
||
|
|
}))
|
||
|
|
assert result == {"status": "skipped", "reason": "no_cvr_found"}
|