Repository: zestedesavoir/zds-site

Issue:
Billets précédents et suivants : uniquement ceux choisis par le Staff
[Discussion sur le forum](https://zestedesavoir.com/forums/sujet/14090/bug-dans-les-billets-recents/)

> Les billets écrits ne sont pas validés avant publication par le Staff, n’importe quel membre peut publier son billet quand il le souhaite. Par contre, les billets affichés sur la page d’accueil sont ceux sélectionnés par le Staff, ce qui n’a pas été le cas de "L’hygiènisme une bombe à retardement" pour l’instant.
> 
> Il serait à mon avis souhaitable et cohérent que les liens Précédent et Suivant en bas des billets ne proposent que les billets sélectionnés par le Staff.

Il faut ajouter dans le fichier `zds/tutorialv2/views/published.py` quelque chose comme : 

```py
if self.current_content_type == 'OPINION':
    queryset_pagination = queryset_pagination.filter(content__sha_picked=F('sha_public'))
```

au niveau des ces lignes : 

https://github.com/zestedesavoir/zds-site/blob/c4d3dd39c6a780054113d5185fb83bc82f6753be/zds/tutorialv2/views/published.py#L108-L117

Il faut ajouter au tout début du fichier `from django.db.models import F`.


Discussion:
Je prends ;)
alors j'ai essayé de le régler, et si c'est bon, c'est réglé alors !
Attention au test_opinion_link_is_not_related_to_the_author, il est à mettre à jour en conséquence
Pour info, ce travail est en attente de reprise, donc n'importe qui peut reprendre ce sujet, quitte à s'inspirer du travail déjà effectué.

Resolving patch:
diff --git a/zds/tutorialv2/views/display.py b/zds/tutorialv2/views/display.py
--- a/zds/tutorialv2/views/display.py
+++ b/zds/tutorialv2/views/display.py
@@ -1,5 +1,5 @@
 import logging
-
+from django.db.models import F
 from django.conf import settings
 from django.http import Http404
 from django.utils.translation import gettext_lazy as _
@@ -86,6 +86,8 @@ def get_context_data(self, **kwargs):
                 content_type=self.current_content_type, must_redirect=False
             )
 
+            if self.current_content_type == "OPINION":
+                queryset_pagination = queryset_pagination.filter(content__sha_picked=F("sha_public"))
             context["previous_content"] = (
                 queryset_pagination.filter(publication_date__lt=self.public_content_object.publication_date)
                 .order_by("-publication_date")


Test patch:
diff --git a/zds/tutorialv2/tests/tests_views/tests_published.py b/zds/tutorialv2/tests/tests_views/tests_published.py
--- a/zds/tutorialv2/tests/tests_views/tests_published.py
+++ b/zds/tutorialv2/tests/tests_views/tests_published.py
@@ -22,6 +22,7 @@
     HelpWritingFactory,
 )
 from zds.tutorialv2.models.database import (
+    PickListOperation,
     PublishableContent,
     Validation,
     PublishedContent,
@@ -1878,13 +1879,52 @@ def test_opinion_link_is_not_related_to_the_author(self):
         into accounts and not only the ones of the author.
         """
 
+        opinion_not_picked = PublishedContentFactory(author_list=[self.user_author], type="OPINION")
+        opinion_not_picked.save()
+
         user_1_opinion_1 = PublishedContentFactory(author_list=[self.user_author], type="OPINION")
-        user_2_opinion_1 = PublishedContentFactory(author_list=[self.user_guest], type="OPINION")
-        user_1_opinion_2 = PublishedContentFactory(author_list=[self.user_author], type="OPINION")
+        user_1_opinion_1.sha_picked = user_1_opinion_1.sha_public
         user_1_opinion_1.save()
+
+        opinion_not_picked = PublishedContentFactory(author_list=[self.user_author], type="OPINION")
+        opinion_not_picked.save()
+
+        user_2_opinion_1 = PublishedContentFactory(author_list=[self.user_guest], type="OPINION")
+        user_2_opinion_1.sha_picked = user_2_opinion_1.sha_public
         user_2_opinion_1.save()
+
+        opinion_not_picked = PublishedContentFactory(author_list=[self.user_author], type="OPINION")
+        opinion_not_picked.save()
+
+        user_1_opinion_2 = PublishedContentFactory(author_list=[self.user_author], type="OPINION")
+        user_1_opinion_2.sha_picked = user_1_opinion_2.sha_public
         user_1_opinion_2.save()
 
+        opinion_not_picked = PublishedContentFactory(author_list=[self.user_author], type="OPINION")
+        opinion_not_picked.save()
+
+        PickListOperation.objects.create(
+            content=user_1_opinion_1,
+            operation="PICK",
+            staff_user=self.user_staff,
+            operation_date=datetime.datetime.now(),
+            version=user_1_opinion_1.sha_public,
+        )
+        PickListOperation.objects.create(
+            content=user_2_opinion_1,
+            operation="PICK",
+            staff_user=self.user_staff,
+            operation_date=datetime.datetime.now(),
+            version=user_2_opinion_1.sha_public,
+        )
+        PickListOperation.objects.create(
+            content=user_1_opinion_2,
+            operation="PICK",
+            staff_user=self.user_staff,
+            operation_date=datetime.datetime.now(),
+            version=user_1_opinion_2.sha_public,
+        )
+
         result = self.client.get(
             reverse("opinion:view", kwargs={"pk": user_1_opinion_2.pk, "slug": user_1_opinion_2.slug})
         )