diff --git a/frontend/test/__support__/enzyme_utils.js b/frontend/test/__support__/enzyme_utils.js index a748ba9f984fa43c6e7ec9c6082ce8a051b5e2de..b77bc55a21ff407fe4a6016e55e7625378b6027f 100644 --- a/frontend/test/__support__/enzyme_utils.js +++ b/frontend/test/__support__/enzyme_utils.js @@ -30,7 +30,7 @@ export const clickButton = (enzymeWrapper) => { } } -export const setInputValue = (inputWrapper, value, { blur = true } = {}) => { +export const setInputValue = (inputWrapper, value, { blur = true } = {}) => { inputWrapper.simulate('change', { target: { value: value } }); if (blur) inputWrapper.simulate("blur") } diff --git a/frontend/test/__support__/integrated_tests.js b/frontend/test/__support__/integrated_tests.js index 80d5939ce0506fe0fab6fae503e59e9da2681b26..b6331c3e7bd84ec3c07ccfd0c71a637874c2ee6b 100644 --- a/frontend/test/__support__/integrated_tests.js +++ b/frontend/test/__support__/integrated_tests.js @@ -193,8 +193,6 @@ const testStoreEnhancer = (createStore, history, getRoutes) => { _onActionDispatched: null, _dispatchedActions: [], _finalStoreInstance: null, - _usingAppContainer: false, - dispatch: (action) => { const result = store._originalDispatch(action); @@ -282,7 +280,6 @@ const testStoreEnhancer = (createStore, history, getRoutes) => { connectContainer: (reactContainer) => { store.warnIfStoreCreationNotComplete(); - store._usingAppContainer = false; const routes = createRoutes(getRoutes(store._finalStoreInstance)) return store._connectWithStore( @@ -296,7 +293,6 @@ const testStoreEnhancer = (createStore, history, getRoutes) => { getAppContainer: () => { store.warnIfStoreCreationNotComplete(); - store._usingAppContainer = true; return store._connectWithStore( <Router history={history}> diff --git a/frontend/test/admin/datamodel/FieldApp.integ.spec.js b/frontend/test/admin/datamodel/FieldApp.integ.spec.js index d25f17d5a3be837d1810a00177117a159be77e44..cad966f5918a678d1aa5afac16aa538e45bd4a55 100644 --- a/frontend/test/admin/datamodel/FieldApp.integ.spec.js +++ b/frontend/test/admin/datamodel/FieldApp.integ.spec.js @@ -7,8 +7,7 @@ import { clickButton, setInputValue, click -} from "__support__/enzyme_utils"; - +} from "__support__/enzyme_utils" import { DELETE_FIELD_DIMENSION, deleteFieldDimension, @@ -130,7 +129,7 @@ describe("FieldApp", () => { const { store, fieldApp } = await initFieldApp({ fieldId: CREATED_AT_ID }); const visibilitySelect = fieldApp.find(FieldVisibilityPicker); - visibilitySelect.simulate('click'); + click(visibilitySelect); click(visibilitySelect.find(TestPopover).find("li").at(1).children().first()); await store.waitForActions([UPDATE_FIELD]) @@ -166,7 +165,7 @@ describe("FieldApp", () => { const { store, fieldApp } = await initFieldApp({ fieldId: CREATED_AT_ID }); const picker = fieldApp.find(SpecialTypeAndTargetPicker) const typeSelect = picker.find(Select).at(0) - typeSelect.simulate('click'); + click(typeSelect); const noSpecialTypeButton = typeSelect.find(TestPopover).find("li").last().children().first() click(noSpecialTypeButton); @@ -179,7 +178,7 @@ describe("FieldApp", () => { const { store, fieldApp } = await initFieldApp({ fieldId: CREATED_AT_ID }); const picker = fieldApp.find(SpecialTypeAndTargetPicker) const typeSelect = picker.find(Select).at(0) - typeSelect.simulate('click'); + click(typeSelect); const noSpecialTypeButton = typeSelect.find(TestPopover) .find("li") @@ -196,7 +195,7 @@ describe("FieldApp", () => { const { store, fieldApp } = await initFieldApp({ fieldId: CREATED_AT_ID }); const picker = fieldApp.find(SpecialTypeAndTargetPicker) const typeSelect = picker.find(Select).at(0) - typeSelect.simulate('click'); + click(typeSelect); const foreignKeyButton = typeSelect.find(TestPopover).find("li").at(2).children().first(); click(foreignKeyButton); @@ -205,14 +204,14 @@ describe("FieldApp", () => { expect(picker.text()).toMatch(/Foreign KeySelect a target/); const fkFieldSelect = picker.find(Select).at(1) - fkFieldSelect.simulate('click'); + click(fkFieldSelect); const productIdField = fkFieldSelect.find(TestPopover) .find("li") .filterWhere(li => /The numerical product number./.test(li.text())) .first().children().first(); - productIdField.simulate('click') + click(productIdField) await store.waitForActions([UPDATE_FIELD]) expect(picker.text()).toMatch(/Foreign KeyProducts → ID/); }) @@ -237,7 +236,7 @@ describe("FieldApp", () => { const mappingTypePicker = section.find(Select).first(); expect(mappingTypePicker.text()).toBe('Use original value') - mappingTypePicker.simulate('click'); + click(mappingTypePicker); const pickerOptions = mappingTypePicker.find(TestPopover).find("li"); expect(pickerOptions.length).toBe(1); }) @@ -248,12 +247,12 @@ describe("FieldApp", () => { const mappingTypePicker = section.find(Select); expect(mappingTypePicker.text()).toBe('Use original value') - mappingTypePicker.simulate('click'); + click(mappingTypePicker); const pickerOptions = mappingTypePicker.find(TestPopover).find("li"); expect(pickerOptions.length).toBe(2); const useFKButton = pickerOptions.at(1).children().first() - useFKButton.simulate('click'); + click(useFKButton); store.waitForActions([UPDATE_FIELD_DIMENSION, FETCH_TABLE_METADATA]) store.resetDispatchedActions(); // TODO: Figure out a way to avoid using delay – the use of delays may lead to occasional CI failures @@ -262,14 +261,14 @@ describe("FieldApp", () => { const fkFieldSelect = section.find(SelectButton); expect(fkFieldSelect.text()).toBe("Name"); - fkFieldSelect.simulate('click'); + click(fkFieldSelect); const sourceField = fkFieldSelect.parent().find(TestPopover) .find("li") .filterWhere(li => /Source/.test(li.text())) .first().children().first(); - sourceField.simulate('click') + click(sourceField) store.waitForActions([FETCH_TABLE_METADATA]) // TODO: Figure out a way to avoid using delay – the use of delays may lead to occasional CI failures await delay(500); @@ -283,7 +282,7 @@ describe("FieldApp", () => { expect(mappingTypePicker.text()).toBe('Use foreign key') const fkFieldSelect = section.find(SelectButton); - fkFieldSelect.simulate('click'); + click(fkFieldSelect); const popover = fkFieldSelect.parent().find(TestPopover); expect(popover.length).toBe(1); @@ -298,10 +297,10 @@ describe("FieldApp", () => { const mappingTypePicker = section.find(Select); expect(mappingTypePicker.text()).toBe('Use foreign key') - mappingTypePicker.simulate('click'); + click(mappingTypePicker); const pickerOptions = mappingTypePicker.find(TestPopover).find("li"); const useOriginalValue = pickerOptions.first().children().first() - useOriginalValue.simulate('click'); + click(useOriginalValue); store.waitForActions([DELETE_FIELD_DIMENSION, FETCH_TABLE_METADATA]); }) @@ -312,7 +311,7 @@ describe("FieldApp", () => { const mappingTypePicker = section.find(Select); expect(mappingTypePicker.text()).toBe('Use original value') - mappingTypePicker.simulate('click'); + click(mappingTypePicker); const pickerOptions = mappingTypePicker.find(TestPopover).find("li"); expect(pickerOptions.length).toBe(1); }); @@ -324,12 +323,12 @@ describe("FieldApp", () => { const mappingTypePicker = section.find(Select); expect(mappingTypePicker.text()).toBe('Use original value') - mappingTypePicker.simulate('click'); + click(mappingTypePicker); const pickerOptions = mappingTypePicker.find(TestPopover).find("li"); expect(pickerOptions.length).toBe(2); const customMappingButton = pickerOptions.at(1).children().first() - customMappingButton.simulate('click'); + click(customMappingButton); store.waitForActions([UPDATE_FIELD_DIMENSION, FETCH_TABLE_METADATA]) // TODO: Figure out a way to avoid using delay – using delays may lead to occasional CI failures diff --git a/frontend/test/admin/datamodel/datamodel.integ.spec.js b/frontend/test/admin/datamodel/datamodel.integ.spec.js index e65a43726289bdd3b6bf1a293d6b8b7717036612..213685b78a04ba92cc49293fd5583566d1081d34 100644 --- a/frontend/test/admin/datamodel/datamodel.integ.spec.js +++ b/frontend/test/admin/datamodel/datamodel.integ.spec.js @@ -54,17 +54,17 @@ describe("admin/datamodel", () => { store.resetDispatchedActions() // Toggle its visibility to "Hidden" - app.find("#VisibilityTypes > span").at(1).simulate("click"); + click(app.find("#VisibilityTypes > span").at(1)) await store.waitForActions([UPDATE_TABLE]); store.resetDispatchedActions() // Toggle "Why hide" to "Irrelevant/Cruft" - app.find("#VisibilitySubTypes > span").at(2).simulate("click") + click(app.find("#VisibilitySubTypes > span").at(2)) await store.waitForActions([UPDATE_TABLE]); store.resetDispatchedActions() // Unhide - app.find("#VisibilityTypes > span").at(0).simulate("click"); + click(app.find("#VisibilityTypes > span").at(0)) // Open "People" table section click(adminListItems.at(1)); @@ -129,7 +129,7 @@ describe("admin/datamodel", () => { const addFilterButton = filterPopover.find(".Button.disabled"); - filterPopover.find('textarea.border-purple').simulate('change', { target: { value: "gmail" }}) + setInputValue(filterPopover.find('textarea.border-purple'), "gmail"); await clickButton(addFilterButton); await store.waitForActions([UPDATE_PREVIEW_SUMMARY]); @@ -139,7 +139,7 @@ describe("admin/datamodel", () => { setInputValue(app.find("textarea[name='description']"), "change") // Save the segment - app.find('button[children="Save changes"]').simulate("click"); + click(app.find('button[children="Save changes"]')) await store.waitForActions([CREATE_SEGMENT, INITIALIZE_METADATA]); store.resetDispatchedActions(); @@ -165,13 +165,13 @@ describe("admin/datamodel", () => { await store.waitForActions([FETCH_TABLE_METADATA, UPDATE_PREVIEW_SUMMARY]); click(app.find("#Query-section-aggregation")); - app.find("#AggregationPopover").find('h4[children="Count of rows"]').simulate("click"); + click(app.find("#AggregationPopover").find('h4[children="Count of rows"]')) - app.find("input[name='name']").simulate('change', { target: { value: 'User count' }}); - app.find("textarea[name='description']").simulate("change", { target: { value: 'Total number of users'}}); + setInputValue(app.find("input[name='name']"), 'User count'); + setInputValue(app.find("textarea[name='description']"), 'Total number of users'); // Save the metric - app.find('button[children="Save changes"]').simulate("click"); + click(app.find('button[children="Save changes"]')) await store.waitForActions([CREATE_METRIC, INITIALIZE_METADATA]); expect(store.getPath()).toBe("/admin/datamodel/database/1/table/2") diff --git a/frontend/test/admin/settings/settings.integ.spec.js b/frontend/test/admin/settings/settings.integ.spec.js index ac12a8979adb385ed92b8a88a7ed784d7593910a..7b7d8d1d88a5827dc31c3e0cb2ddd0eb0d45d6f3 100644 --- a/frontend/test/admin/settings/settings.integ.spec.js +++ b/frontend/test/admin/settings/settings.integ.spec.js @@ -7,6 +7,7 @@ import { mount } from "enzyme"; import SettingInput from "metabase/admin/settings/components/widgets/SettingInput"; import { INITIALIZE_SETTINGS, UPDATE_SETTING } from "metabase/admin/settings/settings"; import { LOAD_CURRENT_USER } from "metabase/redux/user"; +import { setInputValue } from "__support__/enzyme_utils"; describe("admin/settings", () => { beforeAll(async () => @@ -31,7 +32,7 @@ describe("admin/settings", () => { expect(input.prop("value")).not.toBe(siteName) // clear the site name input, send the keys corresponding to the site name, then blur to trigger the update - input.simulate('change', { target: { value: siteName } }) + setInputValue(input, siteName) input.simulate('blur') await store.waitForActions([UPDATE_SETTING]) diff --git a/frontend/test/components/PasswordReveal.unit.spec.js b/frontend/test/components/PasswordReveal.unit.spec.js index 41a1313d99a24a416fb17ba4798f117d0472f3cc..d5ad07180abda4da39dcdd39ff523449534c31d4 100644 --- a/frontend/test/components/PasswordReveal.unit.spec.js +++ b/frontend/test/components/PasswordReveal.unit.spec.js @@ -1,3 +1,5 @@ +import { click } from "__support__/enzyme_utils"; + import React from 'react' import PasswordReveal from '../../src/metabase/components/PasswordReveal' import CopyButton from 'metabase/components/CopyButton' @@ -13,7 +15,7 @@ describe('password reveal', () => { it('should toggle the visibility state when hide / show are clicked', () => { expect(wrapper.state().visible).toEqual(false) - wrapper.find('a').simulate('click') + click(wrapper.find('a')) expect(wrapper.state().visible).toEqual(true) }) diff --git a/frontend/test/components/StepIndicators.unit.spec.js b/frontend/test/components/StepIndicators.unit.spec.js index 325429d5d00044d7b4cdfc2aa5a1dfe2301c5c04..b2f6dd71665bc6f2432b3a88ba8ef88acad1fef5 100644 --- a/frontend/test/components/StepIndicators.unit.spec.js +++ b/frontend/test/components/StepIndicators.unit.spec.js @@ -1,3 +1,5 @@ +import { click } from "__support__/enzyme_utils"; + import React from 'react' import { shallow } from 'enzyme' import sinon from 'sinon' @@ -29,7 +31,7 @@ describe('Step indicators', () => { ) const targetIndicator = wrapper.find('li').first() - targetIndicator.simulate('click') + click(targetIndicator); expect(goToStep.calledWith(1)).toEqual(true) }) }) diff --git a/frontend/test/dashboard/dashboard.integ.spec.js b/frontend/test/dashboard/dashboard.integ.spec.js index cad4d19095e83bc478eef3b2e133dab8b9dd8721..186582917e07455089dbd6deaebd460c8847100e 100644 --- a/frontend/test/dashboard/dashboard.integ.spec.js +++ b/frontend/test/dashboard/dashboard.integ.spec.js @@ -141,14 +141,16 @@ describe("Dashboard", () => { await store.waitForActions([SET_EDITING_DASHBOARD]); click(app.find(".Icon.Icon-funneladd")); // Choose Time filter type - app.find(ParameterOptionsSection) - .filterWhere((section) => section.text().match(/Time/)) - .simulate("click"); + click( + app.find(ParameterOptionsSection) + .filterWhere((section) => section.text().match(/Time/)) + ); // Choose Relative date filter - app.find(ParameterOptionItem) - .filterWhere((item) => item.text().match(/Relative Date/)) - .simulate("click"); + click( + app.find(ParameterOptionItem) + .filterWhere((item) => item.text().match(/Relative Date/)) + ) await store.waitForActions(ADD_PARAMETER) diff --git a/frontend/test/home/NewUserOnboardingModal.unit.spec.js b/frontend/test/home/NewUserOnboardingModal.unit.spec.js index 7f88f4f3b02123b35b98d7323a346dac38f1cb1b..5fc7b6868f33da9f907aa24a45183fff996f2d68 100644 --- a/frontend/test/home/NewUserOnboardingModal.unit.spec.js +++ b/frontend/test/home/NewUserOnboardingModal.unit.spec.js @@ -1,3 +1,5 @@ +import { click } from "__support__/enzyme_utils"; + import React from 'react' import { shallow } from 'enzyme' import sinon from 'sinon' @@ -12,7 +14,7 @@ describe('new user onboarding modal', () => { const nextButton = wrapper.find('a') expect(wrapper.state().step).toEqual(1) - nextButton.simulate('click') + click(nextButton) expect(wrapper.state().step).toEqual(2) }) @@ -26,7 +28,7 @@ describe('new user onboarding modal', () => { const nextButton = wrapper.find('a') expect(nextButton.text()).toEqual('Let\'s go') - nextButton.simulate('click') + click(nextButton); expect(onClose.called).toEqual(true) }) }) diff --git a/frontend/test/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js b/frontend/test/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js index cdc7121830c700770bcd474828fdd0cd39b46c25..53862b48e502563977a7af0cd07f1cf006f0eb55 100644 --- a/frontend/test/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js +++ b/frontend/test/modes/actions/SummarizeBySegmentMetricAction.unit.spec.js @@ -5,6 +5,7 @@ import { ORDERS_TABLE_ID, metadata } from "__support__/sample_dataset_fixture"; +import { click } from "__support__/enzyme_utils" import Question from "metabase-lib/lib/Question"; import SummarizeBySegmentMetricAction from "metabase/qb/components/actions/SummarizeBySegmentMetricAction"; import { mount } from "enzyme"; @@ -72,12 +73,9 @@ describe("SummarizeBySegmentMetricAction", () => { }); const component = mount(popover); - component.find('.List-item-title[children="Sum of ..."]') - .simulate("click"); + click(component.find('.List-item-title[children="Sum of ..."]')); - component - .find('.List-item-title[children="Subtotal"]') - .simulate("click"); + click(component.find('.List-item-title[children="Subtotal"]')); }); }); }); diff --git a/frontend/test/parameters/parameters.integ.spec.js b/frontend/test/parameters/parameters.integ.spec.js index 1d3a154fe4722ec731cf43c33de28788aac3cae6..b57e4d2b112de859de85c946b5aeccbb9abeb8c3 100644 --- a/frontend/test/parameters/parameters.integ.spec.js +++ b/frontend/test/parameters/parameters.integ.spec.js @@ -102,7 +102,7 @@ describe("parameters", () => { await store.waitForActions([LOAD_CURRENT_USER, INITIALIZE_SETTINGS]) - app.find(EmbeddingLegalese).find('button[children="Enable"]').simulate('click'); + click(app.find(EmbeddingLegalese).find('button[children="Enable"]')); await store.waitForActions([UPDATE_SETTING]) expect(app.find(EmbeddingLegalese).length).toBe(0); @@ -165,7 +165,7 @@ describe("parameters", () => { expect(app.find(Scalar).text()).toBe(COUNT_DOOHICKEY); // save the question, required for public link/embedding - app.find(".Header-buttonSection a").first().find("a").simulate("click"); + click(app.find(".Header-buttonSection a").first().find("a")) await store.waitForActions([LOAD_COLLECTIONS]); setInputValue(app.find(SaveQuestionModal).find("input[name='name']"), "sql parametrized"); @@ -173,7 +173,7 @@ describe("parameters", () => { clickButton(app.find(SaveQuestionModal).find("button").last()); await store.waitForActions([NOTIFY_CARD_CREATED]); - app.find('#QuestionSavedModal .Button[children="Not now"]').simulate("click"); + click(app.find('#QuestionSavedModal .Button[children="Not now"]')) // wait for modal to close :'( await delay(200); @@ -186,7 +186,7 @@ describe("parameters", () => { // make the parameter editable click(app.find(".AdminSelect-content[children='Disabled']")); - app.find(".TestPopoverBody .Icon-pencil").simulate("click"); + click(app.find(".TestPopoverBody .Icon-pencil")) await delay(200); diff --git a/frontend/test/query_builder/components/dataref/FieldPane.integ.spec.js b/frontend/test/query_builder/components/dataref/FieldPane.integ.spec.js index 5b7c344fd7f6874a22b8c79c9cecf1c32db8a0c0..d721eafbcfe2d36a06520a09d6aec06b6441d4ab 100644 --- a/frontend/test/query_builder/components/dataref/FieldPane.integ.spec.js +++ b/frontend/test/query_builder/components/dataref/FieldPane.integ.spec.js @@ -51,7 +51,7 @@ describe("FieldPane", () => { // then we can replace this with `store.waitForActions([FETCH_TABLE_FOREIGN_KEYS])` or similar await delay(3000) - dataReference.find(`a[children="Created At"]`).first().simulate("click") + click(dataReference.find(`a[children="Created At"]`).first()) await store.waitForActions([FETCH_TABLE_METADATA]); }); @@ -65,7 +65,7 @@ describe("FieldPane", () => { // eslint-disable-line react/no-irregular-whitespace expect(getUseForButton().text()).toMatch(/Group by/); - getUseForButton().simulate('click'); + click(getUseForButton()); await store.waitForActions([QUERY_COMPLETED]); store.resetDispatchedActions()