61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
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)
|