fix: use US/Eastern for model datetime defaults and add tests

Made-with: Cursor
This commit is contained in:
cottongin
2026-04-06 21:36:55 -04:00
parent 7c9c32bd0e
commit f7b424b692
2 changed files with 50 additions and 2 deletions

View File

@@ -1,8 +1,13 @@
import json import json
from datetime import datetime, timezone from datetime import datetime, timezone
from zoneinfo import ZoneInfo
from app import db from app import db
def get_local_now():
return datetime.now(ZoneInfo("America/New_York")).replace(tzinfo=None)
class Article(db.Model): class Article(db.Model):
__tablename__ = "articles" __tablename__ = "articles"
@@ -15,7 +20,7 @@ class Article(db.Model):
link = db.Column(db.Text, nullable=False) link = db.Column(db.Text, nullable=False)
content_html = db.Column(db.Text, nullable=False, default="") content_html = db.Column(db.Text, nullable=False, default="")
fetched_at = db.Column( 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, 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="[]") article_ids = db.Column(db.Text, nullable=False, default="[]")
excluded_article_ids = db.Column(db.Text, nullable=False, default="[]") excluded_article_ids = db.Column(db.Text, nullable=False, default="[]")
created_at = db.Column( 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") status = db.Column(db.Text, nullable=False, default="draft")
issue_type = db.Column(db.Text, nullable=False, default="weekly") issue_type = db.Column(db.Text, nullable=False, default="weekly")

View File

@@ -1,5 +1,6 @@
import json import json
from datetime import datetime, date from datetime import datetime, date
from zoneinfo import ZoneInfo
from src.models import Article, Image, Issue, Setting from src.models import Article, Image, Issue, Setting
@@ -84,3 +85,45 @@ def test_setting_crud(db):
Setting.set("fetch_interval", 4) Setting.set("fetch_interval", 4)
assert Setting.get("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="<p>Test content</p>",
)
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