diff options
Diffstat (limited to 'tests/integration/test_upload.py')
-rw-r--r-- | tests/integration/test_upload.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/tests/integration/test_upload.py b/tests/integration/test_upload.py new file mode 100644 index 0000000..651aedf --- /dev/null +++ b/tests/integration/test_upload.py @@ -0,0 +1,84 @@ +import gzip +from pathlib import Path + +import pytest +from sqlalchemy import select, func +from webtest import Upload + +from fietsboek import models + + +@pytest.fixture() +def logged_in(dbsession, testapp, route_path): + user = models.User(email='foo@bar.com', is_verified=True) + user.set_password("foobar") + dbsession.add(user) + + login = testapp.get(route_path('login')) + form = login.form + form['email'] = 'foo@bar.com' + form['password'] = 'foobar' + response = form.submit() + assert response.status_code == 302 + + +def load_gpx_asset(filename): + asset_dir = Path(__file__).parent.parent / 'assets' + test_file = asset_dir / filename + with gzip.open(test_file, 'rb') as fobj: + return fobj.read() + + +def test_upload_forbidden(testapp, route_path): + upload_form = testapp.get(route_path('upload'), status="4*") + + +def test_upload(testapp, dbsession, route_path, logged_in): + # Step 1: Go to the upload form + upload_site = testapp.get(route_path('upload')) + + # Step 2: Fill it out + upload_form = upload_site.form + upload_form['gpx'] = Upload('super_track.gpx', load_gpx_asset('Teasi_1.gpx.gz')) + result = upload_form.submit().maybe_follow() + + # Step 3: We are now on the "Finish upload" page + assert "<h1>Upload</h1>" in result.text + + finish_form = result.forms[0] + finish_form["title"].value = "FoOoOo Bar's Testtrack" + finish_form["description"].value = "Super descriptive text!" + # The tagged-friend[] has a disabled attribute, which webtest does not + # respect. Therefore, we need to manually remove it: + finish_form.field_order = [ + (name, field) for (name, field) in finish_form.field_order if name != "tagged-friend[]" + ] + + result = finish_form.submit().maybe_follow() + assert "<h1>FoOoOo Bar's Testtrack</h1>" in result.text + + # Step 4: Ensure the track is stored right + track = dbsession.execute(select(models.Track)).scalar_one() + assert track.title == "FoOoOo Bar's Testtrack" + assert track.description == "Super descriptive text!" + + +def test_upload_cancel(testapp, dbsession, route_path, logged_in): + # Step 1: Go to the upload form + upload_site = testapp.get(route_path('upload')) + + # Step 2: Fill it out + upload_form = upload_site.form + upload_form['gpx'] = Upload('super_track.gpx', load_gpx_asset('Teasi_1.gpx.gz')) + result = upload_form.submit().maybe_follow() + + # Step 3: We are now on the "Finish upload" page + assert "<h1>Upload</h1>" in result.text + + cancel_form = result.forms['cancelForm'] + result = cancel_form.submit().maybe_follow() + assert "Upload cancelled" in result.text + + # Step 4: Ensure the track is deleted again + uploads = dbsession.execute(select(func.count()).select_from(models.Upload)).scalar() + assert uploads == 0 |