diff options
| -rw-r--r-- | tests/conftest.py | 32 | 
1 files changed, 26 insertions, 6 deletions
diff --git a/tests/conftest.py b/tests/conftest.py index a91d2f4..8f7f77c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,6 +9,8 @@ import pytest  import transaction  import webtest +from sqlalchemy import delete, select +  from fietsboek import main  from fietsboek import models  from fietsboek.models.meta import Base @@ -145,7 +147,7 @@ def route_path(app_request):  @pytest.fixture() -def logged_in(dbsession, testapp, route_path): +def logged_in(testapp, route_path, dbsession, tm):      """      A fixture that represents a logged in state. @@ -153,14 +155,32 @@ def logged_in(dbsession, testapp, route_path):      Returns the user that was logged in.      """ -    user = models.User(email='foo@bar.com', is_verified=True) -    user.set_password("foobar") -    dbsession.add(user) +    tm.abort() + +    with tm: +        user = models.User(email='foo@barre.com', is_verified=True) +        user.set_password("foobar") +        dbsession.add(user) +        dbsession.flush() +        user_id = user.id + +    tm.begin() +    tm.doom()      login = testapp.get(route_path('login'))      form = login.form -    form['email'] = 'foo@bar.com' +    form['email'] = 'foo@barre.com'      form['password'] = 'foobar'      response = form.submit()      assert response.status_code == 302 -    return user + +    try: +        # Make sure to return an object that is not bound to the wrong db +        # session by re-fetching it with the proper fixture session: +        yield dbsession.execute(select(models.User).filter_by(id=user_id)).scalar_one() +    finally: +        tm.abort() +        with tm: +            dbsession.execute(delete(models.User).filter_by(id=user_id)) +        tm.begin() +        tm.doom()  | 
