Repository: zestedesavoir/zds-site

Issue:
Interdire de poster des alertes en apparence vides
**Description du bug**

Quand on fait une alerte sur un message, il est interdit de poster un commentaire vide, mais il est possible de le remplir de retours à la ligne ou d'espaces. C'est presque comme poster un commentaire vide.

**Comment reproduire ?**

- Connectez-vous avec un staff (pour signaler et lire en même temps).
- Signaler un message du forum ou un commentaire.
- Constater qu'on peut mettre juste des espaces.

**Comportement attendu**

Un commentaire avec que des *whitespaces* devrait être considéré comme vide et renvoyer une erreur.


Discussion:

Resolving patch:
diff --git a/zds/forum/commons.py b/zds/forum/commons.py
--- a/zds/forum/commons.py
+++ b/zds/forum/commons.py
@@ -120,15 +120,18 @@ def perform_show_message(request, post):
 
     @staticmethod
     def perform_alert_message(request, post, user, alert_text):
-        alert = Alert(
-            author=user,
-            comment=post,
-            scope='FORUM',
-            text=alert_text,
-            pubdate=datetime.now())
-        alert.save()
-
-        messages.success(request, _("Une alerte a été envoyée à l'équipe concernant ce message."))
+        if len(alert_text.strip()) == 0:
+            messages.error(request, _('La raison du signalement ne peut pas être vide.'))
+        else:
+            alert = Alert(
+                author=user,
+                comment=post,
+                scope='FORUM',
+                text=alert_text,
+                pubdate=datetime.now())
+            alert.save()
+
+            messages.success(request, _("Une alerte a été envoyée à l'équipe concernant ce message."))
 
     @staticmethod
     def perform_useful(post):
diff --git a/zds/tutorialv2/views/published.py b/zds/tutorialv2/views/published.py
--- a/zds/tutorialv2/views/published.py
+++ b/zds/tutorialv2/views/published.py
@@ -874,18 +874,22 @@ def post(self, request, *args, **kwargs):
             raise Http404('Identifiant manquant ou conversion en entier impossible.')
         content = get_object_or_404(PublishableContent, pk=content_pk)
 
-        alert = Alert(
-            author=request.user,
-            content=content,
-            scope='CONTENT',
-            text=request.POST['signal_text'],
-            pubdate=datetime.now())
-        alert.save()
-
-        human_content_type = TYPE_CHOICES_DICT[content.type].lower()
-        messages.success(
-            self.request,
-            _('Ce {} a bien été signalé aux modérateurs.').format(human_content_type))
+        if len(request.POST['signal_text'].strip()) == 0:
+            messages.error(request, _('La raison du signalement ne peut pas être vide.'))
+        else:
+            alert = Alert(
+                author=request.user,
+                content=content,
+                scope='CONTENT',
+                text=request.POST['signal_text'],
+                pubdate=datetime.now())
+            alert.save()
+
+            human_content_type = TYPE_CHOICES_DICT[content.type].lower()
+            messages.success(
+                self.request,
+                _('Ce {} a bien été signalé aux modérateurs.').format(human_content_type))
+
         return redirect(content.get_absolute_url_online())
 
 
@@ -942,15 +946,19 @@ def post(self, request, *args, **kwargs):
             raise Http404("Impossible de convertir l'identifiant en entier.")
         reaction = get_object_or_404(ContentReaction, pk=reaction_pk)
 
-        alert = Alert(
-            author=request.user,
-            comment=reaction,
-            scope=reaction.related_content.type,
-            text=request.POST['signal_text'],
-            pubdate=datetime.now())
-        alert.save()
+        if len(request.POST['signal_text'].strip()) == 0:
+            messages.error(request, _('La raison du signalement ne peut pas être vide.'))
+        else:
+            alert = Alert(
+                author=request.user,
+                comment=reaction,
+                scope=reaction.related_content.type,
+                text=request.POST['signal_text'],
+                pubdate=datetime.now())
+            alert.save()
+
+            messages.success(self.request, _('Ce commentaire a bien été signalé aux modérateurs.'))
 
-        messages.success(self.request, _('Ce commentaire a bien été signalé aux modérateurs.'))
         return redirect(reaction.get_absolute_url())
 
 


Test patch: