X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/ca70e43e55be6a99cf5d2b94301a558c8a9ca73c..05e79557756e05985aaeb51092e94877541c253b:/tasklib/tests.py diff --git a/tasklib/tests.py b/tasklib/tests.py index 7c87400..f1247af 100644 --- a/tasklib/tests.py +++ b/tasklib/tests.py @@ -40,7 +40,7 @@ class TasklibTest(unittest.TestCase): def setUp(self): self.tmp = tempfile.mkdtemp(dir='.') - self.tw = TaskWarrior(data_location=self.tmp) + self.tw = TaskWarrior(data_location=self.tmp, taskrc_location='/') def tearDown(self): shutil.rmtree(self.tmp) @@ -188,6 +188,16 @@ class TaskFilterTest(TasklibTest): self.assertEqual(list(tasks), [t]) def test_filter_dummy_by_modified(self): + # Older TW version does not support bumping modified + # on save + if self.tw.version < six.text_type('2.2.0'): + # Python2.6 does not support SkipTest. As a workaround + # mark the test as passed by exiting. + if getattr(unittest, 'SkipTest', None) is not None: + raise unittest.SkipTest() + else: + return + t = Task(self.tw, description="test") t.save() @@ -651,6 +661,13 @@ class TaskTest(TasklibTest): t.save() self.assertEqual(len(self.tw.tasks.pending()), 2) + def test_modify_number_of_tasks_at_once(self): + for i in range(1, 100): + Task(self.tw, description="test task %d" % i, tags=['test']).save() + + self.tw.execute_command(['+test', 'mod', 'unified', 'description']) + + class TaskFromHookTest(TasklibTest): input_add_data = six.StringIO( @@ -730,7 +747,7 @@ class TimezoneAwareDatetimeTest(TasklibTest): 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.assertEqual(json.loads(t.export_data())['due'], self.utctime_aware.strftime(DATE_FORMAT)) def test_timezone_naive_date_setitem(self): @@ -750,7 +767,7 @@ class TimezoneAwareDatetimeTest(TasklibTest): 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.assertEqual(json.loads(t.export_data())['due'], self.utctime_aware.strftime(DATE_FORMAT)) def test_timezone_aware_datetime_setitem(self): @@ -770,9 +787,75 @@ class TimezoneAwareDatetimeTest(TasklibTest): 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.assertEqual(json.loads(t.export_data())['due'], self.utctime_aware.strftime(DATE_FORMAT)) +class DatetimeStringTest(TasklibTest): + + def test_simple_now_conversion(self): + if self.tw.version < six.text_type('2.4.0'): + # Python2.6 does not support SkipTest. As a workaround + # mark the test as passed by exiting. + if getattr(unittest, 'SkipTest', None) is not None: + raise unittest.SkipTest() + else: + return + + t = Task(self.tw, description="test task", due="now") + now = local_zone.localize(datetime.datetime.now()) + + # Assert that both times are not more than 5 seconds apart + self.assertTrue((now - t['due']).total_seconds() < 5) + self.assertTrue((t['due'] - now).total_seconds() < 5) + + def test_simple_eoy_conversion(self): + if self.tw.version < six.text_type('2.4.0'): + # Python2.6 does not support SkipTest. As a workaround + # mark the test as passed by exiting. + if getattr(unittest, 'SkipTest', None) is not None: + raise unittest.SkipTest() + else: + return + + t = Task(self.tw, description="test task", due="eoy") + now = local_zone.localize(datetime.datetime.now()) + eoy = local_zone.localize(datetime.datetime( + year=now.year, + month=12, + day=31, + hour=23, + minute=59, + second=59 + )) + self.assertEqual(eoy, t['due']) + + def test_complex_eoy_conversion(self): + if self.tw.version < six.text_type('2.4.0'): + # Python2.6 does not support SkipTest. As a workaround + # mark the test as passed by exiting. + if getattr(unittest, 'SkipTest', None) is not None: + raise unittest.SkipTest() + else: + return + + t = Task(self.tw, description="test task", due="eoy - 4 months") + now = local_zone.localize(datetime.datetime.now()) + due_date = local_zone.localize(datetime.datetime( + year=now.year, + month=12, + day=31, + hour=23, + minute=59, + second=59 + )) - datetime.timedelta(0,4 * 30 * 86400) + self.assertEqual(due_date, t['due']) + + def test_filtering_with_string_datetime(self): + t = Task(self.tw, description="test task", + due=datetime.datetime.now() - datetime.timedelta(0,2)) + t.save() + self.assertEqual(len(self.tw.tasks.filter(due__before="now")), 1) + class AnnotationTest(TasklibTest): def setUp(self):