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"}