Projet

Général

Profil

Bug #27997

j'ai un test qui plante, suis-je seul ?

Ajouté par Thomas Noël il y a plus de 5 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
14 novembre 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Chez moi, via tox ou py.test direct :

    def test_field_live_select_content(pub, http_requests):
        FormDef.wipe()
        formdef = FormDef()
        formdef.name = 'Foo'
        formdef.fields = [
            fields.StringField(type='string', id='1', label='Bar', size='40',
                required=True, varname='bar'),
            fields.StringField(type='string', id='2', label='Bar2', size='40',
                required=True, varname='bar2'),
            fields.ItemField(type='item', id='3', label='Foo',
                data_source={
                    'type': 'json',
                    'value': '{% if form_var_bar2 %}http://remote.example.net/json-list?plop={{form_var_bar2}}{% endif %}'
                }),
        ]
        formdef.store()

        app = get_app(pub)
        resp = app.get('/foo/')
        assert 'f1' in resp.form.fields
        assert 'f2' in resp.form.fields
        assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true'
        assert resp.html.find('div', {'data-field-id': '3'}).find('select')
        resp.form['f1'] = 'hello'
        live_resp = app.post('/foo/live', params=resp.form.submit_fields())
        assert live_resp.json['result']['1']['visible']
        assert live_resp.json['result']['2']['visible']
        assert live_resp.json['result']['3']['visible']
        assert not 'items' in live_resp.json['result']['3']
        resp.form['f2'] = 'plop'
        live_resp = app.post('/foo/live?modified_field_id=2', params=resp.form.submit_fields())
        assert live_resp.json['result']['1']['visible']
        assert live_resp.json['result']['2']['visible']
        assert live_resp.json['result']['3']['visible']
        assert 'items' in live_resp.json['result']['3']
        resp.form['f3'].options = []
        for item in live_resp.json['result']['3']['items']:
            # simulate javascript filling the <select>
            resp.form['f3'].options.append((item['id'], False, item['text']))
        resp.form['f3'] = 'a'
        resp = resp.form.submit('submit')
        assert 'Check values then click submit.' in resp.body
        assert 'name="f1"' in resp.body
        assert 'name="f2"' in resp.body
        assert 'name="f3"' in resp.body
        resp = resp.form.submit('submit')
        resp = resp.follow()
        formdata = formdef.data_class().select()[0]
>       assert formdata.data['1'] == 'hello'
E       AssertionError: assert 'bye' == 'hello'
E         - bye
E         + hello

tests/test_form_pages.py:5520: AssertionError

Déjà vu par quelqu'un ? Ça m'énerve. Que me manque-t-il sur ma machine...


Fichiers

Révisions associées

Révision 3b310308 (diff)
Ajouté par Frédéric Péters il y a plus de 5 ans

tests: make sure to wipe formdatas before live select content test (#27997)

Historique

#1

Mis à jour par Thomas Noël il y a plus de 5 ans

Sur idée et conseil de Frédéric, ça passe avec

diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py
index 5cc94010..3bee557c 100644
--- a/tests/test_form_pages.py
+++ b/tests/test_form_pages.py
@@ -5485,6 +5485,7 @@ def test_field_live_select_content(pub, http_requests):
             }),
     ]
     formdef.store()
+    formdef.data_class().wipe()

     app = get_app(pub)
     resp = app.get('/foo/')

Mais je suis quand même le seul à avoir le soucis, ça doit être lié à quelque chose sur ma machine et/ou dans le venv où est mon tox 2.9...

#2

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

C'est en sql ou pickle que tu as le bug ? C'est souvent lié à des non déterminismes, ici dans l'ordre des formdatas renvoyés par StorableObject.select() ailleurs l'ordre des clés renvoyées par dict.keys().

#3

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

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

Je me suis permis de pousser un patch avec cette modification,

commit 3b3103087d76533676e5168a0eea9312abf9a7e5
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Thu Nov 15 09:08:01 2018 +0100

    tests: make sure to wipe formdatas before live select content test (#27997)
#4

Mis à jour par Thomas Noël il y a plus de 5 ans

En SQL le FormDef.wipe() supprime les tables et dont les formdata qui "trainent", ce que ne fait pas le wipe en pickle, d'où le problème (chez moi, mais je sais pas pourquoi pas chez vous, bande de chanceux)

tests/test_form_pages.py::test_field_live_select_content[pickle] FAILED                      
tests/test_form_pages.py::test_field_live_select_content[sql] PASSED                         
tests/test_form_pages.py::test_field_live_select_content[pickle-templates] FAILED            

Comme patch, pour suivre ce que font les autres tests, je propose de donner un nom différenciant au formdef du test.

#5

Mis à jour par Thomas Noël il y a plus de 5 ans

Ah, commentaire et patch superflu, merci Frédéric.

#6

Mis à jour par Thomas Noël il y a plus de 5 ans

  • Statut changé de Solution proposée à Fermé

Formats disponibles : Atom PDF