Bug #27997
j'ai un test qui plante, suis-je seul ?
0%
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
Historique
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...
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()
.
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)
Mis à jour par Thomas Noël il y a plus de 5 ans
- Fichier 0001-tests-use-specific-formdef.name-for-live-select-test.patch 0001-tests-use-specific-formdef.name-for-live-select-test.patch ajouté
- Statut changé de Résolu (à déployer) à Solution proposée
- Patch proposed changé de Non à Oui
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.
Mis à jour par Thomas Noël il y a plus de 5 ans
Ah, commentaire et patch superflu, merci Frédéric.
tests: make sure to wipe formdatas before live select content test (#27997)