From 7f94efd504837375411eea3b6dfb0cd9659f8014 Mon Sep 17 00:00:00 2001 From: Markus Holtermann Date: Fri, 25 Jan 2013 00:38:34 +0100 Subject: Fix day-change bugs in bvggrabber.api.Departure --- bvggrabber/api/__init__.py | 16 ++++++----- tests/test_api.py | 66 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 66 insertions(+), 16 deletions(-) diff --git a/bvggrabber/api/__init__.py b/bvggrabber/api/__init__.py index daaeca0..1e31359 100644 --- a/bvggrabber/api/__init__.py +++ b/bvggrabber/api/__init__.py @@ -21,14 +21,14 @@ class Departure(): def __init__(self, start, end, when, line): self.start = start self.end = end + self.now = datetime.now() if isinstance(when, (int, float)): - # We assume to get a UNIX timestamp + # We assume to get a UNIX / POSIX timestamp self.when = datetime.fromtimestamp(when) elif isinstance(when, str): self.when = parse(when) - now = datetime.now() - if (self.when - now).total_seconds() < 0: - self.when = self.when.replace(day=self.when.day + 1) + #if (self.when - self.now).total_seconds() < -60: + # self.when = self.when + timedelta(days=1) elif isinstance(when, datetime): self.when = when else: @@ -36,11 +36,13 @@ class Departure(): self.line = line def __str__(self): - return "Start: %s, End: %s, when: %s, line: %s" % ( - self.start, self.end, fullformat(self.when), self.line) + return "Start: %s, End: %s, when: %s, now: %s, line: %s" % ( + self.start, self.end, fullformat(self.when), fullformat(self.now), + self.line) + @property def remaining(self): - return self.when - datetime.now() + return self.when - self.now def to_json(self): pass diff --git a/tests/test_api.py b/tests/test_api.py index bf50865..8493524 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -2,7 +2,7 @@ import time import unittest -from datetime import datetime +from datetime import datetime, timedelta from bvggrabber.api import QueryApi, Departure @@ -16,26 +16,74 @@ class TestQueryApi(unittest.TestCase): class TestDeparture(unittest.TestCase): + def setUp(self): + self.td = timedelta(minutes=10) + def test_timestamp_futur(self): when = time.time() + 10 * 60 dep = Departure("from", "to", when, "line") - self.assertLessEqual(dep.remaining().total_seconds(), 600) - self.assertGreaterEqual(dep.remaining().total_seconds(), 590) + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, 600) + self.assertGreaterEqual(diff, 590) + + def test_timestamp_now(self): + when = time.time() + dep = Departure("from", "to", when, "line") + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, 5) + self.assertGreaterEqual(diff, -5) + + def test_timestamp_past(self): + when = time.time() - 10 * 60 + dep = Departure("from", "to", when, "line") + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, -600) + self.assertGreaterEqual(diff, -610) def test_string_futur(self): + when = datetime.now() + self.td + when = when.strftime('%Y-%m-%d %H:%M:%S') + dep = Departure("from", "to", when, "line") + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, 600) + self.assertGreaterEqual(diff, 590) + + def test_string_now(self): when = datetime.now() - when = when.replace(minute=when.minute + 10) when = when.strftime('%Y-%m-%d %H:%M:%S') dep = Departure("from", "to", when, "line") - self.assertLessEqual(dep.remaining().total_seconds(), 600) - self.assertGreaterEqual(dep.remaining().total_seconds(), 590) + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, 5) + self.assertGreaterEqual(diff, -5) + + def test_string_past(self): + when = datetime.now() - self.td + when = when.strftime('%Y-%m-%d %H:%M:%S') + dep = Departure("from", "to", when, "line") + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, -600) + self.assertGreaterEqual(diff, -610) def test_datetime_futur(self): + when = datetime.now() + self.td + dep = Departure("from", "to", when, "line") + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, 600) + self.assertGreaterEqual(diff, 590) + + def test_datetime_now(self): when = datetime.now() - when = when.replace(minute=when.minute + 10) dep = Departure("from", "to", when, "line") - self.assertLessEqual(dep.remaining().total_seconds(), 600) - self.assertGreaterEqual(dep.remaining().total_seconds(), 590) + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, 5) + self.assertGreaterEqual(diff, -5) + + def test_datetime_past(self): + when = datetime.now() - self.td + dep = Departure("from", "to", when, "line") + diff = dep.remaining.total_seconds() + self.assertLessEqual(diff, -600) + self.assertGreaterEqual(diff, -610) def test_error(self): self.assertRaises(ValueError, Departure, "from", "to", "foo", "line") -- cgit v1.2.3