publishing pipeline update + model spec
This commit is contained in:
86
tests/test_routes.py
Normal file
86
tests/test_routes.py
Normal file
@@ -0,0 +1,86 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
from chatmock.app import create_app
|
||||
|
||||
|
||||
class FakeUpstream:
|
||||
def __init__(self, events: list[dict[str, object]], status_code: int = 200) -> None:
|
||||
self._events = events
|
||||
self.status_code = status_code
|
||||
self.headers = {}
|
||||
self.content = b""
|
||||
self.text = ""
|
||||
|
||||
def iter_lines(self, decode_unicode: bool = False):
|
||||
for event in self._events:
|
||||
payload = f"data: {json.dumps(event)}"
|
||||
yield payload if decode_unicode else payload.encode("utf-8")
|
||||
|
||||
def close(self) -> None:
|
||||
return None
|
||||
|
||||
|
||||
class RouteTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.app = create_app()
|
||||
self.client = self.app.test_client()
|
||||
|
||||
def test_openai_models_list(self) -> None:
|
||||
response = self.client.get("/v1/models")
|
||||
body = response.get_json()
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertIn("gpt-5.4", [item["id"] for item in body["data"]])
|
||||
|
||||
def test_ollama_tags_list(self) -> None:
|
||||
response = self.client.get("/api/tags")
|
||||
body = response.get_json()
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertIn("gpt-5.4", [item["name"] for item in body["models"]])
|
||||
|
||||
@patch("chatmock.routes_openai.start_upstream_request")
|
||||
def test_chat_completions(self, mock_start) -> None:
|
||||
mock_start.return_value = (
|
||||
FakeUpstream(
|
||||
[
|
||||
{"type": "response.output_text.delta", "delta": "hello"},
|
||||
{"type": "response.completed", "response": {"id": "resp-openai"}},
|
||||
]
|
||||
),
|
||||
None,
|
||||
)
|
||||
response = self.client.post(
|
||||
"/v1/chat/completions",
|
||||
json={"model": "gpt5.4", "messages": [{"role": "user", "content": "hi"}]},
|
||||
)
|
||||
body = response.get_json()
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(body["choices"][0]["message"]["content"], "hello")
|
||||
self.assertEqual(body["model"], "gpt5.4")
|
||||
|
||||
@patch("chatmock.routes_ollama.start_upstream_request")
|
||||
def test_ollama_chat(self, mock_start) -> None:
|
||||
mock_start.return_value = (
|
||||
FakeUpstream(
|
||||
[
|
||||
{"type": "response.output_text.delta", "delta": "hello"},
|
||||
{"type": "response.completed"},
|
||||
]
|
||||
),
|
||||
None,
|
||||
)
|
||||
response = self.client.post(
|
||||
"/api/chat",
|
||||
json={"model": "gpt-5.4", "messages": [{"role": "user", "content": "hi"}], "stream": False},
|
||||
)
|
||||
body = response.get_json()
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(body["message"]["content"], "hello")
|
||||
self.assertEqual(body["model"], "gpt-5.4")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user