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
12 class ReviewVisitorBehaviour(unittest.TestCase):
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)]
20 self.project1 = self.create_project()
21 self.project2 = self.create_project()
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:]
28 self.projects = [self.project1,self.project2]
29 self.reviewer = logic.review_visitor.ReviewVisitor()
31 def create_project(self):
33 p.status.update.return_value = p.status
34 p.last_modification_date.return_value = datetime.datetime.now()
37 def create_action(self):
38 a = Mock(spec=action.Action)
39 a.status = action.unprocessed
43 def create_action_with_status(self,status):
44 a = self.create_action()
49 self.reviewer.review(self.projects)
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])
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)
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))
69 self.assertEqual(self.project1.status,project.active)
70 self.assertEqual(self.project2.status,project.tickled)
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
77 self.assertEqual(self.project1.status,project.inactive)
78 self.assertEqual(self.project2.status,project2_previous_status)