Replace OpenCode harness with Hermes, remove workspace dependency, and move vocabulary/corrections to app folder
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Unit tests for web_server.py"""
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
import aiohttp
|
||||
from model_manager import ModelManager
|
||||
from voice_manager import VoiceManager
|
||||
import web_server
|
||||
|
||||
async def test_web_server():
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
workspace = Path(tmpdir)
|
||||
(workspace / "test.txt").write_text("Hello World Content!")
|
||||
(workspace / "journal.jsonl").write_text(json.dumps({"at": "2026-08-08T12:00:00", "heard": "Hello", "reply": "Hi!"}) + "\n")
|
||||
|
||||
model_mgr = ModelManager(workspace)
|
||||
voice_mgr = VoiceManager(workspace)
|
||||
|
||||
await web_server.start_server(workspace, host="127.0.0.1", port=9999)
|
||||
web_server.set_managers(workspace, model_mgr, voice_mgr)
|
||||
|
||||
# Test HTTP requests
|
||||
async with aiohttp.ClientSession() as session:
|
||||
# Index HTML
|
||||
async with session.get("http://127.0.0.1:9999/") as resp:
|
||||
assert resp.status == 200
|
||||
html = await resp.text()
|
||||
assert "VoiceAgent Companion" in html
|
||||
print("PASS: Index HTML endpoint")
|
||||
|
||||
# History API
|
||||
async with session.get("http://127.0.0.1:9999/api/history") as resp:
|
||||
assert resp.status == 200
|
||||
data = await resp.json()
|
||||
assert len(data["turns"]) == 1
|
||||
assert data["turns"][0]["heard"] == "Hello"
|
||||
print("PASS: History API endpoint")
|
||||
|
||||
# File API
|
||||
async with session.get("http://127.0.0.1:9999/api/file?path=test.txt") as resp:
|
||||
assert resp.status == 200
|
||||
data = await resp.json()
|
||||
assert data["content"] == "Hello World Content!"
|
||||
print("PASS: File API endpoint")
|
||||
|
||||
# Set Model API
|
||||
async with session.post("http://127.0.0.1:9999/api/model", json={"model": "deepseek"}) as resp:
|
||||
assert resp.status == 200
|
||||
data = await resp.json()
|
||||
assert data["success"] is True
|
||||
assert model_mgr._active_model == "ollama-cloud/deepseek-v4-flash"
|
||||
print("PASS: Set Model API endpoint")
|
||||
|
||||
# Set Voice API
|
||||
async with session.post("http://127.0.0.1:9999/api/voice", json={"voice": "am_michael"}) as resp:
|
||||
assert resp.status == 200
|
||||
data = await resp.json()
|
||||
assert data["success"] is True
|
||||
assert voice_mgr._active_voice == "am_michael"
|
||||
print("PASS: Set Voice API endpoint")
|
||||
|
||||
# Send Message API
|
||||
received = []
|
||||
web_server.set_managers(workspace, model_mgr, voice_mgr, input_callback=lambda txt: received.append(txt))
|
||||
async with session.post("http://127.0.0.1:9999/api/send", json={"text": "hello from web"}) as resp:
|
||||
assert resp.status == 200
|
||||
data = await resp.json()
|
||||
assert data["success"] is True
|
||||
assert "hello from web" in received
|
||||
print("PASS: Send Message API endpoint")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(test_web_server())
|
||||
print("\nAll Web Server tests passed successfully!")
|
||||
Reference in New Issue
Block a user