From f6646896ffbb29d1e231e639ccc5cc110a3a37cf Mon Sep 17 00:00:00 2001 From: Alex Domingo Date: Mon, 3 Apr 2023 18:50:22 +0200 Subject: [PATCH] append posts to atom feed to keep post order from new to old (#216) --- roots/test-build/post.rst | 2 +- src/ablog/post.py | 2 +- src/ablog/tests/test_build.py | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/roots/test-build/post.rst b/roots/test-build/post.rst index bef264d8..46ac2929 100644 --- a/roots/test-build/post.rst +++ b/roots/test-build/post.rst @@ -1,4 +1,4 @@ -.. post:: 2020-12-01 +.. post:: 2022-12-01 :tags: Foo Tag, BarTag Foo Post Title diff --git a/src/ablog/post.py b/src/ablog/post.py index 6d7c58fe..28cd9e9e 100644 --- a/src/ablog/post.py +++ b/src/ablog/post.py @@ -684,7 +684,7 @@ def generate_atom_feeds(app): content = None else: content = post.to_html(pagename, fulltext=feed_fulltext) - feed_entry = feed.add_entry() + feed_entry = feed.add_entry(order="append") feed_entry.id(post_url) feed_entry.link(href=post_url) feed_entry.author({"name": author.name for author in post.author}) diff --git a/src/ablog/tests/test_build.py b/src/ablog/tests/test_build.py index f664c458..e5951bd3 100644 --- a/src/ablog/tests/test_build.py +++ b/src/ablog/tests/test_build.py @@ -1,6 +1,10 @@ +from datetime import datetime + import lxml import pytest +POST_DATETIME_FMT = "%Y-%m-%dT%H:%M:%S%z" + @pytest.mark.sphinx("html", testroot="build") # using roots/test-build def test_build(app, status, warning): @@ -41,6 +45,8 @@ def test_feed(app, status, warning): assert categories[1].attrib["term"] == "FooTag" content = entry.find("{http://www.w3.org/2005/Atom}content") assert "Foo post content." in content.text + update_time = entry.find("{http://www.w3.org/2005/Atom}updated") + first_entry_date = datetime.strptime(update_time.text, POST_DATETIME_FMT) empty_entry = entries[1] title = empty_entry.find("{http://www.w3.org/2005/Atom}title") @@ -51,6 +57,11 @@ def test_feed(app, status, warning): assert len(categories) == 0 content = empty_entry.find("{http://www.w3.org/2005/Atom}content") assert 'id="foo-empty-post"' in content.text + update_time = empty_entry.find("{http://www.w3.org/2005/Atom}updated") + second_entry_date = datetime.strptime(update_time.text, POST_DATETIME_FMT) + + # check order of post based on their dates + assert first_entry_date > second_entry_date social_path = app.outdir / "blog/social.xml" assert (social_path).exists()