From 398361ca8359fceba508e5bb93f545aba3f50f53 Mon Sep 17 00:00:00 2001 From: Beto Dealmeida Date: Wed, 13 Oct 2021 09:24:06 -0700 Subject: [PATCH] Add unit test --- .../ImportModal/ImportModal.test.tsx | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/superset-frontend/src/components/ImportModal/ImportModal.test.tsx b/superset-frontend/src/components/ImportModal/ImportModal.test.tsx index d4e3723b4495..7ca93e1fa755 100644 --- a/superset-frontend/src/components/ImportModal/ImportModal.test.tsx +++ b/superset-frontend/src/components/ImportModal/ImportModal.test.tsx @@ -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'; @@ -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', @@ -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(