"""Ehemals AriaOrchestrator mit ProcessOutcome-Adaptern; jetzt Gateway.handle()
mit CodexAdapter und Mock-Runner (siehe docs/AENDERUNGEN.md)."""
import json
import unittest

from aria_router.gateway import Handling
from aria_router.runner import MockRunner, RunResult, mock_codex_events

from tests.helpers import GatewayTestCase


class BackendResultTests(GatewayTestCase):

    def test_failed_backend_result(self):
        failed = ("\n".join(json.dumps(e) for e in ({"type": "turn.started"}, {"type": "turn.failed"})) + "\n").encode()
        runner = MockRunner(lambda spec: RunResult(True, exit_code=0, stdout=failed))
        result = self.gateway(codex_runner=runner).handle(self.request(1, "#public bitte analysieren"))

        self.assertEqual(result.handling, Handling.FAILED)
        self.assertEqual(result.status, "failed")
        self.assertEqual(result.code, "MODEL_FAILED")
        self.assertEqual(result.backend, "codex")

    def test_successful_backend_result(self):
        runner = MockRunner(lambda spec: RunResult(True, exit_code=0, stdout=mock_codex_events("CODEX_OK")))
        result = self.gateway(codex_runner=runner).handle(self.request(2, "#public bitte analysieren"))

        self.assertEqual(result.handling, Handling.REPLY)
        self.assertEqual(result.status, "completed")
        self.assertEqual(result.reply_text, "CODEX_OK")


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