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
85
86
87
88
89
90
|
import io
import zipfile
from contextlib import contextmanager
from datetime import datetime
from testutils import load_gpx_asset
from fietsboek import models
from fietsboek.models.track import Visibility
@contextmanager
def added_tracks(tm, dbsession, owner, data_manager):
"""Adds some tracks to the database session.
This function should be used as a context manager and it ensures that the
added tracks are deleted again after the test, to make a clean slate for
the next test.
"""
# The normal transaction is "doomed", so we need to abort it, start a fresh
# one, and then explicitely commit it, otherwise we will not persist the
# objects to the database.
tm.abort()
tracks = []
with tm:
track = models.Track(
owner=owner,
title="Foobar",
visibility=Visibility.PUBLIC,
description="A foo'd track",
badges=[],
link_secret="foobar",
tagged_people=[],
)
track.date = datetime(2022, 3, 14, 9, 26, 54)
dbsession.add(track)
dbsession.flush()
data_manager.initialize(track.id).compress_gpx(load_gpx_asset("MyTourbook_1.gpx.gz"))
tracks.append(track)
track = models.Track(
owner=owner,
title="Barfoo",
visibility=Visibility.PUBLIC,
description="A bar'd track",
badges=[],
link_secret="barfoo",
tagged_people=[],
)
track.date = datetime(2022, 10, 29, 13, 37, 11)
dbsession.add(track)
dbsession.flush()
data_manager.initialize(track.id).compress_gpx(load_gpx_asset("Teasi_1.gpx.gz"))
tracks.append(track)
tm.begin()
tm.doom()
try:
yield tracks
finally:
tm.abort()
with tm:
for track in tracks:
dbsession.delete(track)
tm.begin()
tm.doom()
def test_browse(testapp, dbsession, route_path, logged_in, tm, data_manager):
# Ensure there are some tracks in the database
with added_tracks(tm, dbsession, logged_in, data_manager):
# Now go to the browse page
browse = testapp.get(route_path('browse'))
assert "Foobar" in browse.text
assert "Barfoo" in browse.text
def test_archive(testapp, dbsession, route_path, logged_in, tm, data_manager):
with added_tracks(tm, dbsession, logged_in, data_manager):
archive = testapp.get(
route_path('track-archive', _query=[("track_id[]", "1"), ("track_id[]", "2")])
)
result = io.BytesIO(archive.body)
with zipfile.ZipFile(result, 'r') as zipped:
assert len(zipped.namelist()) == 2
assert "track_1.gpx" in zipped.namelist()
assert "track_2.gpx" in zipped.namelist()
|