From bbb0907db8efc3236f7deaa58fc96a56edee7c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Freitag?= Date: Thu, 8 Feb 2024 18:36:39 +0100 Subject: [PATCH] Fix ValueError on Topic update by anonymous poster https://itou.sentry.io/issues/4265102886/ --- lacommunaute/forum_conversation/forms.py | 9 +++++ .../forum_conversation/tests/tests_views.py | 40 ++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/lacommunaute/forum_conversation/forms.py b/lacommunaute/forum_conversation/forms.py index ea0f7c229..5699a37f7 100644 --- a/lacommunaute/forum_conversation/forms.py +++ b/lacommunaute/forum_conversation/forms.py @@ -57,3 +57,12 @@ def save(self): post.topic.save() return post + + def update_post(self, post): + if self.user.is_anonymous: + post.username = self.cleaned_data["username"] + if should_not_be_approved(self.cleaned_data["username"]): + post.approved = False + else: + post.updated_by = self.user + post.updates_count = F("updates_count") + 1 diff --git a/lacommunaute/forum_conversation/tests/tests_views.py b/lacommunaute/forum_conversation/tests/tests_views.py index f7f45cf62..d509d228b 100644 --- a/lacommunaute/forum_conversation/tests/tests_views.py +++ b/lacommunaute/forum_conversation/tests/tests_views.py @@ -18,7 +18,7 @@ from lacommunaute.forum_conversation.enums import Filters from lacommunaute.forum_conversation.factories import CertifiedPostFactory, PostFactory, TopicFactory from lacommunaute.forum_conversation.forms import PostForm -from lacommunaute.forum_conversation.models import Topic +from lacommunaute.forum_conversation.models import Post, Topic from lacommunaute.forum_conversation.views import PostDeleteView, TopicCreateView from lacommunaute.forum_upvote.factories import UpVoteFactory from lacommunaute.notification.factories import BouncedEmailFactory @@ -237,6 +237,44 @@ def test_selected_tags_are_checked(self): not_checked_box = f'class="form-check-input" type="checkbox" name="tags" value="{tag.id}" >' self.assertContains(response, not_checked_box) + def test_update_by_anonymous_user(self): + response = self.client.post( + reverse( + "forum_conversation:topic_create", + kwargs={ + "forum_slug": self.forum.slug, + "forum_pk": self.forum.pk, + }, + ), + {"subject": "subject", "content": "La communauté", "username": "foo@email.com"}, + ) + post = Post.objects.select_related("topic").get(username="foo@email.com") + topic = post.topic + response = self.client.post( + reverse( + "forum_conversation:topic_update", + kwargs={ + "forum_slug": self.forum.slug, + "forum_pk": self.forum.pk, + "slug": topic.slug, + "pk": topic.pk, + }, + ), + {"subject": "subject", "content": "La communauté", "username": "foo@email.com"}, + ) + self.assertRedirects( + response, + reverse( + "forum_conversation:topic", + kwargs={ + "forum_slug": self.forum.slug, + "forum_pk": self.forum.pk, + "slug": topic.slug, + "pk": topic.pk, + }, + ), + ) + class PostCreateViewTest(TestCase): @classmethod