aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/test_util.py
blob: 8f45611070429c2c1637d00b9f32e369c3e4ac53 (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
import gzip
from datetime import timedelta
from pathlib import Path

import pytest
import gpxpy
from markupsafe import Markup

from fietsboek import util


@pytest.mark.parametrize('md_source, expected', [
    ("**foobar**", Markup("<p><strong>foobar</strong></p>")),
    ("*foobar*", Markup("<p><em>foobar</em></p>")),
    ("# foobar", Markup("<h1>foobar</h1>")),
    ("<script>alert('evil')</script>",
     Markup("&lt;script&gt;alert('evil')&lt;/script&gt;")),
])
def test_safe_markdown(md_source, expected):
    assert util.safe_markdown(md_source) == expected


@pytest.mark.parametrize('timestamp, fixed', [
    ("2022-03-14T13:37:42", "2022-03-14T13:37:42"),
    ("2022-03-14T13:37:42Z", "2022-03-14T13:37:42+00:00"),
    ("2022-03-14T13:37:42+02:00", "2022-03-14T13:37:42+02:00"),
])
def test_fix_iso_timestamp(timestamp, fixed):
    assert util.fix_iso_timestamp(timestamp) == fixed


@pytest.mark.parametrize('delta, multiple, expected', [
    (
        timedelta(minutes=42),
        timedelta(minutes=15),
        timedelta(minutes=45),
    ),
    (
        timedelta(minutes=33),
        timedelta(minutes=15),
        timedelta(minutes=30),
    ),
    (
        timedelta(minutes=-12),
        timedelta(minutes=15),
        timedelta(minutes=-15),
    ),
    (
        timedelta(minutes=-31),
        timedelta(minutes=15),
        timedelta(minutes=-30),
    ),
])
def test_round_timedelta_to_multiple(delta, multiple, expected):
    assert util.round_timedelta_to_multiple(delta, multiple) == expected


@pytest.mark.parametrize('gpx_file, offset', [
    ("Teasi_1.gpx.gz", timedelta(hours=2)),
    ("MyTourbook_1.gpx.gz", timedelta(hours=2)),
])
def test_guess_gpx_timezone(gpx_file, offset):
    asset_dir = Path(__file__).parent.parent / 'assets'
    test_file = asset_dir / gpx_file
    with gzip.open(test_file, 'rb') as fobj:
        parsed_gpx = gpxpy.parse(fobj)
    timezone = util.guess_gpx_timezone(parsed_gpx)
    # Here we hope (and assume) that utcoffset is ignored. This is true for
    # datetime.timezone objects, but may not be for other datetime.tzinfo
    # instances.
    assert timezone.utcoffset(None) == offset


@pytest.mark.parametrize('mps, kph', [(1, 3.6), (10, 36)])
def test_mps_to_kph(mps, kph):
    assert util.mps_to_kph(mps) == pytest.approx(kph, 0.1)