import pytest import os from datetime import datetime, timezone from pathlib import Path from unittest.mock import MagicMock def _seed_utterances(db, room_id, count=3): for i in range(count): db.execute( "INSERT INTO utterances (room_id, transcript, match_status, start_time, end_time) VALUES (?,?,?,?,?)", (room_id, f"utterance {i}", "unknown", "2026-05-27 10:00:00", "2026-05-27 10:00:03"), ) db.commit() def test_daily_summary_inserts_row(mocker, settings, db): db.execute("INSERT INTO rooms (name) VALUES (?)", ("Kitchen",)) db.commit() room = db.execute("SELECT id FROM rooms WHERE name='Kitchen'").fetchone() _seed_utterances(db, room["id"]) mock_post = mocker.patch("app.cron.daily_summary.httpx.post") mock_post.return_value.json.return_value = {"message": {"content": "Busy day."}} mock_post.return_value.raise_for_status = MagicMock() from app.cron.daily_summary import generate_daily_summary generate_daily_summary("2026-05-27", settings, db) row = db.execute("SELECT * FROM daily_summaries WHERE date='2026-05-27'").fetchone() assert row is not None assert row["summary_text"] == "Busy day." def test_daily_summary_skips_if_no_utterances(mocker, settings, db): mock_post = mocker.patch("app.cron.daily_summary.httpx.post") from app.cron.daily_summary import generate_daily_summary generate_daily_summary("2026-05-27", settings, db) mock_post.assert_not_called() def test_purge_clips_deletes_old_files(settings, db, tmp_path): from app.cron.purge_clips import purge_old_clips clips_dir = tmp_path / "clips" old_dir = clips_dir / "2026-04-01" old_dir.mkdir(parents=True) old_file = old_dir / "1.wav" old_file.write_bytes(b"\x00" * 100) new_dir = clips_dir / "2026-05-27" new_dir.mkdir(parents=True) new_file = new_dir / "2.wav" new_file.write_bytes(b"\x00" * 100) # Create a settings with clips_dir pointing to tmp from app.shared.config import Settings settings_override = Settings( db_path=settings.db_path, clips_dir=str(clips_dir), clip_retention_days=30, speaches_url=settings.speaches_url, ollama_url=settings.ollama_url, livekit_api_key=settings.livekit_api_key, livekit_api_secret=settings.livekit_api_secret, ) purge_old_clips("2026-05-28", settings_override, db) assert not old_file.exists() assert new_file.exists()