mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-29 09:21:58 +00:00
Tests were storing digests with local time but get_today() filters by UTC date, causing failures when local date != UTC date. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
105 lines
3.0 KiB
Python
105 lines
3.0 KiB
Python
"""Tests for /api/digest endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime, timezone
|
|
|
|
import pytest
|
|
|
|
pytest.importorskip("fastapi", reason="openjarvis[server] not installed")
|
|
|
|
from openjarvis.agents.digest_store import DigestArtifact, DigestStore
|
|
|
|
|
|
@pytest.fixture()
|
|
def store(tmp_path):
|
|
db_path = str(tmp_path / "digest.db")
|
|
s = DigestStore(db_path=db_path)
|
|
s.save(
|
|
DigestArtifact(
|
|
text="Good morning sir.",
|
|
audio_path=tmp_path / "digest.mp3",
|
|
sections={"messages": "3 emails"},
|
|
sources_used=["gmail"],
|
|
generated_at=datetime.now(timezone.utc),
|
|
model_used="test",
|
|
voice_used="jarvis",
|
|
)
|
|
)
|
|
# Write fake audio file
|
|
(tmp_path / "digest.mp3").write_bytes(b"fake-mp3")
|
|
yield s
|
|
s.close()
|
|
|
|
|
|
def _make_app(db_path: str):
|
|
"""Create a FastAPI app with the digest router using get_latest as fallback."""
|
|
from unittest.mock import patch
|
|
|
|
from fastapi import FastAPI
|
|
|
|
from openjarvis.agents.digest_store import DigestStore
|
|
from openjarvis.server.digest_routes import create_digest_router
|
|
|
|
# Patch get_today to fall back to get_latest — avoids timezone issues in CI
|
|
original_get_today = DigestStore.get_today
|
|
|
|
def _get_today_or_latest(self, timezone_name="UTC"):
|
|
result = original_get_today(self, timezone_name=timezone_name)
|
|
if result is None:
|
|
return self.get_latest()
|
|
return result
|
|
|
|
app = FastAPI()
|
|
with patch.object(DigestStore, "get_today", _get_today_or_latest):
|
|
app.include_router(create_digest_router(db_path=db_path))
|
|
return app
|
|
|
|
|
|
def test_get_digest(store, tmp_path):
|
|
from fastapi.testclient import TestClient
|
|
|
|
app = _make_app(str(tmp_path / "digest.db"))
|
|
client = TestClient(app)
|
|
resp = client.get("/api/digest")
|
|
assert resp.status_code == 200
|
|
data = resp.json()
|
|
assert data["text"] == "Good morning sir."
|
|
assert data["sources_used"] == ["gmail"]
|
|
|
|
|
|
def test_get_digest_audio(store, tmp_path):
|
|
from fastapi.testclient import TestClient
|
|
|
|
app = _make_app(str(tmp_path / "digest.db"))
|
|
client = TestClient(app)
|
|
resp = client.get("/api/digest/audio")
|
|
assert resp.status_code == 200
|
|
assert resp.content == b"fake-mp3"
|
|
|
|
|
|
def test_get_digest_404(tmp_path):
|
|
from fastapi import FastAPI
|
|
from fastapi.testclient import TestClient
|
|
|
|
from openjarvis.server.digest_routes import create_digest_router
|
|
|
|
app = FastAPI()
|
|
app.include_router(create_digest_router(db_path=str(tmp_path / "empty.db")))
|
|
|
|
client = TestClient(app)
|
|
resp = client.get("/api/digest")
|
|
assert resp.status_code == 404
|
|
|
|
|
|
def test_get_history(store, tmp_path):
|
|
from fastapi.testclient import TestClient
|
|
|
|
app = _make_app(str(tmp_path / "digest.db"))
|
|
client = TestClient(app)
|
|
resp = client.get("/api/digest/history")
|
|
assert resp.status_code == 200
|
|
data = resp.json()
|
|
assert len(data) == 1
|
|
assert data[0]["voice_used"] == "jarvis"
|