59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""AI recommendation route Ollama-first display contract."""
|
|
|
|
|
|
def _client(monkeypatch):
|
|
from flask import Flask
|
|
import auth
|
|
from routes.ai_routes import ai_bp
|
|
|
|
monkeypatch.setattr(auth, "DISABLE_LOGIN", True)
|
|
app = Flask(__name__)
|
|
app.secret_key = "test"
|
|
app.register_blueprint(ai_bp)
|
|
return app.test_client()
|
|
|
|
|
|
def test_initial_ai_status_sanitizes_cached_gemini_recommendation(monkeypatch):
|
|
import routes.ai_routes as ai_routes
|
|
|
|
monkeypatch.setattr(
|
|
ai_routes.ai_provider_service,
|
|
"_status_cache",
|
|
{
|
|
"data": {
|
|
"default_provider": "gemini",
|
|
"recommended_provider": "gemini",
|
|
"ollama": {"connected": None},
|
|
"gemini": {"connected": True},
|
|
}
|
|
},
|
|
)
|
|
|
|
status = ai_routes._get_ai_status_for_initial_render()
|
|
|
|
assert status["default_provider"] == "ollama"
|
|
assert status["recommended_provider"] == "ollama"
|
|
|
|
def test_initial_ai_status_never_recommends_gemini_without_cache(monkeypatch):
|
|
import routes.ai_routes as ai_routes
|
|
|
|
class FakeProvider:
|
|
default_provider = "gemini"
|
|
_status_cache = {}
|
|
|
|
monkeypatch.setattr(ai_routes, "ai_provider_service", FakeProvider())
|
|
|
|
status = ai_routes._get_ai_status_for_initial_render()
|
|
|
|
assert status["default_provider"] == "ollama"
|
|
assert status["recommended_provider"] == "ollama"
|
|
|
|
def test_set_provider_error_uses_ollama_primary_wording(monkeypatch):
|
|
client = _client(monkeypatch)
|
|
response = client.post("/api/ai/set_provider", json={"provider": "other"})
|
|
|
|
assert response.status_code == 400
|
|
assert response.get_json()["error"] == "無效的提供者,請使用 Ollama 主路徑"
|