Add files from the old svn, r101.
[matthijs/upstream/mobilegtd.git] / tests / specs / logic / review_visitor_spec.py
1 import unittest
2 import logic.review_visitor
3 from logic import review_visitor
4 import model.project,model.projects
5 from model import action
6 from model import project
7 from model import datetime
8 from model.model import *
9 from mock import Mock,patch_object,patch
10 import random
11
12 class ReviewVisitorBehaviour(unittest.TestCase):
13     pass
14
15     def setUp(self):
16         self.positive_property_actions = [self.create_action() for i in range(10)]
17         self.negative_property_actions =[self.create_action() for i in range(9)]
18      
19         
20         self.project1 = self.create_project()
21         self.project2 = self.create_project()
22
23         self.project1.actions_with_status.return_value = self.positive_property_actions[:7]
24         self.project1.actions = self.project1.actions_with_status()+self.negative_property_actions[:1]
25         self.project2.actions_with_status.return_value = self.positive_property_actions[7:]
26         self.project2.actions = self.project2.actions_with_status()+self.negative_property_actions[1:]
27
28         self.projects = [self.project1,self.project2]
29         self.reviewer = logic.review_visitor.ReviewVisitor()
30     
31     def create_project(self):
32         p = Mock()
33         p.status.update.return_value = p.status
34         p.last_modification_date.return_value = datetime.datetime.now()
35         return p
36
37     def create_action(self):
38         a = Mock(spec=action.Action)
39         a.status = action.unprocessed
40         return a
41         
42
43     def create_action_with_status(self,status):
44         a = self.create_action()
45         a.status = status
46         return a
47         
48     def review(self):
49         self.reviewer.review(self.projects)
50
51     
52     
53     def test_should_set_all_unprocessed_actions_to_active(self):
54         for a in self.positive_property_actions:
55             a.status = action.unprocessed
56         for a in self.negative_property_actions:
57             a.status = random.choice([action.done,action.inactive])
58         self.review()
59         for a in self.positive_property_actions:
60             self.assertEqual(a.status,action.active)
61         for a in self.negative_property_actions:
62             self.assertNotEqual(a.status,action.active)
63
64     
65     def test_should_untickle_projects_with_tickle_date_present_or_past(self):
66         self.project1.status = project.Tickled(datetime.date.now())
67         self.project2.status = project.Tickled(datetime.date(2030, 12, 2))
68         self.review()
69         self.assertEqual(self.project1.status,project.active)
70         self.assertEqual(self.project2.status,project.tickled)
71     
72     def test_should_schedule_projects_with_a_certain_period_of_inactivity_for_review(self):
73         self.project1.last_modification_date.return_value = datetime.datetime(2009, 1, 1)
74         self.project2.last_modification_date.return_value = datetime.datetime(2030, 12, 2)
75         project2_previous_status = self.project2.status
76         self.review()
77         self.assertEqual(self.project1.status,project.inactive)
78         self.assertEqual(self.project2.status,project2_previous_status)