From e4e4221fd7ceb56cf5dfa7e7a06832034bc9e59d Mon Sep 17 00:00:00 2001 From: Jesse Yang Date: Thu, 10 Sep 2020 14:55:36 -0700 Subject: [PATCH] feat: make GET request work for fetchExploreJson, closes #668 (#777) --- .../src/query/api/legacy/fetchExploreJson.ts | 5 ++- .../query/api/legacy/fetchExploreJson.test.ts | 38 +++++++++++++------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/query/api/legacy/fetchExploreJson.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/query/api/legacy/fetchExploreJson.ts index 80d2da4e8bde..5707d76ce140 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/query/api/legacy/fetchExploreJson.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/src/query/api/legacy/fetchExploreJson.ts @@ -20,8 +20,9 @@ export default async function fetchExploreJson({ ...requestConfig, method, endpoint, - // TODO: Have to transform formData as query string for GET - postPayload: { form_data: formData }, + searchParams: + method === 'GET' ? new URLSearchParams({ form_data: JSON.stringify(formData) }) : undefined, + postPayload: method === 'POST' ? { form_data: formData } : undefined, }); return json as LegacyChartDataResponse; } diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/query/api/legacy/fetchExploreJson.test.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/query/api/legacy/fetchExploreJson.test.ts index 9c69095c6fba..e1c031a6b17f 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/query/api/legacy/fetchExploreJson.test.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-core/test/query/api/legacy/fetchExploreJson.test.ts @@ -44,24 +44,38 @@ describe('fetchExploreJson()', () => { field2: 'def', }); }); - it('uses GET when specified', () => { - fetchMock.get('glob:*/superset/explore_json/', { + it('uses GET when specified', async () => { + expect.assertions(4); + const mockUrl = 'glob:*/superset/explore_json/*'; + + fetchMock.get(mockUrl, { field1: 'abc', field2: 'def', }); - return expect( - fetchExploreJson({ - method: 'GET', - formData: { - granularity: 'minute', - viz_type: 'word_cloud', - datasource: '1__table', - }, - }), - ).resolves.toEqual({ + const result = await fetchExploreJson({ + method: 'GET', + formData: { + granularity: 'minute', + viz_type: 'word_cloud', + datasource: '1__table', + }, + }); + + expect(result).toEqual({ field1: 'abc', field2: 'def', }); + const mockCalls = fetchMock.calls(mockUrl); + expect(mockCalls).toHaveLength(1); + expect(mockCalls[0][0]).toEqual( + 'http://localhost/superset/explore_json/?form_data=%7B%22granularity%22%3A%22minute%22%2C%22viz_type%22%3A%22word_cloud%22%2C%22datasource%22%3A%221__table%22%7D', + ); + expect(mockCalls[0][1]).toEqual( + expect.objectContaining({ + method: 'GET', + body: undefined, + }), + ); }); });