X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/98a9ea60e0c22e140650ff5a89dfd544d9c05cb0..6adf5e34ed35f8b5d9975867c92096f4b9bc080f:/tasklib/tests.py diff --git a/tasklib/tests.py b/tasklib/tests.py index 2fa1371..76a9514 100644 --- a/tasklib/tests.py +++ b/tasklib/tests.py @@ -70,6 +70,176 @@ class TaskFilterTest(TasklibTest): self.assertEqual(no_priority_task['description'], "no priority task") +class TaskTest(TasklibTest): + + def test_create_unsaved_task(self): + # Make sure a new task is not saved unless explicitly called for + t = Task(self.tw, description="test task") + self.assertEqual(len(self.tw.tasks.all()), 0) + + # TODO: once python 2.6 compatiblity is over, use context managers here + # and in all subsequent tests for assertRaises + + def test_delete_unsaved_task(self): + t = Task(self.tw, description="test task") + self.assertRaises(Task.NotSaved, t.delete) + + def test_complete_unsaved_task(self): + t = Task(self.tw, description="test task") + self.assertRaises(Task.NotSaved, t.done) + + def test_refresh_unsaved_task(self): + t = Task(self.tw, description="test task") + self.assertRaises(Task.NotSaved, t.refresh) + + def test_delete_deleted_task(self): + t = Task(self.tw, description="test task") + t.save() + t.delete() + + self.assertRaises(Task.DeletedTask, t.delete) + + def test_complete_completed_task(self): + t = Task(self.tw, description="test task") + t.save() + t.done() + + self.assertRaises(Task.CompletedTask, t.done) + + def test_complete_deleted_task(self): + t = Task(self.tw, description="test task") + t.save() + t.delete() + + self.assertRaises(Task.DeletedTask, t.done) + + def test_empty_dependency_set_of_unsaved_task(self): + t = Task(self.tw, description="test task") + self.assertEqual(t['depends'], set()) + + def test_empty_dependency_set_of_saved_task(self): + t = Task(self.tw, description="test task") + t.save() + self.assertEqual(t['depends'], set()) + + def test_set_unsaved_task_as_dependency(self): + # Adds only one dependency to task with no dependencies + t = Task(self.tw, description="test task") + dependency = Task(self.tw, description="needs to be done first") + + # We only save the parent task, dependency task is unsaved + t.save() + + self.assertRaises(Task.NotSaved, + t.__setitem__, 'depends', set([dependency])) + + def test_set_simple_dependency_set(self): + # Adds only one dependency to task with no dependencies + t = Task(self.tw, description="test task") + dependency = Task(self.tw, description="needs to be done first") + + t.save() + dependency.save() + + t['depends'] = set([dependency]) + + self.assertEqual(t['depends'], set([dependency])) + + def test_set_complex_dependency_set(self): + # Adds two dependencies to task with no dependencies + t = Task(self.tw, description="test task") + dependency1 = Task(self.tw, description="needs to be done first") + dependency2 = Task(self.tw, description="needs to be done second") + + t.save() + dependency1.save() + dependency2.save() + + t['depends'] = set([dependency1, dependency2]) + + self.assertEqual(t['depends'], set([dependency1, dependency2])) + + def test_remove_from_dependency_set(self): + # Removes dependency from task with two dependencies + t = Task(self.tw, description="test task") + dependency1 = Task(self.tw, description="needs to be done first") + dependency2 = Task(self.tw, description="needs to be done second") + + dependency1.save() + dependency2.save() + + t['depends'] = set([dependency1, dependency2]) + t.save() + + t['depends'] = t['depends'] - set([dependency2]) + t.save() + + self.assertEqual(t['depends'], set([dependency1])) + + def test_add_to_dependency_set(self): + # Adds dependency to task with one dependencies + t = Task(self.tw, description="test task") + dependency1 = Task(self.tw, description="needs to be done first") + dependency2 = Task(self.tw, description="needs to be done second") + + dependency1.save() + dependency2.save() + + t['depends'] = set([dependency1]) + t.save() + + t['depends'] = t['depends'] | set([dependency2]) + t.save() + + self.assertEqual(t['depends'], set([dependency1, dependency2])) + + def test_compare_different_tasks(self): + # Negative: compare two different tasks + t1 = Task(self.tw, description="test task") + t2 = Task(self.tw, description="test task") + + t1.save() + t2.save() + + self.assertEqual(t1 == t2, False) + + def test_compare_same_task_object(self): + # Compare Task object wit itself + t = Task(self.tw, description="test task") + t.save() + + self.assertEqual(t == t, True) + + def test_compare_same_task(self): + # Compare the same task using two different objects + t1 = Task(self.tw, description="test task") + t1.save() + + t2 = self.tw.tasks.get(uuid=t1['uuid']) + self.assertEqual(t1 == t2, True) + + def test_compare_unsaved_tasks(self): + # t1 and t2 are unsaved tasks, considered to be unequal + # despite the content of data + t1 = Task(self.tw, description="test task") + t2 = Task(self.tw, description="test task") + + self.assertEqual(t1 == t2, False) + + def test_hash_unsaved_tasks(self): + # Considered equal, it's the same object + t1 = Task(self.tw, description="test task") + t2 = t1 + self.assertEqual(hash(t1) == hash(t2), True) + + def test_hash_same_task(self): + # Compare the hash of the task using two different objects + t1 = Task(self.tw, description="test task") + t1.save() + + t2 = self.tw.tasks.get(uuid=t1['uuid']) + self.assertEqual(t1.__hash__(), t2.__hash__()) + class AnnotationTest(TasklibTest): def setUp(self):