Development #49009
non déterminisme dans les tests
Début:
01 décembre 2020
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Les utilisateurs sont triés par flag is_active et username, si is_active et username sont identiques pour tous, l'order est indéterminé, ça gêne dans login().
Message d'erreur AssertionError Pile d'exécution db = None, app = <django_webtest.DjangoTestApp object at 0x7f462ce017b8> def test_login_inactive_user(db, app): user1 = User.objects.create(username='john.doe') user1.set_password('john.doe') user1.save() user2 = User.objects.create(username='john.doe') user2.set_password('john.doe') user2.save() > login(app, user1) tests/test_login.py:50: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ app = <django_webtest.DjangoTestApp object at 0x7f462ce017b8> user = <User: 'john.doe (18a07c)'>, path = None, password = None remember_me = None, args = None, kwargs = None, fail = False def login(app, user, path=None, password=None, remember_me=None, args=None, kwargs=None, fail=False): if path: args = args or [] kwargs = kwargs or {} path = resolve_url(path, *args, **kwargs) login_page = app.get(path, status=302).maybe_follow() else: login_page = app.get(reverse('auth_login')) assert login_page.request.path == reverse('auth_login') form = login_page.form username = user.username if hasattr(user, 'username') else user form.set('username', username) # password is supposed to be the same as username form.set('password', password or (user.clear_password if hasattr(user, 'clear_password') else username)) if remember_me is not None: form.set('remember_me', bool(remember_me)) response = form.submit(name='login-password-submit') if fail: assert response.status_code == 200 assert '_auth_user_id' not in app.session else: response = response.follow() if path: assert response.request.path == path else: assert response.request.path == reverse('auth_homepage') assert '_auth_user_id' in app.session > assert not hasattr(user, 'id') or (app.session['_auth_user_id'] == str(user.id)) E AssertionError tests/utils.py:65: AssertionError
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Fichier 0001-backends-define-a-total-ordering-for-user-s-queryset.patch 0001-backends-define-a-total-ordering-for-user-s-queryset.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Emmanuel Cazenave il y a plus de 3 ans
Pourquoi tu changes pas juste le username de user2 dans test_login_inactive_user ?
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Emmanuel Cazenave a écrit :
Pourquoi tu changes pas juste le username de user2 dans test_login_inactive_user ?
Parce que le test vise justement à vérifier qu'un utilisateur inactif avec le même username est choisi à la place du premier, la seule autre solution est de virer ce test qu'on pourrait juger inutile.
Mis à jour par Emmanuel Cazenave il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Non mais d'accord.
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 5371f986b69ccfd1796b5df609c51fc285cc4234 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Tue Dec 1 12:28:01 2020 +0100 backends: define a total ordering for user's querysets (#49009)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
backends: define a total ordering for user's querysets (#49009)