fix: use US/Eastern for model datetime defaults and add tests
Made-with: Cursor
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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="<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
|
||||
|
||||
Reference in New Issue
Block a user