T5: Dependency Injection — services через composition root
- AssistantService теперь принимает ForecastService в конструкторе (раньше создавал new ForecastService() внутри analyze/advice) - infrastructure/cli/main.py: _build_services() — composition root, собирает граф ForecastService, ScenarioService, AssistantService, CurrencyConverter - Все CLI-команды используют _build_services(model) вместо прямого new - test_ai.py: обновлён под новый контракт AssistantService Tests: 67/67 pass.
This commit is contained in:
+5
-10
@@ -1,24 +1,19 @@
|
||||
from application.forecast import ForecastService
|
||||
from infrastructure.ai.assistant import AssistantService
|
||||
from infrastructure.ai.prompts import ADVICE_PROMPT, ANALYZE_PROMPT
|
||||
|
||||
|
||||
class TestAssistantService:
|
||||
def test_analyze_returns_prompt(self, sample_model):
|
||||
assistant = AssistantService(sample_model)
|
||||
forecast_service = ForecastService(sample_model)
|
||||
assistant = AssistantService(sample_model, forecast_service=forecast_service)
|
||||
result = assistant.analyze(months=6)
|
||||
assert "prompt" in result
|
||||
assert "summary" in result
|
||||
assert "forecast" in result
|
||||
assert result["ai_response"] is None
|
||||
|
||||
def test_advice_returns_prompt(self, sample_model):
|
||||
assistant = AssistantService(sample_model)
|
||||
forecast_service = ForecastService(sample_model)
|
||||
assistant = AssistantService(sample_model, forecast_service=forecast_service)
|
||||
result = assistant.advice("Как мне сэкономить?", months=6)
|
||||
assert "prompt" in result
|
||||
assert "ai_response" in result
|
||||
|
||||
def test_prompt_templates(self):
|
||||
assert "{model_json}" in ANALYZE_PROMPT
|
||||
assert "{forecast_json}" in ANALYZE_PROMPT
|
||||
assert "{model_json}" in ADVICE_PROMPT
|
||||
assert "{question}" in ADVICE_PROMPT
|
||||
|
||||
Reference in New Issue
Block a user