class BacklogSwitcherTest(AgiloTestCase): def setUp(self): self.super() self.teh = TestEnvHelper(enable_agilo=False, env_key=self.env_key) self.env = self.teh.get_env() self.view = BacklogToggleConfigurationJSONView(self.env) self.assert_equals([], self.view.discover_backlogs()) def tearDown(self): self.view.reset_known_backlogs() self.super() def call(self): return self.view.do_get(self.teh.mock_request(), None) def test_can_register_arbitrary_backlogs(self): self.view.register_backlog_with_identifier('fnord') self.assert_equals([ 'fnord', ], self.call()) def test_has_special_method_for_all_known_backlogs(self): self.view.register_new_backlog() self.assert_equals(['new_backlog'], self.call()) self.view.register_whiteboard() self.assert_equals(['new_backlog', 'whiteboard'], self.call())
class BacklogSwitcherTest(AgiloTestCase): def setUp(self): self.super() self.teh = TestEnvHelper(enable_agilo=False, env_key=self.env_key) self.env = self.teh.get_env() self.view = BacklogToggleConfigurationJSONView(self.env) self.assert_equals([], self.view.discover_backlogs()) def tearDown(self): self.view.reset_known_backlogs() self.super() def call(self): return self.view.do_get(self.teh.mock_request(), None) def test_can_register_arbitrary_backlogs(self): self.view.register_backlog_with_identifier("fnord") self.assert_equals(["fnord"], self.call()) def test_has_special_method_for_all_known_backlogs(self): self.view.register_new_backlog() self.assert_equals(["new_backlog"], self.call()) self.view.register_whiteboard() self.assert_equals(["new_backlog", "whiteboard"], self.call())
def runTest(self): # Create a sprint to generate twill panic on Mac env = self.testenv.get_trac_environment() teh = TestEnvHelper(env=env, env_key=self.env_key) teh.create_sprint("Panic Sprint1") teh.create_sprint("Panic Sprint2") # Now at least one sprint is there self.tester.login_as(Usernames.product_owner) st_id = self.tester.create_new_agilo_ticket(Type.USER_STORY, "My Story") # Now login as team member and create an associated task to the story self.tester.login_as(Usernames.team_member) task_id = self.tester.create_referenced_ticket(st_id, Type.TASK, "My Task") # Make sure no sprint has been set for this task task_page = self.tester.navigate_to_ticket_page(task_id) self.assertEqual('n.a.', task_page.sprint()) # Now login as admin and edit the ticket self.tester.login_as(Usernames.admin) self.tester.go_to_view_ticket_page(task_id) tc.fv('propertyform', 'field-remaining_time', '12') tc.submit('submit') task_page = self.tester.navigate_to_ticket_page(task_id) self.assertEqual('12.0h', task_page.remaining_time()) self.assertEqual('n.a.', task_page.sprint()) # Now login as team member and become the owner of the ticket self.tester.login_as(Usernames.team_member) self.tester.go_to_view_ticket_page(task_id) tc.fv('propertyform', 'field-remaining_time', '8') tc.fv('propertyform', 'action', 'accept') tc.submit('submit') task_page = self.tester.navigate_to_ticket_page(task_id) self.assertEqual('8.0h', task_page.remaining_time()) self.assertEqual('n.a.', task_page.sprint()) self.assertEqual(Usernames.team_member, task_page.owner()) # Now the admin should be able to edit the task again self.tester.login_as(Usernames.admin) self.tester.go_to_view_ticket_page(task_id) tc.fv('propertyform', 'field-remaining_time', '9') tc.submit('submit') task_page = self.tester.navigate_to_ticket_page(task_id) self.assertEqual('9.0h', task_page.remaining_time()) self.assertEqual('n.a.', task_page.sprint()) # The Scrum Master should also be able self.tester.login_as(Usernames.scrum_master) self.tester.go_to_view_ticket_page(task_id) tc.fv('propertyform', 'field-remaining_time', '10') tc.submit('submit') task_page = self.tester.navigate_to_ticket_page(task_id) self.assertEqual('10.0h', task_page.remaining_time()) self.assertEqual('n.a.', task_page.sprint()) self.assertEqual(Usernames.team_member, task_page.owner())
def runTest(self): """Runs performance tests qith 10, 100, 200 items in a Backlog""" # We need to build a real environment at least we will test # the IO self.teh = TestEnvHelper(env=self._testenv.get_trac_environment(), env_key=self.env_key) self._test_global_backlog() self._test_sprint_backlog()
def _create_sprint_with_backlog(env, sprint_name, number_of_tickets): """Creates a set of requirements and Stories for the Demo project. If the delete option is set to True, it will also delete every existing ticket before starting to add the demo ones. If in the target environment there is no Team set, it will create some users and a demo team.""" teh = TestEnvHelper(env) sprint = _create_sprint_with_team(teh, sprint_name) _create_sprint_backlog(teh, sprint, number_of_tickets)
def test_do_not_raise_exception_on_edit_in_multienv_with_plain_trac(self): plain_trac_env = TestEnvHelper(enable_agilo=False, env_key=self.env_key).env # This situation happens due to monkey-patching: The plain trac # environment needs to work with Agilo classes. milestone = AgiloMilestone(plain_trac_env) milestone.name = 'fnord' milestone.insert() # Must not raise an exception milestone.update()
def test_agilo_with_parallel_environments(self): """ Tests agilo in parallel with two different environment, one with and one without agilo """ ac_agilo = AgiloConfig(self.env) ac_agilo.enable_agilo() env_no_agilo = TestEnvHelper(env_key=self.env_key) ac_no_agilo = AgiloConfig(env_no_agilo.get_env()) ac_no_agilo.disable_agilo() # Now we have two environment in the same python VM agilo_ticket = self.teh.create_ticket(Type.TASK, props={Key.REMAINING_TIME: '2'}) self.assert_true(isinstance(agilo_ticket, AgiloTicket), "Got the wrong type: %s" % type(agilo_ticket)) non_agilo_ticket = env_no_agilo.create_ticket( Type.TASK, props={Key.REMAINING_TIME: '2'}) self.assert_true(hasattr(agilo_ticket, '_calculated')) self.assert_false(hasattr(non_agilo_ticket, '_calculated'))
def test_agilo_with_parallel_environments(self): """ Tests agilo in parallel with two different environment, one with and one without agilo """ ac_agilo = AgiloConfig(self.env) ac_agilo.enable_agilo() env_no_agilo = TestEnvHelper(env_key=self.env_key) ac_no_agilo = AgiloConfig(env_no_agilo.get_env()) ac_no_agilo.disable_agilo() # Now we have two environment in the same python VM agilo_ticket = self.teh.create_ticket(Type.TASK, props={Key.REMAINING_TIME: '2'}) self.assert_true(isinstance(agilo_ticket, AgiloTicket), "Got the wrong type: %s" % type(agilo_ticket)) non_agilo_ticket = env_no_agilo.create_ticket(Type.TASK, props={Key.REMAINING_TIME: '2'}) self.assert_true(hasattr(agilo_ticket, '_calculated')) self.assert_false(hasattr(non_agilo_ticket, '_calculated'))
def runTest(self): self._tester.login_as(Usernames.team_member) trac_env = self.testenv.get_trac_environment() teh = TestEnvHelper(trac_env, env_key=self.env_key) project_dir = self.testenv.dirname task_id = self.create_task(teh) rev = self.work_on_task(task_id, teh) AgiloSVNPostCommit(project=project_dir, rev=rev, env=trac_env).execute() ticket_page = self.tester.navigate_to_ticket_page(task_id) self.assertEqual('1.5h', ticket_page.remaining_time())
def _create_demo_data(env, delete): """Creates a set of requirements and Stories for the Demo project. If the delete option is set to True, it will also delete every existing ticket before starting to add the demo ones. If in the target environment there is no Team set, it will create some users and a demo team.""" teh = TestEnvHelper(env) if delete: teh.delete_all_milestones() teh.delete_all_sprints() teh.delete_all_tickets() delete_burndown_data_change(env) # Now check if there is at least one team team = _check_or_create_team(teh) # create milestone and sprints, and assign it to the team # Remember that this sprint started 3 days ago sprint = _create_sprint(teh, team) # create a Product Backlog stories = _create_product_backlog(teh, sprint) _create_sprint_backlog(teh, stories, sprint)
def close_sprint(self): self._tester.login_as(Usernames.scrum_master) env = self._testenv.get_trac_environment() teh = TestEnvHelper(env=env, env_key=self.env_key) team = teh.create_team('A-Team') tm = teh.create_member(name="TeamMember", team=team) self._create_sprint('TestSprintClose', team=team.name) self._create_sprint('TestSprintClose2', team=team.name) # create a ticket ticket = teh.create_ticket(Type.TASK, props={Key.SPRINT: 'TestSprintClose', Key.OWNER: tm.name}) self.assertEqual(ticket[Key.SPRINT], 'TestSprintClose') def _close_sprint(name, retarget=None): page_url = '%s/%s' % (SPRINT_URL, name) confirm_url = '%s/%s/confirm' % (SPRINT_URL, name) tc.go(page_url) tc.fv('confirmform', 'close', 'click') tc.submit() # show confirmation form tc.url(confirm_url) if retarget is not None: # should show that one ticket can be retargeted tc.find('Retarget the \d+ remaining tickets to sprint') tc.fv('confirmform', 'retarget', retarget) tc.fv('confirmform', 'sure', 'click') tc.submit('sure') # we're back at the roadmap tc.url('/roadmap') # Closes Testsprint with retarget to Testsprint2 _close_sprint('TestSprintClose', 'TestSprintClose2') # and the ticket now has a new sprint ticket = teh.load_ticket(ticket=ticket) self.assertEqual(ticket[Key.SPRINT], 'TestSprintClose2') # Check that retargeted ticket show who did the retargeting self._tester.go_to_view_ticket_page(ticket.id) tc.notfind('ago.* by anonymous') tc.find('ago.* by %s' % Usernames.scrum_master) # Delete Testsprint with retarget to Testsprint2 _close_sprint('TestSprintClose2')
def setUp(self): self.super() self.teh = TestEnvHelper(enable_agilo=False, env_key=self.env_key) self.env = self.teh.get_env() self.view = BacklogToggleConfigurationJSONView(self.env) self.assert_equals([], self.view.discover_backlogs())