From 625270f30e1e34eae251ca5a81de85d726740400 Mon Sep 17 00:00:00 2001 From: Stuart Maxwell Date: Tue, 19 Nov 2024 17:36:56 +1300 Subject: [PATCH 1/3] Test to confirm pages don't appear in RSS feeds --- tests/test_feeds.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/test_feeds.py b/tests/test_feeds.py index 8deeeb2..2d7008c 100644 --- a/tests/test_feeds.py +++ b/tests/test_feeds.py @@ -59,3 +59,36 @@ def test_truncated_posts_feed(client, user): assert "Post 1" in feed assert "Truncated content" not in feed assert f'<a href="/{post_prefix}/post-1/">Read more</a></p>' in feed + + +@pytest.mark.django_db +def test_pages_not_in_feed(client, test_post1, test_post2, test_post3, test_page1, user): + url = get_rss_url() + response = client.get(url) + + assert response.status_code == 200 + assert response["Content-Type"] == "application/rss+xml; charset=utf-8" + + feed = response.content.decode("utf-8") + assert "" in feed + assert test_post1.title in feed + assert test_post2.title in feed + assert test_post3.title in feed + assert test_page1.title not in feed + + Post.page_objects.create( + title="New Test Page", + content="Content of page 1.", + author=user, + status="published", + post_type="page", + ) + + response = client.get(url) + + assert response.status_code == 200 + assert response["Content-Type"] == "application/rss+xml; charset=utf-8" + + feed = response.content.decode("utf-8") + assert "" in feed + assert "New Test Page" not in feed From 4a25f5faac15b861a245b5f6a3976285f32f52fb Mon Sep 17 00:00:00 2001 From: Stuart Maxwell Date: Tue, 19 Nov 2024 17:45:38 +1300 Subject: [PATCH 2/3] Test to ensure posts can't have parents --- tests/test_models_post.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/test_models_post.py b/tests/test_models_post.py index 56eb817..8e70664 100644 --- a/tests/test_models_post.py +++ b/tests/test_models_post.py @@ -1101,3 +1101,19 @@ def test_page_is_child(test_page1, test_page2): test_page1.parent = test_page2 test_page1.save() assert test_page1.is_child is True + + +@pytest.mark.django_db +def test_parent_page_cant_have_post_child(test_page1, test_post1): + test_post1.parent = test_page1 + test_post1.save() + + assert test_post1 not in test_page1.children.all() + + +@pytest.mark.django_db +def test_post_parent_is_none(test_post1, test_page1): + test_post1.parent = test_page1 + test_post1.save() + + assert test_post1.parent is None From 2b6984e03307fc7f938247a18835875d7668501a Mon Sep 17 00:00:00 2001 From: Stuart Maxwell Date: Tue, 19 Nov 2024 17:46:05 +1300 Subject: [PATCH 3/3] Ensure posts don't have parents --- src/djpress/models/post.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/djpress/models/post.py b/src/djpress/models/post.py index 9b8fce5..0037c97 100644 --- a/src/djpress/models/post.py +++ b/src/djpress/models/post.py @@ -343,12 +343,18 @@ def __str__(self: "Post") -> str: return self.title def save(self: "Post", *args, **kwargs) -> None: # noqa: ANN002, ANN003 - """Override the save method to auto-generate the slug.""" + """Override the save method.""" + # auto-generate the slug. if not self.slug: self.slug = slugify(self.title) if not self.slug or self.slug.strip("-") == "": msg = "Invalid title. Unable to generate a valid slug." raise ValueError(msg) + + # If the post is a post, we need to ensure that the parent is None + if self.post_type == "post": + self.parent = None + self.full_clean() super().save(*args, **kwargs)