Projet

Général

Profil

Bug #14691

La contrainte obligatoire d'un champs liste en bouton radio dans un formulaire backoffice n'est pas appliquée

Ajouté par Mikaël Ates il y a plus de 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
20 janvier 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Dans un champs liste déroulante, le premier élément de la liste est présélectionné, alors qu'en bouton radio aucun élément n'est préselectionné, que le champs soit obligatoire ou non.

Pour un champs obligatoire qui est une liste en bouton radio dans un formulaire en front office, la contrainte est appliquée si l'usager ne fait pas un choix d'élément, le formulaire affiche une erreur suite au submit.
Pour ce même champs utilisé dans un formulaire affiché en backoffice, la contrainte n'est pas appliquée, le formulaire est passant même si aucun choix dans la liste n'est fait.

Formulaire frontoffice avec bouton radio et contrainte bien appliquée :
https://demarches-grandlyon.dev.entrouvert.org/backoffice/forms/8/fields/1/
https://demarches-grandlyon.dev.entrouvert.org/demarches-usager/test/

Formulaire backoffice avec bouton radio et contrainte non appliquée :
https://demarches-grandlyon.dev.entrouvert.org/backoffice/workflows/4/status/1/items/1/fields/3/
https://demarches-grandlyon.dev.entrouvert.org/backoffice/management/valider-mon-identite/11/


Fichiers

Révisions associées

Révision 7a2d4999 (diff)
Ajouté par Frédéric Péters il y a presque 7 ans

workflows: fix handling of prefilled+required radio fields in forms (#14691)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 7 ans

  • Assigné à mis à Frédéric Péters
#2

Mis à jour par Frédéric Péters il y a plus de 7 ans

--- a/wcs/wf/form.py
+++ b/wcs/wf/form.py
@@ -164,8 +164,6 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
             if v:
                 form.get_widget('f%s' % field.id).set_value(v)
                 req.form['f%s' % field.id] = v
-            else:
-                form.get_widget('f%s' % field.id).clear_error()

     def submit_form(self, form, formdata, user, evo):
         if not self.formdef:

Mais je n'ai pas souvenir du pourquoi de ce clear_error(), et on n'a pas de tests qui passaient dans le clear_error(), donc pas sûr de ce que ça pourrait casser.

#3

Mis à jour par Frédéric Péters il y a presque 7 ans

Repris avec un test détaillant le cas d'erreur; si jamais ça cassait quelque chose on pourra au moins corriger sans risquer de perdre ce cas.

#4

Mis à jour par Frédéric Péters il y a presque 7 ans

Repris avec une modification aux tests (que les sessions soient éclatées de manière systématique).

#5

Mis à jour par Thomas Noël il y a presque 7 ans

Dans le test, je préférerai que le prefill se fasse avec une valeur non vide, genre "d", parce que dans le code on a des trucs genre "if v:" :

2966             # mimick special case: https://dev.entrouvert.org/issues/14691
2967             # item field displayed as radio buttons, with prefill of a value
2968             # that doesn't exist.
2969             fields.ItemField(
2970                 id='2', label='Test2', type='item',
2971                 prefill={'type': 'string', 'value': 'd'},    <-- ici
2972                 show_as_radio=True,
2973                 varname='radio',
2974                 items=['a', 'b', 'c'], required=True))

mais bon, peut-être que c'est pas important.

Et donc avec ou sans ça, ack.

#6

Mis à jour par Frédéric Péters il y a presque 7 ans

  • Statut changé de En cours à Résolu (à déployer)

En fait c'est important que ça soit vide pour simuler le cas.

En mettant une valeur, le test marcherait sans même le patch, parce qu'on n'entrerait justement pas dans le code supprimé :

-            else:
-                form.get_widget('f%s' % field.id).clear_error()
commit 7a2d4999efa96a404753071886d9887d1d0fe20c
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Wed Jan 25 23:09:40 2017 +0100

    workflows: fix handling of prefilled+required radio fields in forms (#14691)
#7

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF