class TakeIssueTests(TestCase): def setUp(self): self.tracker = Redmine('http://the_base_url') self.config = config_from_string(''' [redmine] assignee_id = the_assignee_id inprogress_id = the_inprogress_id ''') self.mock_request = self.patch_object(self.tracker, '_request') self.mock_get_url = self.patch_object(self.tracker, 'get_issue_url') self.mock_get_url.return_value = sentinel.url def test_missing_inprogress_config_fails(self): config = config_from_string(''' [redmine] assignee_id = 2 ''') self.assertRaisesRegexp(ConfigMissing, 'Option:[\'"]inprogress_id[\'"]', self.tracker.take_issue, sentinel.issue, config, sentinel.options) def test_missing_status_config_fails(self): config = config_from_string(''' [redmine] inprogress_id = 2 ''') self.assertRaisesRegexp(ConfigMissing, 'Option:[\'"]assignee_id[\'"]', self.tracker.take_issue, sentinel.issue, config, sentinel.options) def test_uses_put_request(self): self.tracker.take_issue(sentinel.issue, self.config, sentinel.options) eq_(self.mock_request.called, True, '_request was not called') eq_(self.mock_request.call_args[0][0], requests.put) def test_uses_issue_url(self): self.tracker.take_issue(sentinel.issue, self.config, sentinel.options) self.mock_get_url.assert_called_once_with(sentinel.issue, self.config, sentinel.options) eq_(self.mock_request.called, True, '_request was not called') eq_(self.mock_request.call_args[0][1], sentinel.url) def test_sends_payload(self): self.tracker.take_issue(sentinel.issue, self.config, sentinel.options) eq_(self.mock_request.called, True, '_request was not called') payload = json.loads(self.mock_request.call_args[1]['data']) payload = payload['issue'] eq_(payload['status_id'], 'the_inprogress_id') eq_(payload['assigned_to_id'], 'the_assignee_id') def test_send_content_type_header(self): self.tracker.take_issue(sentinel.issue, self.config, sentinel.options) eq_(self.mock_request.called, True, '_request was not called') headers = self.mock_request.call_args[1]['headers'] eq_(headers['content-type'], 'application/json')