Skip to content

Commit 65aca07

Browse files
committed
More timezone tests for #254.
1 parent 8e3e8db commit 65aca07

File tree

4 files changed

+39
-13
lines changed

4 files changed

+39
-13
lines changed

tests/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import py.path
77
import pytest
8+
from utils import monkeypatch_tz
89
from utils import reload_module
910

1011
from reader import make_reader as original_make_reader

tests/test_parser.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,9 @@ def test_parse_returns_etag_last_modified(
370370

371371

372372
@pytest.mark.parametrize('tz', ['UTC', 'Europe/Helsinki'])
373-
# timt.tzset() does not exist on Windows
373+
# time.tzset() does not exist on Windows
374374
@pytest.mark.skipif("os.name == 'nt'")
375-
def test_parse_local_timezone(monkeypatch, request, parse, tz, data_dir):
375+
def test_parse_local_timezone(monkeypatch_tz, request, parse, tz, data_dir):
376376
"""parse() return the correct dates regardless of the local timezone."""
377377

378378
feed_path = data_dir.join('full.atom')
@@ -381,11 +381,7 @@ def test_parse_local_timezone(monkeypatch, request, parse, tz, data_dir):
381381
expected = {'url_base': url_base, 'rel_base': rel_base}
382382
exec(feed_path.new(ext='.atom.py').read(), expected)
383383

384-
import time
385-
386-
request.addfinalizer(time.tzset)
387-
monkeypatch.setenv('TZ', tz)
388-
time.tzset()
384+
monkeypatch_tz(tz)
389385
feed, _, _, _ = parse(str(feed_path))
390386
assert feed.updated == expected['feed'].updated
391387

tests/test_reader.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3122,7 +3122,7 @@ def test_entry_read_important_modified_gets_set_to_now(reader, flag):
31223122

31233123
@pytest.mark.parametrize('flag', ['read', 'important'])
31243124
@rename_argument('reader', 'reader_with_one_feed')
3125-
def test_entry_read_important_modified_argument(reader, flag):
3125+
def test_entry_read_important_modified_argument(reader, flag, monkeypatch_tz):
31263126
from datetime import datetime
31273127

31283128
reader.update_feeds()
@@ -3134,12 +3134,18 @@ def test_entry_read_important_modified_argument(reader, flag):
31343134
entry, modified=datetime(2010, 1, 1, tzinfo=timezone(timedelta(hours=-2)))
31353135
)
31363136
entry = next(reader.get_entries())
3137-
assert getattr(entry, f'{flag}_modified') == datetime(
3138-
2010, 1, 1, 2, tzinfo=timezone.utc
3139-
)
3140-
3141-
# TODO: test naive datetime handling (by mocking the system timezone?)
3137+
assert getattr(entry, f'{flag}_modified') == utc_datetime(2010, 1, 1, 2)
31423138

31433139
getattr(reader, f'mark_entry_as_{flag}')(entry, modified=None)
31443140
entry = next(reader.get_entries())
31453141
assert getattr(entry, f'{flag}_modified') is None
3142+
3143+
monkeypatch_tz('UTC')
3144+
getattr(reader, f'mark_entry_as_{flag}')(entry, modified=datetime(2010, 1, 1, 4))
3145+
entry = next(reader.get_entries())
3146+
assert getattr(entry, f'{flag}_modified') == utc_datetime(2010, 1, 1, 4)
3147+
3148+
monkeypatch_tz('Etc/GMT+6')
3149+
getattr(reader, f'mark_entry_as_{flag}')(entry, modified=datetime(2010, 1, 1))
3150+
entry = next(reader.get_entries())
3151+
assert getattr(entry, f'{flag}_modified') == utc_datetime(2010, 1, 1, 6)

tests/utils.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import importlib
33
import inspect
44
import os.path
5+
import time
56
from datetime import datetime
67
from datetime import timezone
78
from urllib.parse import urlparse
@@ -75,6 +76,28 @@ def reload_module(monkeypatch):
7576
reloader.undo()
7677

7778

79+
class TZSetter:
80+
def __init__(self, monkeypatch):
81+
self.monkeypatch = monkeypatch
82+
83+
def __call__(self, tz):
84+
self.monkeypatch.setenv('TZ', tz)
85+
time.tzset()
86+
87+
def undo(self):
88+
self.monkeypatch.undo()
89+
time.tzset()
90+
91+
92+
@pytest.fixture
93+
def monkeypatch_tz(monkeypatch):
94+
tzsetter = TZSetter(monkeypatch)
95+
try:
96+
yield tzsetter
97+
finally:
98+
tzsetter.undo()
99+
100+
78101
# FIXME: explain what this is
79102
# https://github.com/lemon24/reader/issues/233
80103

0 commit comments

Comments
 (0)