import unittest
from pathlib import Path


ROOT = Path(__file__).resolve().parents[2]


def source(path: str) -> str:
    return (ROOT / path).read_text(encoding="utf-8")


class AIQueryExecutorContractTests(unittest.TestCase):
    def test_backend_has_database_backed_query_executor_contract(self) -> None:
        executor = source("backend/app/services/ai_query_executor.py")
        ai_api = source("backend/app/api/ai.py")
        ai_service = source("backend/app/services/ai_service.py")

        self.assertIn("def execute_ai_query", executor)
        self.assertIn("def _query_revenue", executor)
        self.assertIn("Payment.received_date", executor)
        self.assertIn("Invoice.status == InvoiceStatus.paid", executor)
        self.assertIn("source\": \"database\"", executor)
        self.assertIn("cash_received", executor)
        self.assertIn("paid_invoices", executor)
        self.assertIn("execute_ai_query", ai_api)
        self.assertIn('draft_data.get("action") == "query"', ai_api)
        self.assertIn("must not provide query result data", ai_service.lower())


if __name__ == "__main__":
    unittest.main()
