Spaces:
No application file
No application file
File size: 2,847 Bytes
3523f69 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | from __future__ import annotations
import asyncio
import os
import unittest
from unittest.mock import patch
from app.services.agent_controller import agent_controller
class AgentControllerTests(unittest.TestCase):
def test_analyze_idea_returns_stack_and_questions(self) -> None:
result = agent_controller.analyze_idea("Build a dashboard for a small team")
self.assertIn("understanding", result)
self.assertIn("suggestedStack", result)
self.assertIn("questions", result)
self.assertIsInstance(result["questions"], list)
self.assertTrue(result["suggestedStack"]["backend"])
def test_finalize_requirements_normalizes_partial_answers(self) -> None:
result = agent_controller.finalize_requirements(
"Build a starter app",
{"database": "postgres", "backend_framework": "node", "authentication": "yes"},
{
"language": "Auto",
"frontend": "React",
"backend": "FastAPI",
"database": "SQLite",
"aiTools": "Auto",
"deployment": "Render",
},
)
self.assertEqual(result["selectedStack"]["database"], "PostgreSQL")
self.assertEqual(result["selectedStack"]["backend"], "Express")
self.assertIn("authentication-ready", result["finalRequirements"])
def test_plan_project_structure_covers_full_stack(self) -> None:
context = agent_controller._build_idea_context(
"Build a customer portal",
selected_stack={
"language": "Python",
"frontend": "React",
"backend": "FastAPI",
"database": "SQLite",
"aiTools": "None",
"deployment": "Render",
},
final_requirements="Include a simple dashboard.",
)
plan = agent_controller.plan_project_structure(context, {})
self.assertEqual(plan.selected_stack["frontend"], "React")
self.assertEqual(plan.selected_stack["backend"], "FastAPI")
self.assertTrue(any(file["path"].startswith("frontend/") for file in plan.files))
self.assertTrue(any(file["path"].startswith("backend/") for file in plan.files))
def test_generate_files_falls_back_without_ollama(self) -> None:
with patch.dict(os.environ, {"OLLAMA_BASE_URL": ""}, clear=False):
preview = asyncio.run(
agent_controller.generate_files(
"Build a task tracker",
generation_mode="fast",
)
)
self.assertIn("projectName", preview)
self.assertTrue(any("fallback" in item.lower() for item in preview["assumptions"]))
self.assertTrue(preview["files"])
if __name__ == "__main__":
unittest.main()
|