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
|
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")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user