mirror of
https://github.com/grafana/grafana.git
synced 2024-11-29 20:24:18 -06:00
fix: only "swallow" the json() parsing error if the response is empty (#47493)
This commit is contained in:
parent
8c477a288a
commit
84b7efb393
@ -135,7 +135,12 @@ describe('parseCredentials', () => {
|
||||
});
|
||||
|
||||
describe('parseResponseBody', () => {
|
||||
const rsp = {} as unknown as Response;
|
||||
let rsp: Response;
|
||||
|
||||
beforeEach(() => {
|
||||
rsp = new Response();
|
||||
});
|
||||
|
||||
it('parses json', async () => {
|
||||
const value = { hello: 'world' };
|
||||
const body = await parseResponseBody(
|
||||
@ -148,6 +153,24 @@ describe('parseResponseBody', () => {
|
||||
expect(body).toEqual(value);
|
||||
});
|
||||
|
||||
it('returns an empty object {} when the response is empty but is declared as JSON type', async () => {
|
||||
rsp.headers.set('Content-Length', '0');
|
||||
jest.spyOn(console, 'warn').mockImplementation();
|
||||
|
||||
const json = jest.fn();
|
||||
const body = await parseResponseBody(
|
||||
{
|
||||
...rsp,
|
||||
json,
|
||||
},
|
||||
'json'
|
||||
);
|
||||
|
||||
expect(body).toEqual({});
|
||||
expect(json).not.toHaveBeenCalled();
|
||||
expect(console.warn).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('parses text', async () => {
|
||||
const value = 'RAW TEXT';
|
||||
const body = await parseResponseBody(
|
||||
|
@ -106,13 +106,15 @@ export async function parseResponseBody<T>(
|
||||
return response.blob() as any;
|
||||
|
||||
case 'json':
|
||||
try {
|
||||
return await response.json();
|
||||
} catch (err) {
|
||||
console.warn(`${response.url} returned an invalid JSON -`, err);
|
||||
// An empty string is not a valid JSON.
|
||||
// Sometimes (unfortunately) our APIs declare their Content-Type as JSON, however they return an empty body.
|
||||
if (response.headers.get('Content-Length') === '0') {
|
||||
console.warn(`${response.url} returned an invalid JSON`);
|
||||
return {} as unknown as T;
|
||||
}
|
||||
|
||||
return await response.json();
|
||||
|
||||
case 'text':
|
||||
return response.text() as any;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user