aboutsummaryrefslogtreecommitdiff
path: root/tests/integration/test_upload.py
blob: 651aedf1f87e5aab919ab9ce51fb05e2d6bb5734 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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&#39;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