def setUp(self): self.super() self.panel = SprintAdminPanel(self.env) self.req = self._request_with_valid_sprint_data()
class SprintAdminPanelTest(AgiloTestCase): def setUp(self): self.super() self.panel = SprintAdminPanel(self.env) self.req = self._request_with_valid_sprint_data() def _request_with_valid_sprint_data(self): start = format_date(now()) end = format_date(now() + timedelta(10)) req = self.teh.mock_request() req.args = dict(name=self.sprint_name(), add=True, start=start, end=end, milestone="Test milestone fnord") return req def _assert_request_contains_warning(self, expected_warning): expected_warning = expected_warning.lower() actual_warning = "".join(self.req.chrome['warnings']).lower() self.assert_contains(expected_warning, actual_warning) def _assert_creating_sprint_fails(self): self.panel.list_save_view(self.req, 'agilo', 'sprints') self.assert_false(Sprint(self.env, name=self.req.args['name']).exists) def _assert_creating_sprint_succeeds(self): call = lambda: self.panel.list_save_view(self.req, 'agilo', 'sprints') expected_target = "/admin/agilo/sprints" self.teh.redirect_for_call(self.req, call, assert_expected_target=expected_target) sprint = Sprint(self.env, name=self.req.args['name']) self.assert_true(sprint.exists) return sprint def test_do_not_create_sprint_without_name(self): self.req.args['name'] = "" self.panel.list_save_view(self.req, 'agilo', 'sprints') self._assert_request_contains_warning('enter a sprint name') def test_do_not_create_sprint_if_already_exists(self): call = lambda: self.panel.list_save_view(self.req, 'agilo', 'sprints') self._assert_creating_sprint_succeeds() expected_target = "/admin/agilo/sprints/" + self.sprint_name() self.teh.redirect_for_call(self.req, call, assert_expected_target=expected_target) def test_do_not_create_sprint_without_enough_data(self): self.req.args['start'] = "" self.req.args['end'] = "" self.req.args['duration'] = "" self._assert_creating_sprint_fails() self._assert_request_contains_warning('not enough data') def test_do_not_create_sprint_with_start_and_both_end_and_duration(self): self.assert_trueish(self.req.args['end']) self.req.args['duration'] = "10" self._assert_creating_sprint_fails() self._assert_request_contains_warning('end date or a duration') def test_do_not_create_sprint_with_start_and_no_end_nor_duration(self): self.req.args['end'] = "" self.req.args['duration'] = "" self._assert_creating_sprint_fails() self._assert_request_contains_warning('end date or a duration') def test_do_not_create_sprint_with_only_end_date(self): del self.req.args['start'] self.assert_trueish(self.req.args['end']) self._assert_creating_sprint_fails() self._assert_request_contains_warning('start date or a duration') def test_do_not_create_sprints_with_slashes_in_name(self): self.req.args['name'] = "a/b" self._assert_creating_sprint_fails() self._assert_request_contains_warning('do not use "/') def test_sprint_created_with_start_and_end_has_correct_values(self): self.teh.disable_sprint_date_normalization() sprint = self._assert_creating_sprint_succeeds() self.assert_equals(self.req.args['start'], format_date(sprint.start)) self.assert_equals(self.req.args['end'], format_date(sprint.end)) def test_sprint_created_with_milestone(self): sprint = self._assert_creating_sprint_succeeds() self.assert_equals(self.req.args['milestone'], sprint.milestone) def test_can_not_edit_sprint_name_so_it_contains_a_slash(self): sprint = self.teh.create_sprint('fnord') self.req.args = dict(name='a/b') self.panel.detail_save_view(self.req, 'agilo', 'sprints', sprint.name) self.assert_false(Sprint(self.env, name='a/b').exists)