Files
mediaplayer/sentence_api/tests/test_ai_tutor.py
2026-09-06 07:38:56 +08:00

58 lines
1.7 KiB
Python

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.")