add explain module
This commit is contained in:
57
sentence_api/tests/test_ai_tutor.py
Normal file
57
sentence_api/tests/test_ai_tutor.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import pytest
|
||||
|
||||
from sentence_api.ai_tutor import AITutor, AITutorError
|
||||
|
||||
|
||||
class FakeResponse:
|
||||
def __init__(self, status_code=200, body=None):
|
||||
self.status_code = status_code
|
||||
self._body = body or {}
|
||||
|
||||
def json(self):
|
||||
if self._body is None:
|
||||
raise ValueError("invalid JSON")
|
||||
return self._body
|
||||
|
||||
|
||||
def test_ai_tutor_parses_chat_completion(monkeypatch):
|
||||
requests_payloads = []
|
||||
|
||||
def fake_post(endpoint, headers, json, timeout):
|
||||
requests_payloads.append((endpoint, headers, json, timeout))
|
||||
return FakeResponse(
|
||||
body={
|
||||
"choices": [
|
||||
{"message": {"content": " 这句话的意思是…… "}}
|
||||
]
|
||||
}
|
||||
)
|
||||
|
||||
monkeypatch.setattr("sentence_api.ai_tutor.requests.post", fake_post)
|
||||
tutor = AITutor("https://ai.test/chat", "secret", "test-model", 1.5)
|
||||
|
||||
explanation = tutor.explain(
|
||||
"The early bird catches the worm.",
|
||||
course_title="English idioms",
|
||||
sentence_index=1,
|
||||
language="en",
|
||||
)
|
||||
|
||||
endpoint, headers, payload, timeout = requests_payloads[0]
|
||||
assert explanation == "这句话的意思是……"
|
||||
assert endpoint == "https://ai.test/chat"
|
||||
assert headers["Authorization"] == "Bearer secret"
|
||||
assert payload["model"] == "test-model"
|
||||
assert "The early bird catches the worm." in payload["messages"][1]["content"]
|
||||
assert timeout == 1.5
|
||||
|
||||
|
||||
def test_ai_tutor_rejects_unexpected_response(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
"sentence_api.ai_tutor.requests.post",
|
||||
lambda *args, **kwargs: FakeResponse(body={"choices": []}),
|
||||
)
|
||||
tutor = AITutor("https://ai.test/chat", "secret", "test-model", 1)
|
||||
|
||||
with pytest.raises(AITutorError):
|
||||
tutor.explain("Hello.")
|
||||
Reference in New Issue
Block a user