Skip to content

Commit

Permalink
fix: accept headers on import (#17080)
Browse files Browse the repository at this point in the history
* fix: accept headers on import

* Add unit test
  • Loading branch information
betodealmeida authored Oct 13, 2021
1 parent b9ff85d commit 40e9add
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
33 changes: 33 additions & 0 deletions superset-frontend/src/components/ImportModal/ImportModal.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import thunk from 'redux-thunk';
import configureStore from 'redux-mock-store';
import { styledMount as mount } from 'spec/helpers/theming';
import { ReactWrapper } from 'enzyme';
import fetchMock from 'fetch-mock';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { Upload } from 'src/common/components';
import Button from 'src/components/Button';
import { ImportResourceName } from 'src/views/CRUD/types';
Expand All @@ -31,6 +33,10 @@ import Modal from 'src/components/Modal';
const mockStore = configureStore([thunk]);
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 = {
resourceName: 'database' as ImportResourceName,
resourceLabel: 'database',
Expand Down Expand Up @@ -101,6 +107,33 @@ describe('ImportModelsModal', () => {
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', () => {
const wrapperWithPasswords = mount(
<ImportModelsModal
Expand Down
1 change: 1 addition & 0 deletions superset-frontend/src/views/CRUD/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,7 @@ export function useImportResource(
return SupersetClient.post({
endpoint: `/api/v1/${resourceName}/import/`,
body: formData,
headers: { Accept: 'application/json' },
})
.then(() => true)
.catch(response =>
Expand Down

0 comments on commit 40e9add

Please sign in to comment.