mirror of
https://github.com/apache/superset.git
synced 2024-09-17 11:09:47 -04:00
fix: accept headers on import (#17080)
* fix: accept headers on import * Add unit test
This commit is contained in:
parent
b9ff85d9ea
commit
40e9add641
@ -22,6 +22,8 @@ import thunk from 'redux-thunk';
|
|||||||
import configureStore from 'redux-mock-store';
|
import configureStore from 'redux-mock-store';
|
||||||
import { styledMount as mount } from 'spec/helpers/theming';
|
import { styledMount as mount } from 'spec/helpers/theming';
|
||||||
import { ReactWrapper } from 'enzyme';
|
import { ReactWrapper } from 'enzyme';
|
||||||
|
import fetchMock from 'fetch-mock';
|
||||||
|
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
|
||||||
import { Upload } from 'src/common/components';
|
import { Upload } from 'src/common/components';
|
||||||
import Button from 'src/components/Button';
|
import Button from 'src/components/Button';
|
||||||
import { ImportResourceName } from 'src/views/CRUD/types';
|
import { ImportResourceName } from 'src/views/CRUD/types';
|
||||||
@ -31,6 +33,10 @@ import Modal from 'src/components/Modal';
|
|||||||
const mockStore = configureStore([thunk]);
|
const mockStore = configureStore([thunk]);
|
||||||
const store = mockStore({});
|
const store = mockStore({});
|
||||||
|
|
||||||
|
const DATABASE_IMPORT_URL = 'glob:*/api/v1/database/import/';
|
||||||
|
fetchMock.config.overwriteRoutes = true;
|
||||||
|
fetchMock.post(DATABASE_IMPORT_URL, { result: 'OK' });
|
||||||
|
|
||||||
const requiredProps = {
|
const requiredProps = {
|
||||||
resourceName: 'database' as ImportResourceName,
|
resourceName: 'database' as ImportResourceName,
|
||||||
resourceLabel: 'database',
|
resourceLabel: 'database',
|
||||||
@ -101,6 +107,33 @@ describe('ImportModelsModal', () => {
|
|||||||
expect(wrapper.find(Button).at(2).prop('disabled')).toBe(false);
|
expect(wrapper.find(Button).at(2).prop('disabled')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should POST with request header `Accept: application/json`', async () => {
|
||||||
|
const file = new File([new ArrayBuffer(1)], 'model_export.zip');
|
||||||
|
act(() => {
|
||||||
|
const handler = wrapper.find(Upload).prop('onChange');
|
||||||
|
if (handler) {
|
||||||
|
handler({
|
||||||
|
fileList: [],
|
||||||
|
file: {
|
||||||
|
name: 'model_export.zip',
|
||||||
|
originFileObj: file,
|
||||||
|
uid: '-1',
|
||||||
|
size: 0,
|
||||||
|
type: 'zip',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
wrapper.update();
|
||||||
|
|
||||||
|
wrapper.find(Button).at(2).simulate('click');
|
||||||
|
await waitForComponentToPaint(wrapper);
|
||||||
|
expect(fetchMock.calls(DATABASE_IMPORT_URL)[0][1]?.headers).toStrictEqual({
|
||||||
|
Accept: 'application/json',
|
||||||
|
'X-CSRFToken': '1234',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should render password fields when needed for import', () => {
|
it('should render password fields when needed for import', () => {
|
||||||
const wrapperWithPasswords = mount(
|
const wrapperWithPasswords = mount(
|
||||||
<ImportModelsModal
|
<ImportModelsModal
|
||||||
|
@ -428,6 +428,7 @@ export function useImportResource(
|
|||||||
return SupersetClient.post({
|
return SupersetClient.post({
|
||||||
endpoint: `/api/v1/${resourceName}/import/`,
|
endpoint: `/api/v1/${resourceName}/import/`,
|
||||||
body: formData,
|
body: formData,
|
||||||
|
headers: { Accept: 'application/json' },
|
||||||
})
|
})
|
||||||
.then(() => true)
|
.then(() => true)
|
||||||
.catch(response =>
|
.catch(response =>
|
||||||
|
Loading…
Reference in New Issue
Block a user