]> git.madduck.net Git - etc/taskwarrior.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Tests: Add tests for timezone aware datetimes
authorTomas Babej <tomasbabej@gmail.com>
Fri, 6 Feb 2015 21:50:06 +0000 (22:50 +0100)
committerTomas Babej <tomasbabej@gmail.com>
Sat, 7 Feb 2015 10:35:41 +0000 (11:35 +0100)
tasklib/tests.py

index eb199487c0d811f019d7f91ea4a455ea7561923a..f7b9a2724614ba2004fdd4b6a2b4c492956eb530 100644 (file)
@@ -9,7 +9,7 @@ import shutil
 import tempfile
 import unittest
 
-from .task import TaskWarrior, Task
+from .task import TaskWarrior, Task, local_zone, DATE_FORMAT
 
 # http://taskwarrior.org/docs/design/task.html , Section: The Attributes
 TASK_STANDARD_ATTRS = (
@@ -495,6 +495,14 @@ class TaskTest(TasklibTest):
         for deserializer in deserializers:
             self.assertTrue(deserializer('') in (None, [], set()))
 
+    def test_normalizers_returning_empty_string_for_none(self):
+        # Test that any normalizer can handle None as a valid value
+        t = Task(self.tw)
+        normalizers = [getattr(t, normalizer_name) for normalizer_name in
+                       filter(lambda x: x.startswith('normalize_'), dir(t))]
+        for normalizer in normalizers:
+            normalizer(None)
+
 
 class TaskFromHookTest(TasklibTest):
 
@@ -547,6 +555,75 @@ class TaskFromHookTest(TasklibTest):
         self.assertTrue(any(t.export_data() == expected
                             for expected in allowed_output))
 
+class TimezoneAwareDatetimeTest(TasklibTest):
+
+    def setUp(self):
+        super(TimezoneAwareDatetimeTest, self).setUp()
+        self.zone = local_zone
+        self.localdate_naive = datetime.datetime(2015,2,2)
+        self.localtime_naive = datetime.datetime(2015,2,2,0,0,0)
+        self.localtime_aware = self.zone.localize(self.localtime_naive)
+        self.utctime_aware = self.localtime_aware.astimezone(pytz.utc)
+
+    def test_timezone_naive_datetime_setitem(self):
+        t = Task(self.tw, description="test task")
+        t['due'] = self.localtime_naive
+        self.assertEqual(t['due'], self.localtime_aware)
+
+    def test_timezone_naive_datetime_using_init(self):
+        t = Task(self.tw, description="test task", due=self.localtime_naive)
+        self.assertEqual(t['due'], self.localtime_aware)
+
+    def test_filter_by_naive_datetime(self):
+        t = Task(self.tw, description="task1", due=self.localtime_naive)
+        t.save()
+        matching_tasks = self.tw.tasks.filter(due=self.localtime_naive)
+        self.assertEqual(len(matching_tasks), 1)
+
+    def test_serialize_naive_datetime(self):
+        t = Task(self.tw, description="task1", due=self.localtime_naive)
+        self.assertEqual(json.loads(t.export_data())['due'], 
+                         self.utctime_aware.strftime(DATE_FORMAT))
+
+    def test_timezone_naive_date_setitem(self):
+        t = Task(self.tw, description="test task")
+        t['due'] = self.localdate_naive
+        self.assertEqual(t['due'], self.localtime_aware)
+
+    def test_timezone_naive_date_using_init(self):
+        t = Task(self.tw, description="test task", due=self.localdate_naive)
+        self.assertEqual(t['due'], self.localtime_aware)
+
+    def test_filter_by_naive_date(self):
+        t = Task(self.tw, description="task1", due=self.localdate_naive)
+        t.save()
+        matching_tasks = self.tw.tasks.filter(due=self.localdate_naive)
+        self.assertEqual(len(matching_tasks), 1)
+
+    def test_serialize_naive_date(self):
+        t = Task(self.tw, description="task1", due=self.localdate_naive)
+        self.assertEqual(json.loads(t.export_data())['due'], 
+                         self.utctime_aware.strftime(DATE_FORMAT))
+
+    def test_timezone_aware_datetime_setitem(self):
+        t = Task(self.tw, description="test task")
+        t['due'] = self.localtime_aware
+        self.assertEqual(t['due'], self.localtime_aware)
+
+    def test_timezone_aware_datetime_using_init(self):
+        t = Task(self.tw, description="test task", due=self.localtime_aware)
+        self.assertEqual(t['due'], self.localtime_aware)
+
+    def test_filter_by_aware_datetime(self):
+        t = Task(self.tw, description="task1", due=self.localtime_aware)
+        t.save()
+        matching_tasks = self.tw.tasks.filter(due=self.localtime_aware)
+        self.assertEqual(len(matching_tasks), 1)
+
+    def test_serialize_aware_datetime(self):
+        t = Task(self.tw, description="task1", due=self.localtime_aware)
+        self.assertEqual(json.loads(t.export_data())['due'], 
+                         self.utctime_aware.strftime(DATE_FORMAT))
 
 class AnnotationTest(TasklibTest):