-
Notifications
You must be signed in to change notification settings - Fork 161
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Teste et corrige l'affichage de quelques éléments de la sidebar des contenus #6599
Teste et corrige l'affichage de quelques éléments de la sidebar des contenus #6599
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ça marche, mais je préfèrerais qu'on change quelques trucs niveau positionnement des éléments.
Et des suggestions sur le code aussi. ^^
{% if public_actions.show_identical_draft_version_message %} | ||
<li class="inactive"> | ||
<span class="ico-after pin disabled"> | ||
{{ public_actions.messages|get_item:"draft_is_same" }} | ||
</span> | ||
</li> | ||
{% endif %} | ||
|
||
{% if public_actions.show_more_recent_draft_version_link %} | ||
<li> | ||
<a href="{{ public_content_object.get_absolute_url_online }}" class="ico-after online blue"> | ||
{% trans "Voir la page publique" %} | ||
<a href="{{ object.get_absolute_url }}" class="ico-after online blue"> | ||
{{ public_actions.messages|get_item:"draft_is_more_recent" }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je pense que cette mention devrait être tout en haut, avec "Voir la version brouillon". Comme ça pointe vers la même page, il faudrait peut-être transformer ça juste en note d'information (grisée).
C'est peut être aussi le signe qu'il faudrait une section "Version brouillon", comme on a "Version publique".
Je pense qu'être un peu ordonné à ce niveau-là peut améliorer la navigation et la compréhension de l'éditeur.
Faudra ranger la logique d'affichage en Python du bon côté aussi.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai un peu regardé comment faire ça, et j'ai l'impression que ça va demander plus de travail que tout ce qui est déjà fait dans cette PR. Je suis d'accord sur le principe avec toi, mais je pense que ça peut être fait une autre PR.
result = self.client.post( | ||
reverse("content:edit", args=[article.pk, article.slug]), | ||
{ | ||
"title": article.title, | ||
"description": article.description, | ||
"introduction": "Modified introduction", | ||
"conclusion": "Modified conclusion", | ||
"type": article.type, | ||
"subcategory": article.subcategory.first().pk, | ||
"last_hash": versioned.compute_hash(), | ||
}, | ||
follow=False, | ||
) | ||
self.assertEqual(result.status_code, 302) | ||
article.refresh_from_db() # the previous request changes sha_draft | ||
# Public page: | ||
public_page = self.client.get(article.get_absolute_url_online()) | ||
self.assertNotContains(public_page, "Modified introduction") | ||
self.assertNotContains(public_page, PublicActionsState.messages["draft_is_same"]) | ||
self.assertNotContains(public_page, PublicActionsState.messages["public_is_same"]) | ||
self.assertContains(public_page, PublicActionsState.messages["draft_is_more_recent"]) | ||
self.assertContains(public_page, PublicActionsState.messages["export_content"]) | ||
self.assertNotContains(public_page, ValidationActions.messages["validation_is_same"]) | ||
# Draft page: | ||
draft_page = self.client.get(reverse("content:view", args=[article.pk, article.slug]), follow=False) | ||
self.assertContains(draft_page, "Modified introduction") | ||
self.assertNotContains(draft_page, PublicActionsState.messages["draft_is_same"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["public_is_same"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["draft_is_more_recent"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["export_content"]) | ||
self.assertNotContains(draft_page, ValidationActions.messages["validation_is_same"]) | ||
|
||
# Ask validation: | ||
request_validation(article) | ||
# Public page: | ||
public_page = self.client.get(article.get_absolute_url_online()) | ||
self.assertNotContains(public_page, PublicActionsState.messages["draft_is_same"]) | ||
self.assertNotContains(public_page, PublicActionsState.messages["public_is_same"]) | ||
self.assertContains(public_page, PublicActionsState.messages["draft_is_more_recent"]) | ||
self.assertContains(public_page, PublicActionsState.messages["export_content"]) | ||
self.assertNotContains(public_page, ValidationActions.messages["validation_is_same"]) | ||
# Draft page: | ||
draft_page = self.client.get(reverse("content:view", args=[article.pk, article.slug]), follow=False) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["draft_is_same"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["public_is_same"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["draft_is_more_recent"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["export_content"]) | ||
self.assertContains(draft_page, ValidationActions.messages["validation_is_same"]) | ||
# Validation page: | ||
validation_page = self.client.get( | ||
reverse("content:validation-view", args=[article.pk, article.slug]), follow=False | ||
) | ||
self.assertNotContains(validation_page, PublicActionsState.messages["draft_is_same"]) | ||
self.assertNotContains(validation_page, PublicActionsState.messages["public_is_same"]) | ||
self.assertNotContains(validation_page, PublicActionsState.messages["draft_is_more_recent"]) | ||
self.assertNotContains(validation_page, PublicActionsState.messages["export_content"]) | ||
self.assertNotContains(validation_page, ValidationActions.messages["validation_is_same"]) | ||
|
||
# Now a new draft version, to have different version from validation: | ||
versioned = article.load_version() | ||
result = self.client.post( | ||
reverse("content:edit", args=[article.pk, article.slug]), | ||
{ | ||
"title": article.title, | ||
"description": article.description, | ||
"introduction": "Modified introduction again", | ||
"conclusion": "Modified conclusion", | ||
"type": article.type, | ||
"subcategory": article.subcategory.first().pk, | ||
"last_hash": versioned.compute_hash(), | ||
}, | ||
follow=False, | ||
) | ||
self.assertEqual(result.status_code, 302) | ||
article.refresh_from_db() # the previous request changes sha_draft | ||
# Public page: | ||
public_page = self.client.get(article.get_absolute_url_online()) | ||
self.assertNotContains(public_page, "Modified introduction") | ||
self.assertNotContains(public_page, PublicActionsState.messages["draft_is_same"]) | ||
self.assertNotContains(public_page, PublicActionsState.messages["public_is_same"]) | ||
self.assertContains(public_page, PublicActionsState.messages["draft_is_more_recent"]) | ||
self.assertContains(public_page, PublicActionsState.messages["export_content"]) | ||
self.assertNotContains(public_page, ValidationActions.messages["validation_is_same"]) | ||
# Draft page: | ||
draft_page = self.client.get(reverse("content:view", args=[article.pk, article.slug]), follow=False) | ||
self.assertContains(draft_page, "Modified introduction") | ||
self.assertNotContains(draft_page, PublicActionsState.messages["draft_is_same"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["public_is_same"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["draft_is_more_recent"]) | ||
self.assertNotContains(draft_page, PublicActionsState.messages["export_content"]) | ||
self.assertNotContains(draft_page, ValidationActions.messages["validation_is_same"]) | ||
# Validation page: | ||
validation_page = self.client.get( | ||
reverse("content:validation-view", args=[article.pk, article.slug]), follow=False | ||
) | ||
self.assertNotContains(validation_page, PublicActionsState.messages["draft_is_same"]) | ||
self.assertNotContains(validation_page, PublicActionsState.messages["public_is_same"]) | ||
self.assertNotContains(validation_page, PublicActionsState.messages["draft_is_more_recent"]) | ||
self.assertNotContains(validation_page, PublicActionsState.messages["export_content"]) | ||
self.assertNotContains(validation_page, ValidationActions.messages["validation_is_same"]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pas fan de ce test. J'ai été confronté à d'autres tests avec une séquence longue de ce type (il y en a plein dans le module tutorialv2
). Je les ai trouvé dur à faire évoluer.
Je préfère qu'on teste chaque route/vue indépendamment, quitte à faire des fonctions auxilaires pour atteindre les états cibles (par exemple avoir un tuto en validation, avoir un tuto publié avec une version brouillon plus récente, etc.), tester si nécessaire des préconditions pour vérifier qu'on est bien dans l'état souhaité avant le test, puis tester ensuite ce qu'on veut effectivement tester unitairement.
Ici, ça voudrait dire tester séparément la page brouillon, la page publique, etc, éventuellement avec différents sous cas. Il y a un embryon dans ce fichier : tests_contentvalidationview.py
. Le contenu d'une page n'est qu'un test particulier parmi d'autres pour la vue de validation.
Malheureusement, le reste des tests du module ne semble pas structuré dans ce sens, mais on devrait tendre vers ça à mon avis.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai restructuré les tests et, en effet, ça les rend bien plus lisibles.
def request_validation(content): | ||
"""Emulate a proper validation request.""" | ||
ValidationFactory(content=content, status="PENDING") | ||
content.sha_validation = content.sha_draft | ||
content.save() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pour info, je n'avais pas osé mettre cette fonction utilitaire en dehors du fichier de test spécifique où elle a été écrite, parce que je ne suis pas sûr que la manière d'émuler une validation soit suffisante dans d'autres tests que ceux que j'avais considéré à l'époque.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On verra comment ça évolue avec le temps, si on a besoin que cette fonction en fasse plus ou pas.
ba616f8
to
a321048
Compare
a321048
to
e44c558
Compare
Fix #6596
Cette PR fait plusieurs choses :
display/config.py
Contrôle qualité
Faire manuellement ce que fait le test ajouté.
Jouer avec les différents états possibles d'un contenu, afficher les différentes pages et s'assurer qu'il n'y a pas d'éléments incohérents dans la barre latérale (je ne dis pas que cette PR règle tous ces problèmes, ne pas hésiter à rapporter les éventuelles incohérences observées).