]> git.madduck.net Git - etc/taskwarrior.git/blobdiff - tasklib/tests.py

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: Adds tests for adding attributes with spaces
[etc/taskwarrior.git] / tasklib / tests.py
index 76a951430a9fc48d9e26cd07fad2f81dfd4995b2..72aebb9f8ca875dbe2be8e4fc173f326c704b104 100644 (file)
@@ -1,5 +1,6 @@
 # coding=utf-8
 
+import datetime
 import shutil
 import tempfile
 import unittest
@@ -113,6 +114,29 @@ class TaskTest(TasklibTest):
 
         self.assertRaises(Task.DeletedTask, t.done)
 
+    def test_modify_simple_attribute_without_space(self):
+        t = Task(self.tw, description="test")
+        t.save()
+
+        self.assertEquals(t['description'], "test")
+
+        t['description'] = "test-modified"
+        t.save()
+
+        self.assertEquals(t['description'], "test-modified")
+
+    def test_modify_simple_attribute_with_space(self):
+        # Space can pose problems with parsing
+        t = Task(self.tw, description="test task")
+        t.save()
+
+        self.assertEquals(t['description'], "test task")
+
+        t['description'] = "test task modified"
+        t.save()
+
+        self.assertEquals(t['description'], "test task modified")
+
     def test_empty_dependency_set_of_unsaved_task(self):
         t = Task(self.tw, description="test task")
         self.assertEqual(t['depends'], set())
@@ -193,6 +217,28 @@ class TaskTest(TasklibTest):
 
         self.assertEqual(t['depends'], set([dependency1, dependency2]))
 
+    def test_simple_dependency_set_save_repeatedly(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")
+        dependency.save()
+
+        t['depends'] = set([dependency])
+        t.save()
+
+        # We taint the task, but keep depends intact
+        t['description'] = "test task modified"
+        t.save()
+
+        self.assertEqual(t['depends'], set([dependency]))
+
+        # We taint the task, but assign the same set to the depends
+        t['depends'] = set([dependency])
+        t['description'] = "test task modified again"
+        t.save()
+
+        self.assertEqual(t['depends'], set([dependency]))
+
     def test_compare_different_tasks(self):
         # Negative: compare two different tasks
         t1 = Task(self.tw, description="test task")
@@ -240,6 +286,91 @@ class TaskTest(TasklibTest):
         t2 = self.tw.tasks.get(uuid=t1['uuid'])
         self.assertEqual(t1.__hash__(), t2.__hash__())
 
+    def test_adding_task_with_priority(self):
+        t = Task(self.tw, description="test task", priority="M")
+        t.save()
+
+    def test_removing_priority_with_none(self):
+        t = Task(self.tw, description="test task", priority="L")
+        t.save()
+
+        # Remove the priority mark
+        t['priority'] = None
+        t.save()
+
+        # Assert that priority is not there after saving
+        self.assertEqual(t['priority'], None)
+
+    def test_adding_task_with_due_time(self):
+        t = Task(self.tw, description="test task", due=datetime.datetime.now())
+        t.save()
+
+    def test_removing_due_time_with_none(self):
+        t = Task(self.tw, description="test task", due=datetime.datetime.now())
+        t.save()
+
+        # Remove the due timestamp
+        t['due'] = None
+        t.save()
+
+        # Assert that due timestamp is no longer there
+        self.assertEqual(t['due'], None)
+
+    def test_modified_fields_new_task(self):
+        t = Task(self.tw)
+
+        # This should be empty with new task
+        self.assertEqual(set(t._modified_fields), set())
+
+        # Modify the task
+        t['description'] = "test task"
+        self.assertEqual(set(t._modified_fields), set(['description']))
+
+        t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14)  # <3
+        self.assertEqual(set(t._modified_fields), set(['description', 'due']))
+
+        t['project'] = "test project"
+        self.assertEqual(set(t._modified_fields),
+                         set(['description', 'due', 'project']))
+
+        # List of modified fields should clear out when saved
+        t.save()
+        self.assertEqual(set(t._modified_fields), set())
+
+        # Reassigning the fields with the same values now should not produce
+        # modified fields
+        t['description'] = "test task"
+        t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14)  # <3
+        t['project'] = "test project"
+        self.assertEqual(set(t._modified_fields), set())
+
+    def test_modified_fields_loaded_task(self):
+        t = Task(self.tw)
+
+        # Modify the task
+        t['description'] = "test task"
+        t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14)  # <3
+        t['project'] = "test project"
+
+        dependency = Task(self.tw, description="dependency")
+        dependency.save()
+        t['depends'] = set([dependency])
+
+        # List of modified fields should clear out when saved
+        t.save()
+        self.assertEqual(set(t._modified_fields), set())
+
+        # Get the task by using a filter by UUID
+        t2 = self.tw.tasks.get(uuid=t['uuid'])
+
+        # Reassigning the fields with the same values now should not produce
+        # modified fields
+        t['description'] = "test task"
+        t['due'] = datetime.datetime(2014, 2, 14, 14, 14, 14)  # <3
+        t['project'] = "test project"
+        t['depends'] = set([dependency])
+        self.assertEqual(set(t._modified_fields), set())
+
 class AnnotationTest(TasklibTest):
 
     def setUp(self):