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)
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()
t = Task(self.tw, description="test task")
self.assertRaises(Task.NotSaved, t.refresh)
+ def test_start_unsaved_task(self):
+ t = Task(self.tw, description="test task")
+ self.assertRaises(Task.NotSaved, t.start)
+
def test_delete_deleted_task(self):
t = Task(self.tw, description="test task")
t.save()
self.assertRaises(Task.CompletedTask, t.done)
+ def test_start_completed_task(self):
+ t = Task(self.tw, description="test task")
+ t.save()
+ t.done()
+
+ self.assertRaises(Task.CompletedTask, t.start)
+
def test_complete_deleted_task(self):
t = Task(self.tw, description="test task")
t.save()
self.assertRaises(Task.DeletedTask, t.done)
+ def test_start_completed_task(self):
+ t = Task(self.tw, description="test task")
+ t.save()
+ t.done()
+
+ self.assertRaises(Task.CompletedTask, t.start)
+
+ def test_starting_task(self):
+ t = Task(self.tw, description="test task")
+ now = t.datetime_normalizer(datetime.datetime.now())
+ t.save()
+ t.start()
+
+ self.assertTrue(now.replace(microsecond=0) <= t['start'])
+ self.assertEqual(t['status'], 'pending')
+
+ def test_completing_task(self):
+ t = Task(self.tw, description="test task")
+ now = t.datetime_normalizer(datetime.datetime.now())
+ t.save()
+ t.done()
+
+ self.assertTrue(now.replace(microsecond=0) <= t['end'])
+ self.assertEqual(t['status'], 'completed')
+
+ def test_deleting_task(self):
+ t = Task(self.tw, description="test task")
+ now = t.datetime_normalizer(datetime.datetime.now())
+ t.save()
+ t.delete()
+
+ self.assertTrue(now.replace(microsecond=0) <= t['end'])
+ self.assertEqual(t['status'], 'deleted')
+
def test_modify_simple_attribute_without_space(self):
t = Task(self.tw, description="test")
t.save()
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):
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):
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=9,
+ day=3,
+ hour=0,
+ minute=59,
+ second=59
+ ))
+ 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):