import unittest from datetime import date from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from app.daily.recap import RecapService, format_evening_notice from app.db.models import Base, DailyRecap, User class DailyRecapTests(unittest.TestCase): def setUp(self) -> None: self.engine = create_engine("sqlite:///:memory:") Base.metadata.create_all(self.engine) self.Session = sessionmaker(bind=self.engine) with Session(self.engine) as db: user = User(username="rc", api_token_hash="x") db.add(user) db.commit() self.user_id = user.id def test_format_evening_notice(self) -> None: notice = format_evening_notice("Текст", "/img.png") self.assertIn("Сводка дня", notice) self.assertIn("![day]", notice) def test_get_or_create_pending(self) -> None: day = date(2026, 6, 18) with Session(self.engine) as db: svc = RecapService(db, self.user_id) row = svc.get_or_create_pending(day) self.assertEqual(row.status, "pending") again = svc.get_or_create_pending(day) self.assertEqual(again.id, row.id) def test_list_recaps_only_posted(self) -> None: day = date(2026, 6, 17) with Session(self.engine) as db: db.add( DailyRecap( user_id=self.user_id, day=day, text="done", status="posted", message_id=10, session_id=1, ) ) db.add( DailyRecap( user_id=self.user_id, day=date(2026, 6, 16), text="fail", status="failed", ) ) db.commit() rows = RecapService(db, self.user_id).list_recaps() self.assertEqual(len(rows), 1) self.assertEqual(rows[0].day, day)