diff --git a/oasst-shared/oasst_shared/api_client.py b/oasst-shared/oasst_shared/api_client.py index e8439517..404521db 100644 --- a/oasst-shared/oasst_shared/api_client.py +++ b/oasst-shared/oasst_shared/api_client.py @@ -70,7 +70,7 @@ class OasstApiClient: if response.status >= 300: data = await response.json() try: - oasst_error = protocol_schema.OasstErrorResponse(**data) + oasst_error = protocol_schema.OasstErrorResponse(**(data or {})) raise OasstError( error_code=oasst_error.error_code, message=oasst_error.message, diff --git a/oasst-shared/tests/test_oasst_api_client.py b/oasst-shared/tests/test_oasst_api_client.py index 8649d891..fdb743ce 100644 --- a/oasst-shared/tests/test_oasst_api_client.py +++ b/oasst-shared/tests/test_oasst_api_client.py @@ -106,3 +106,23 @@ async def test_can_handle_oasst_error_from_api( with pytest.raises(OasstError): await oasst_api_client_fake_http.post("/some-path", data={}) + + +@pytest.mark.asyncio +async def test_can_handle_unknown_error_from_api( + oasst_api_client_fake_http: OasstApiClient, + mock_http_session: MockClientSession, +): + response_body = "Internal Server Error" + status_code = 500 + + mock_http_session.set_response( + mock.AsyncMock( + status=status_code, + text=mock.AsyncMock(return_value=response_body), + json=mock.AsyncMock(return_value=None), + ) + ) + + with pytest.raises(OasstError): + await oasst_api_client_fake_http.post("/some-path", data={})