diff --git a/src/bugsy/bugsy.py b/src/bugsy/bugsy.py index 8fa575f..e7c39fe 100644 --- a/src/bugsy/bugsy.py +++ b/src/bugsy/bugsy.py @@ -214,11 +214,9 @@ def _handle_errors(self, response): and "error" in result and result.get("error", False) is True ): - if ( - "API key" in result["message"] - or "username or password" in result["message"] - ): - raise LoginException(result["message"], result.get("code")) + message = result.get("message") + if message and ("API key" in message or "username or password" in message): + raise LoginException(message, result.get("code")) else: - raise BugsyException(result["message"], result.get("code")) + raise BugsyException(message, result.get("code")) return result diff --git a/tests/test_errors.py b/tests/test_errors.py index 4d285dd..b94ec9b 100644 --- a/tests/test_errors.py +++ b/tests/test_errors.py @@ -95,6 +95,22 @@ def test_bugsyexception_raised_for_http_500_when_commenting_on_a_bug(bug_return) ) +@responses.activate +def test_bugsyexception_raised_when_error_message_is_none(): + # Bugzilla can return an error response whose "message" field is None. + responses.add( + responses.GET, + rest_url("bug", 2045159), + body=json.dumps({"error": True, "code": 102, "message": None}), + status=200, + content_type="application/json", + ) + bugzilla = Bugsy() + with pytest.raises(BugsyException) as e: + bugzilla.get(2045159) + assert str(e.value) == "Message: None Code: 102" + + @responses.activate def test_bugsyexception_raised_for_http_500_when_adding_tags_to_bug_comments( bug_return, comments_return