From 25e993d3f40e508067dfdeab9be11258f53f639c Mon Sep 17 00:00:00 2001 From: Elizabeth Thompson Date: Fri, 15 Jan 2021 12:23:11 -0800 Subject: [PATCH 1/3] save tabs when saving the query --- .../src/SqlLab/actions/sqlLab.js | 72 ++++++++++--------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/superset-frontend/src/SqlLab/actions/sqlLab.js b/superset-frontend/src/SqlLab/actions/sqlLab.js index ebfca9116f97..8905c4ebb36b 100644 --- a/superset-frontend/src/SqlLab/actions/sqlLab.js +++ b/superset-frontend/src/SqlLab/actions/sqlLab.js @@ -139,44 +139,10 @@ export function queryValidationFailed(query, message, error) { return { type: QUERY_VALIDATION_FAILED, query, message, error }; } -export function saveQuery(query) { - return dispatch => - SupersetClient.post({ - endpoint: '/savedqueryviewapi/api/create', - postPayload: convertQueryToServer(query), - stringify: false, - }) - .then(result => { - dispatch({ - type: QUERY_EDITOR_SAVED, - query, - result: convertQueryToClient(result.json.item), - }); - dispatch(addSuccessToast(t('Your query was saved'))); - }) - .catch(() => - dispatch(addDangerToast(t('Your query could not be saved'))), - ); -} - export function updateQueryEditor(alterations) { return { type: UPDATE_QUERY_EDITOR, alterations }; } -export function updateSavedQuery(query) { - return dispatch => - SupersetClient.put({ - endpoint: `/savedqueryviewapi/api/update/${query.remoteId}`, - postPayload: convertQueryToServer(query), - stringify: false, - }) - .then(() => dispatch(addSuccessToast(t('Your query was updated')))) - .catch(() => - dispatch(addDangerToast(t('Your query could not be updated'))), - ) - .then(() => dispatch(updateQueryEditor(query))); -} - export function scheduleQuery(query) { return dispatch => SupersetClient.post({ @@ -847,6 +813,44 @@ export function queryEditorSetTitle(queryEditor, title) { }; } +export function saveQuery(query) { + return dispatch => + SupersetClient.post({ + endpoint: '/savedqueryviewapi/api/create', + postPayload: convertQueryToServer(query), + stringify: false, + }) + .then(result => { + dispatch({ + type: QUERY_EDITOR_SAVED, + query, + result: convertQueryToClient(result.json.item), + }); + dispatch(addSuccessToast(t('Your query was saved'))); + dispatch(queryEditorSetTitle(query, query.title)); + }) + .catch(() => + dispatch(addDangerToast(t('Your query could not be saved'))), + ); +} + +export function updateSavedQuery(query) { + return dispatch => + SupersetClient.put({ + endpoint: `/savedqueryviewapi/api/update/${query.remoteId}`, + postPayload: convertQueryToServer(query), + stringify: false, + }) + .then(() => { + dispatch(addSuccessToast(t('Your query was updated'))); + dispatch(queryEditorSetTitle(query, query.title)); + }) + .catch(() => + dispatch(addDangerToast(t('Your query could not be updated'))), + ) + .then(() => dispatch(updateQueryEditor(query))); +} + export function queryEditorSetSql(queryEditor, sql) { return function (dispatch) { const sync = isFeatureEnabled(FeatureFlag.SQLLAB_BACKEND_PERSISTENCE) From 6c246da95570cb4068c8aa69b16401541bafdb1e Mon Sep 17 00:00:00 2001 From: hughhhh Date: Tue, 19 Jan 2021 13:08:51 -0500 Subject: [PATCH 2/3] fix test for sqllab --- .../javascripts/sqllab/actions/sqlLab_spec.js | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/superset-frontend/spec/javascripts/sqllab/actions/sqlLab_spec.js b/superset-frontend/spec/javascripts/sqllab/actions/sqlLab_spec.js index c0ebbc219597..8de12d15c762 100644 --- a/superset-frontend/spec/javascripts/sqllab/actions/sqlLab_spec.js +++ b/superset-frontend/spec/javascripts/sqllab/actions/sqlLab_spec.js @@ -26,6 +26,7 @@ import * as featureFlags from 'src/featureFlags'; import * as actions from 'src/SqlLab/actions/sqlLab'; import { defaultQueryEditor, query } from '../fixtures'; +import { ADD_TOAST } from 'src/messageToasts/actions'; const middlewares = [thunk]; const mockStore = configureMockStore(middlewares); @@ -62,7 +63,12 @@ describe('async actions', () => { describe('saveQuery', () => { const saveQueryEndpoint = 'glob:*/savedqueryviewapi/api/create'; - fetchMock.post(saveQueryEndpoint, 'ok'); + fetchMock.post(saveQueryEndpoint, { results: { json: {} } }); + + const makeRequest = () => { + const request = actions.saveQuery(query); + return request(dispatch); + }; it('posts to the correct url', () => { expect.assertions(1); @@ -83,6 +89,38 @@ describe('async actions', () => { }); }); }); + + it('calls 3 dispatch actions', () => { + expect.assertions(1); + + return makeRequest().then(() => { + expect(dispatch.callCount).toBe(3); + }); + }); + + it('calls QUERY_EDITOR_SAVED after making a request', () => { + expect.assertions(1); + + return makeRequest().then(() => { + expect(dispatch.args[0][0].type).toBe(actions.QUERY_EDITOR_SAVED); + }); + }); + + it('onSave calls QUERY_EDITOR_SAVED and QUERY_EDITOR_SET_TITLE', () => { + expect.assertions(1); + + const store = mockStore({}); + const expectedActionTypes = [ + actions.QUERY_EDITOR_SAVED, + ADD_TOAST, + actions.QUERY_EDITOR_SET_TITLE, + ]; + return store.dispatch(actions.saveQuery(query)).then(() => { + expect(store.getActions().map(a => a.type)).toEqual( + expectedActionTypes, + ); + }); + }); }); describe('fetchQueryResults', () => { From 4ffdc1984a61a2839fc6a072ec9fd65b1898a254 Mon Sep 17 00:00:00 2001 From: hughhhh Date: Tue, 19 Jan 2021 13:29:12 -0500 Subject: [PATCH 3/3] lint --- .../spec/javascripts/sqllab/actions/sqlLab_spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/superset-frontend/spec/javascripts/sqllab/actions/sqlLab_spec.js b/superset-frontend/spec/javascripts/sqllab/actions/sqlLab_spec.js index 8de12d15c762..4a83786bc9de 100644 --- a/superset-frontend/spec/javascripts/sqllab/actions/sqlLab_spec.js +++ b/superset-frontend/spec/javascripts/sqllab/actions/sqlLab_spec.js @@ -23,10 +23,9 @@ import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; import shortid from 'shortid'; import * as featureFlags from 'src/featureFlags'; - +import { ADD_TOAST } from 'src/messageToasts/actions'; import * as actions from 'src/SqlLab/actions/sqlLab'; import { defaultQueryEditor, query } from '../fixtures'; -import { ADD_TOAST } from 'src/messageToasts/actions'; const middlewares = [thunk]; const mockStore = configureMockStore(middlewares);