diff --git a/src/models.py b/src/models.py index 95de4f8..5bf84a7 100644 --- a/src/models.py +++ b/src/models.py @@ -1,8 +1,13 @@ import json from datetime import datetime, timezone +from zoneinfo import ZoneInfo from app import db +def get_local_now(): + return datetime.now(ZoneInfo("America/New_York")).replace(tzinfo=None) + + class Article(db.Model): __tablename__ = "articles" @@ -15,7 +20,7 @@ class Article(db.Model): link = db.Column(db.Text, nullable=False) content_html = db.Column(db.Text, nullable=False, default="") fetched_at = db.Column( - db.DateTime, nullable=False, default=lambda: datetime.now(timezone.utc) + db.DateTime, nullable=False, default=get_local_now ) images = db.relationship("Image", backref="article", lazy=True, @@ -45,7 +50,7 @@ class Issue(db.Model): article_ids = db.Column(db.Text, nullable=False, default="[]") excluded_article_ids = db.Column(db.Text, nullable=False, default="[]") created_at = db.Column( - db.DateTime, nullable=False, default=lambda: datetime.now(timezone.utc) + db.DateTime, nullable=False, default=get_local_now ) status = db.Column(db.Text, nullable=False, default="draft") issue_type = db.Column(db.Text, nullable=False, default="weekly") diff --git a/tests/test_models.py b/tests/test_models.py index 3d06413..3cad632 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,5 +1,6 @@ import json from datetime import datetime, date +from zoneinfo import ZoneInfo from src.models import Article, Image, Issue, Setting @@ -84,3 +85,45 @@ def test_setting_crud(db): Setting.set("fetch_interval", 4) assert Setting.get("fetch_interval") == 4 + + +def test_article_default_fetched_at(db): + article = Article( + guid="https://example.com/?p=101", + title="Test Article 2", + author="Test Author", + pub_date=datetime(2026, 4, 6, 12, 0, 0), + categories="[]", + link="https://example.com/test2", + content_html="

Test content

", + ) + db.session.add(article) + db.session.commit() + + saved = Article.query.filter_by(guid="https://example.com/?p=101").first() + assert saved.fetched_at.tzinfo is None + # Should be close to current US/Eastern time + local_now = datetime.now(ZoneInfo("America/New_York")).replace(tzinfo=None) + diff = abs((local_now - saved.fetched_at).total_seconds()) + assert diff < 10 + + +def test_issue_default_created_at(db): + issue = Issue( + week_start=date(2026, 4, 13), + week_end=date(2026, 4, 19), + cover_method="text", + cover_path="data/issues/cover2.jpg", + epub_path="data/issues/test2.epub", + article_ids="[]", + excluded_article_ids="[]", + status="draft", + ) + db.session.add(issue) + db.session.commit() + + saved = Issue.query.filter_by(week_start=date(2026, 4, 13)).first() + assert saved.created_at.tzinfo is None + local_now = datetime.now(ZoneInfo("America/New_York")).replace(tzinfo=None) + diff = abs((local_now - saved.created_at).total_seconds()) + assert diff < 10