tests de workflow (#83593) #945
Loading…
Reference in New Issue
No description provided.
Delete Branch "wip/83593-testdef-socle-de-base-pour-les-w"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
WIP: tests de workflow (#83593(to WIP: tests de workflow (#83593)5fb2b19be0
toc0ca879cbf
c0ca879cbf
tofebf111b6c
febf111b6c
toafe27a29b5
afe27a29b5
to30aa717c61
30aa717c61
todbb5d28b40
dbb5d28b40
tof37d8ad125
f37d8ad125
to4c4dc4b201
4c4dc4b201
to9a153ef905
9a153ef905
toca989b1ada
ca989b1ada
tofdb98df353
fdb98df353
to85c991a9dd
85c991a9dd
to3d0403f9ae
3d0403f9ae
tod2a14001db
d2a14001db
to9c3624731b
4be86cf637
to6113f76539
6113f76539
to22c65a72a1
22c65a72a1
todfae18fe09
dfae18fe09
toe16517fdaf
e16517fdaf
to437c1c19b7
437c1c19b7
to70056daad3
70056daad3
tocf81a6fda3
cf81a6fda3
tof9a4992a04
f9a4992a04
to93472cf035
93472cf035
tod2b7c6880e
d2b7c6880e
toa584e8d614
a584e8d614
toa1fbbb7f21
a1fbbb7f21
tobefef4270b
@ -160,6 +171,8 @@ class TestPage(FormBackOfficeStatusPage):
r += htmltext('<h2>%s</h2>') % self.testdef
r += htmltext('<span class="actions">')
r += htmltext('<a href="edit-data/">%s</a>') % _('Edit data')
if get_publisher().has_site_option('enable-workflow-tests'):
Tout ça est derrière feature flag.
@ -0,0 +105,4 @@
return items
class WorkflowTestItem(XmlStorableObject):
En regardant ce que ça donne niveau trad je me rends compte qu'on va plutôt parler « d'actions de tests », donc cette classe pourrait s'appeler WorkflowTestAction (ça différencierait plus de WorkflowStatusItem dont héritent les actions de wf également). En attente d'avis pour/contre je laisse comme ça
@ -0,0 +237,4 @@
raise WorkflowTestError(_('No email was sent.'))
def fill_admin_form(self, form, formdef):
pass
La suite ce sera de permettre de vérifier le contenu d'un mail (pas évident donc je laisse pour un ticket dédié). En l'état ici on va afficher une popup vide moche pour l'édition de cette action, mais je ne passe pas de temps à améliorer ça puisque c'est transitoire
WIP: tests de workflow (#83593)to tests de workflow (#83593)befef4270b
to42bbacd7fd
598477b387
to42bbacd7fd
42bbacd7fd
to4738f64c4d
4738f64c4d
to3a4745c71b
3a4745c71b
tof1efd6838b
f1efd6838b
to3853420a6d
3853420a6d
toc9c0ec4fcc
@ -0,0 +34,4 @@
self.testdef = testdef
self.formdef = formdef
try:
self.item = [x for x in testdef.workflow_tests.items if x.id == component][0]
Je serais pour appeler ça "action" plutôt que "item" (il y a bien sûr un tas d'existant où ça s'appelle item mais je serais pour les renommer petit à petit). Je le note ici parce que c'est la première apparition mais ça concerne surtout le modèle, item_uuid → action_uuid, etc.
@ -0,0 +50,4 @@
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('edit', _('Edit item')))
C'est sans doute le cas à d'autres endroits mais il manque un
get_response().set_titlte(...)
pour fixer le<title>
de la page; éventuellement il peut être fait dans un _q_lookup ou _q_traverse, pour contenir une valeur un peu générique,@ -26,3 +26,4 @@
from wcs.qommon.form import FileWithPreviewWidget, Form, get_selection_error_text
from wcs.qommon.storage import Equal as XmlEqual
from wcs.qommon.template import TemplateError
from wcs.sql_criterias import Equal
Tu peux juste importer Equal de wcs.qommon.storage et supprimer l'autre, et ça doit s'adapter correctement.
@ -0,0 +57,4 @@
def run(self, formdata, agent_user):
formdata.record_workflow_event = lambda *args, **kwargs: None
formdata.record_workflow_action = lambda *args, **kwargs: None
formdata.store = lambda *args, **kwargs: None
J'ajouterais un commentaire, type
# mock methods so nothing is stored
.@ -0,0 +200,4 @@
status = formdata.get_status()
if status.name != self.status_name:
raise WorkflowTestError(
'Form should be in status "%s" but is in status "%s".' % (self.status_name, status.name)
Pas utile de marquer la chaine pour traduction ?
@ -80,2 +80,4 @@
if depth == 0: # prevents infinite loops
return
if filter_func:
items = [good_item for item in items if (good_item := filter_func(item))]
Je préférerais une réécriture dans le := ; et ça doit être sur deux lignes so be it.
Aussi, "filter_func" mais en fait ça fait filtre + substitution, si je comprends bien, je renommerais.
In fine donc je trouverais plus maintenable,
Je réécris sur deux lignes mais perso je trouve l'usage de := assez élégant dans les listes (et je n'invente rien, c'est un usage recommandé dans la PEP https://peps.python.org/pep-0572/#simplifying-list-comprehensions)
@ -3375,2 +3377,4 @@
return destinations
def collect_for_tests(self, *args, **kwargs):
return None
Sur la classe de base j'ajouterais un commentaire avec le rôle de la méthode, type
Et arrivé ici, ça me ferait remonter à plus haut, et plutôt qu'un filter_func se voulant générique démarrer avec quelque chose de plus orienté, perform_items(..., workflow_test=False), de la sorte,
Ça réduira le nombre d'indirections, qui complexifient la compréhension.
J'ai fait ça sauf pour la partie
self.get_workflow_test_action(item)
où je pense que tu t'es un peu mélangé les pinceaux, je te laisse me dire si tu imaginais autre choseAh oui je voulais juste dire self.get_workflow_test_action(), ça n'était pas explicite c'était parce qu'après avoir écrit un commentiaire sur la méthode collect_for_tests je me disais qu'il y avait tout à gagner à la renommer.
OK c'est fait (et ça donne bien
item.get_workflow_test_action()
(c'est aussi leself.
qui me perturbait))c9c0ec4fcc
tob5898c60de
b5898c60de
to324694a30c
324694a30c
to1b318fd076
1b318fd076
toe75801b395
e75801b395
to65855f0200
Merci pour les remarques, c'est pris en compte
@ -81,1 +81,4 @@
return
if workflow_test:
items = [item.collect_for_tests(formdata) for item in items]
items = [x for x in items if x is not None]
Pour continuer à m'intéresser ici (encore un peu), je pense que je n'aurais simplement pas fait de list comprehension ici.
J'aurais juste ajouté à la boucle,
En effet c'est mieux, appliqué !
65855f0200
to88d1a8ef94
88d1a8ef94
toea9dfaa7bf
ea9dfaa7bf
to03b8e8f20d
(rebasé)
03b8e8f20d
to47ed12f5db
47ed12f5db
tob7b61c7565
b7b61c7565
to47527803ba
47527803ba
to35ff30ac8e
@ -3509,6 +3513,30 @@ class WorkflowStatusItem(XmlSerialisable):
markers_stack.append({'status_id': formdata.status[3:]})
formdata.update_workflow_data({'_markers_stack': markers_stack})
def get_possible_target_options(self):
Cette méthode n'apparait plus utilisée.
En effet j'ai foiré un rebase à un moment, c'est corrigé
35ff30ac8e
to91510c0498
91510c0498
to5db419dba3
5db419dba3
to0305702b39
0305702b39
to3a3ed59748
Voilà c'est rebasé sur main en prenant en compte les changements format de date