Add files from the old svn, r101.
[matthijs/upstream/mobilegtd.git] / tests / specs / logic / review_visitor_spec.py
diff --git a/tests/specs/logic/review_visitor_spec.py b/tests/specs/logic/review_visitor_spec.py
new file mode 100644 (file)
index 0000000..14646f0
--- /dev/null
@@ -0,0 +1,78 @@
+import unittest
+import logic.review_visitor
+from logic import review_visitor
+import model.project,model.projects
+from model import action
+from model import project
+from model import datetime
+from model.model import *
+from mock import Mock,patch_object,patch
+import random
+
+class ReviewVisitorBehaviour(unittest.TestCase):
+    pass
+
+    def setUp(self):
+        self.positive_property_actions = [self.create_action() for i in range(10)]
+        self.negative_property_actions =[self.create_action() for i in range(9)]
+     
+        
+        self.project1 = self.create_project()
+        self.project2 = self.create_project()
+
+        self.project1.actions_with_status.return_value = self.positive_property_actions[:7]
+        self.project1.actions = self.project1.actions_with_status()+self.negative_property_actions[:1]
+        self.project2.actions_with_status.return_value = self.positive_property_actions[7:]
+        self.project2.actions = self.project2.actions_with_status()+self.negative_property_actions[1:]
+
+        self.projects = [self.project1,self.project2]
+        self.reviewer = logic.review_visitor.ReviewVisitor()
+    
+    def create_project(self):
+        p = Mock()
+        p.status.update.return_value = p.status
+        p.last_modification_date.return_value = datetime.datetime.now()
+        return p
+
+    def create_action(self):
+        a = Mock(spec=action.Action)
+        a.status = action.unprocessed
+        return a
+        
+
+    def create_action_with_status(self,status):
+        a = self.create_action()
+        a.status = status
+        return a
+        
+    def review(self):
+        self.reviewer.review(self.projects)
+
+    
+    
+    def test_should_set_all_unprocessed_actions_to_active(self):
+        for a in self.positive_property_actions:
+            a.status = action.unprocessed
+        for a in self.negative_property_actions:
+            a.status = random.choice([action.done,action.inactive])
+        self.review()
+        for a in self.positive_property_actions:
+            self.assertEqual(a.status,action.active)
+        for a in self.negative_property_actions:
+            self.assertNotEqual(a.status,action.active)
+
+    
+    def test_should_untickle_projects_with_tickle_date_present_or_past(self):
+        self.project1.status = project.Tickled(datetime.date.now())
+        self.project2.status = project.Tickled(datetime.date(2030, 12, 2))
+        self.review()
+        self.assertEqual(self.project1.status,project.active)
+        self.assertEqual(self.project2.status,project.tickled)
+    
+    def test_should_schedule_projects_with_a_certain_period_of_inactivity_for_review(self):
+        self.project1.last_modification_date.return_value = datetime.datetime(2009, 1, 1)
+        self.project2.last_modification_date.return_value = datetime.datetime(2030, 12, 2)
+        project2_previous_status = self.project2.status
+        self.review()
+        self.assertEqual(self.project1.status,project.inactive)
+        self.assertEqual(self.project2.status,project2_previous_status)