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.
   7 from .task import TaskWarrior, Task
 
  10 class TasklibTest(unittest.TestCase):
 
  13         self.tmp = tempfile.mkdtemp(dir='.')
 
  14         self.tw = TaskWarrior(data_location=self.tmp)
 
  17         shutil.rmtree(self.tmp)
 
  20 class TaskFilterTest(TasklibTest):
 
  22     def test_all_empty(self):
 
  23         self.assertEqual(len(self.tw.tasks.all()), 0)
 
  25     def test_all_non_empty(self):
 
  26         Task(self.tw, description="test task").save()
 
  27         self.assertEqual(len(self.tw.tasks.all()), 1)
 
  28         self.assertEqual(self.tw.tasks.all()[0]['description'], 'test task')
 
  29         self.assertEqual(self.tw.tasks.all()[0]['status'], 'pending')
 
  31     def test_pending_non_empty(self):
 
  32         Task(self.tw, description="test task").save()
 
  33         self.assertEqual(len(self.tw.tasks.pending()), 1)
 
  34         self.assertEqual(self.tw.tasks.pending()[0]['description'],
 
  36         self.assertEqual(self.tw.tasks.pending()[0]['status'], 'pending')
 
  38     def test_completed_empty(self):
 
  39         Task(self.tw, description="test task").save()
 
  40         self.assertEqual(len(self.tw.tasks.completed()), 0)
 
  42     def test_completed_non_empty(self):
 
  43         Task(self.tw, description="test task").save()
 
  44         self.assertEqual(len(self.tw.tasks.completed()), 0)
 
  45         self.tw.tasks.all()[0].done()
 
  46         self.assertEqual(len(self.tw.tasks.completed()), 1)
 
  48     def test_filtering_by_attribute(self):
 
  49         Task(self.tw, description="no priority task").save()
 
  50         Task(self.tw, priority="H", description="high priority task").save()
 
  51         self.assertEqual(len(self.tw.tasks.all()), 2)
 
  53         # Assert that the correct number of tasks is returned
 
  54         self.assertEqual(len(self.tw.tasks.filter(priority="H")), 1)
 
  56         # Assert that the correct tasks are returned
 
  57         high_priority_task = self.tw.tasks.get(priority="H")
 
  58         self.assertEqual(high_priority_task['description'], "high priority task")
 
  60     def test_filtering_by_empty_attribute(self):
 
  61         Task(self.tw, description="no priority task").save()
 
  62         Task(self.tw, priority="H", description="high priority task").save()
 
  63         self.assertEqual(len(self.tw.tasks.all()), 2)
 
  65         # Assert that the correct number of tasks is returned
 
  66         self.assertEqual(len(self.tw.tasks.filter(priority=None)), 1)
 
  68         # Assert that the correct tasks are returned
 
  69         no_priority_task = self.tw.tasks.get(priority=None)
 
  70         self.assertEqual(no_priority_task['description'], "no priority task")
 
  73 class TaskTest(TasklibTest):
 
  75     def test_create_unsaved_task(self):
 
  76         # Make sure a new task is not saved unless explicitly called for
 
  77         t = Task(self.tw, description="test task")
 
  78         self.assertEqual(len(self.tw.tasks.all()), 0)
 
  80     def test_delete_unsaved_task(self):
 
  81         with self.assertRaises(Task.NotSaved):
 
  82             t = Task(self.tw, description="test task")
 
  85     def test_complete_unsaved_task(self):
 
  86         with self.assertRaises(Task.NotSaved):
 
  87             t = Task(self.tw, description="test task")
 
  90     def test_refresh_unsaved_task(self):
 
  91         with self.assertRaises(Task.NotSaved):
 
  92             t = Task(self.tw, description="test task")
 
  95     def test_delete_deleted_task(self):
 
  96         t = Task(self.tw, description="test task")
 
 100         with self.assertRaises(Task.DeletedTask):
 
 103     def test_complete_completed_task(self):
 
 104         t = Task(self.tw, description="test task")
 
 108         with self.assertRaises(Task.CompletedTask):
 
 111     def test_complete_deleted_task(self):
 
 112         t = Task(self.tw, description="test task")
 
 116         with self.assertRaises(Task.DeletedTask):
 
 120 class AnnotationTest(TasklibTest):
 
 123         super(AnnotationTest, self).setUp()
 
 124         Task(self.tw, description="test task").save()
 
 126     def test_adding_annotation(self):
 
 127         task = self.tw.tasks.get()
 
 128         task.add_annotation('test annotation')
 
 129         self.assertEqual(len(task['annotations']), 1)
 
 130         ann = task['annotations'][0]
 
 131         self.assertEqual(ann['description'], 'test annotation')
 
 133     def test_removing_annotation(self):
 
 134         task = self.tw.tasks.get()
 
 135         task.add_annotation('test annotation')
 
 136         ann = task['annotations'][0]
 
 138         self.assertEqual(len(task['annotations']), 0)
 
 140     def test_removing_annotation_by_description(self):
 
 141         task = self.tw.tasks.get()
 
 142         task.add_annotation('test annotation')
 
 143         task.remove_annotation('test annotation')
 
 144         self.assertEqual(len(task['annotations']), 0)
 
 146     def test_removing_annotation_by_obj(self):
 
 147         task = self.tw.tasks.get()
 
 148         task.add_annotation('test annotation')
 
 149         ann = task['annotations'][0]
 
 150         task.remove_annotation(ann)
 
 151         self.assertEqual(len(task['annotations']), 0)
 
 154 class UnicodeTest(TasklibTest):
 
 156     def test_unicode_task(self):
 
 157         Task(self.tw, description="†åßk").save()
 
 160     def test_non_unicode_task(self):
 
 161         Task(self.tw, description="test task").save()