class GetIssueListUrlTests(TestCase): def setUp(self): self.tracker = Redmine('http://the_base_url') self.mock_get_limit = self.patch_object(Redmine, 'get_list_limit') self.mock_get_limit.return_value = 12345 self.mock_get_project = self.patch_object(Redmine, 'get_project') self.mock_get_project.return_value = None self.no_options = MockRedmineOptions() def test_querystring_defaults(self): url = self.tracker.get_issue_list_url(sentinel.config, self.no_options) parsed_qs = parse_qs(urlparse(url).query) self.assertNotIn('assigned_to_id', parsed_qs) self.assertNotIn('fixed_version_id', parsed_qs) self.assertNotIn('status_id', parsed_qs) def test_limit(self): url = self.tracker.get_issue_list_url(sentinel.config, self.no_options) self.mock_get_limit.assert_called_once_with(sentinel.config, self.no_options) parsed_qs = parse_qs(urlparse(url).query) eq_(parsed_qs['limit'], ['12345']) def test_mine(self): options = MockRedmineOptions(mine=True) url = self.tracker.get_issue_list_url(sentinel.config, options) parsed_qs = parse_qs(urlparse(url).query) eq_(parsed_qs['assigned_to_id'], ['me']) def test_version(self): options = MockRedmineOptions(version='v30') url = self.tracker.get_issue_list_url(sentinel.config, options) parsed_qs = parse_qs(urlparse(url).query) eq_(parsed_qs['fixed_version_id'], ['v30']) def test_all(self): options = MockRedmineOptions(all=True) url = self.tracker.get_issue_list_url(sentinel.config, options) parsed_qs = parse_qs(urlparse(url).query) eq_(parsed_qs['status_id'], ['*']) def test_no_project_url(self): url = self.tracker.get_issue_list_url(sentinel.config, self.no_options) eq_(url.split("?", 1)[0], 'http://the_base_url/issues.json') def test_project_url(self): self.mock_get_project.return_value = 'the_project' url = self.tracker.get_issue_list_url(sentinel.config, self.no_options) eq_(url.split("?", 1)[0], 'http://the_base_url/projects/the_project/issues.json')