X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=tests%2Fspecs%2Flogic%2Freview_visitor_spec.py;fp=tests%2Fspecs%2Flogic%2Freview_visitor_spec.py;h=14646f0f29d275cf97637aa9858c5f61abbeaed1;hb=826cc2e9923c858d3c6a86c04f371cfb326e1728;hp=0000000000000000000000000000000000000000;hpb=44f7fa2ef41d54548aa800b2bb71a886261c5046;p=matthijs%2Fupstream%2Fmobilegtd.git diff --git a/tests/specs/logic/review_visitor_spec.py b/tests/specs/logic/review_visitor_spec.py new file mode 100644 index 0000000..14646f0 --- /dev/null +++ b/tests/specs/logic/review_visitor_spec.py @@ -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)