"""Tests for the FlyPython deterministic troubleshooting agent."""

import unittest

from agent_loop import Action, PLAYBOOKS, Task, run_agent


class AgentLoopTests(unittest.TestCase):
    def test_network_issue_returns_playbook(self) -> None:
        task = run_agent(Task("My API request times out"))

        self.assertEqual(task.observations[0], "network")
        self.assertEqual(task.answer, PLAYBOOKS["network"])
        self.assertEqual(
            task.trace,
            ["1. classify_issue", "2. lookup_playbook", "3. finish"],
        )

    def test_step_budget_stops_the_loop(self) -> None:
        with self.assertRaisesRegex(RuntimeError, "1-step budget"):
            run_agent(Task("An import fails"), max_steps=1)

    def test_unknown_tool_is_rejected(self) -> None:
        def unsafe_planner(_task: Task) -> Action:
            return Action("delete_files")

        with self.assertRaisesRegex(ValueError, "Unknown tool"):
            run_agent(Task("Delete everything"), planner=unsafe_planner)


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