Skip to content
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

Open
wants to merge 2 commits into
base: dev
Choose a base branch
from

Conversation

philippemilink
Copy link
Member

Fix #6596

Cette PR fait plusieurs choses :

  • ajout de tests pour vérifier que les éléments à afficher dans la barre latérale des contenus sont bien affichés uniquement sur les bonnes pages
  • correction de l'affichage La version X est identique à cette version
  • affichage de Exports du contenu sur la page publique des contenus
  • amélioration du code dans 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).

@philippemilink philippemilink added the Bloquant Ticket qui doit être traité avant la prochaine mise à jour label Mar 31, 2024
@philippemilink philippemilink added this to En développement in Suivi des PR via automation Mar 31, 2024
@philippemilink philippemilink moved this from En développement to En attente de QA in Suivi des PR Mar 31, 2024
@philippemilink philippemilink changed the title Teste et corrige l'affiche de quelques éléments de la sidebar des contenus Teste et corrige l'affichage de quelques éléments de la sidebar des contenus Mar 31, 2024
@coveralls
Copy link

Coverage Status

coverage: 88.765% (+0.01%) from 88.752%
when pulling ba616f8 on philippemilink:fix-sidebar-actions
into c232671 on zestedesavoir:dev.

Copy link
Contributor

@Arnaud-D Arnaud-D left a 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. ^^

Comment on lines +26 to +37
{% 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" }}
Copy link
Contributor

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.

Comment on lines +33 to +154
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"])
Copy link
Contributor

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.

Comment on lines +4 to +8
def request_validation(content):
"""Emulate a proper validation request."""
ValidationFactory(content=content, status="PENDING")
content.sha_validation = content.sha_draft
content.save()
Copy link
Contributor

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.

Suivi des PR automation moved this from En attente de QA to Modification demandée Apr 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bloquant Ticket qui doit être traité avant la prochaine mise à jour
Projects
Suivi des PR
  
Modification demandée
Development

Successfully merging this pull request may close these issues.

Faire apparaître la section Administration dans la version publique des contenus
3 participants