From a3f0d00714cafe01d32a39a4df56ec6d4b15087c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=E1=BB=97=20Tr=E1=BB=8Dng=20H=E1=BA=A3i?= <41283691+hainenber@users.noreply.github.com> Date: Fri, 28 Jun 2024 23:22:19 +0700 Subject: [PATCH] refactor(src/explore/comp/controls/metricControl): migrate Enzyme test to RTL syntax (#29380) Signed-off-by: hainenber Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com> --- .../MetricDefinitionOption.test.jsx | 53 ---------------- .../MetricDefinitionOption.test.tsx | 60 +++++++++++++++++++ 2 files changed, 60 insertions(+), 53 deletions(-) delete mode 100644 superset-frontend/src/explore/components/controls/MetricControl/MetricDefinitionOption.test.jsx create mode 100644 superset-frontend/src/explore/components/controls/MetricControl/MetricDefinitionOption.test.tsx diff --git a/superset-frontend/src/explore/components/controls/MetricControl/MetricDefinitionOption.test.jsx b/superset-frontend/src/explore/components/controls/MetricControl/MetricDefinitionOption.test.jsx deleted file mode 100644 index 64326fd79..000000000 --- a/superset-frontend/src/explore/components/controls/MetricControl/MetricDefinitionOption.test.jsx +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import configureStore from 'redux-mock-store'; -import { shallow } from 'enzyme'; - -import MetricDefinitionOption from 'src/explore/components/controls/MetricControl/MetricDefinitionOption'; -import AggregateOption from 'src/explore/components/controls/MetricControl/AggregateOption'; -import { - StyledMetricOption, - StyledColumnOption, -} from 'src/explore/components/optionRenderers'; - -describe('MetricDefinitionOption', () => { - const mockStore = configureStore([]); - const store = mockStore({}); - - function setup(props) { - return shallow().dive(); - } - - it('renders a StyledMetricOption given a saved metric', () => { - const wrapper = setup({ - option: { metric_name: 'a_saved_metric', expression: 'COUNT(*)' }, - }); - expect(wrapper.find(StyledMetricOption)).toExist(); - }); - - it('renders a StyledColumnOption given a column', () => { - const wrapper = setup({ option: { column_name: 'a_column' } }); - expect(wrapper.find(StyledColumnOption)).toExist(); - }); - - it('renders an AggregateOption given an aggregate metric', () => { - const wrapper = setup({ option: { aggregate_name: 'an_aggregate' } }); - expect(wrapper.find(AggregateOption)).toExist(); - }); -}); diff --git a/superset-frontend/src/explore/components/controls/MetricControl/MetricDefinitionOption.test.tsx b/superset-frontend/src/explore/components/controls/MetricControl/MetricDefinitionOption.test.tsx new file mode 100644 index 000000000..bb2c71d24 --- /dev/null +++ b/superset-frontend/src/explore/components/controls/MetricControl/MetricDefinitionOption.test.tsx @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { render, screen } from 'spec/helpers/testing-library'; + +import MetricDefinitionOption from 'src/explore/components/controls/MetricControl/MetricDefinitionOption'; +import userEvent from '@testing-library/user-event'; + +type MetricDefinitionOptionProps = { + option: { + metric_name?: string; + expression?: string; + column_name?: string; + aggregate_name?: string; + }; +}; + +const renderMetricDefinitionOption = (props: MetricDefinitionOptionProps) => { + render(, { + useRedux: true, + useRouter: true, + }); +}; + +test('renders a given saved metric and display SQL expression popover when hovered', async () => { + renderMetricDefinitionOption({ + option: { metric_name: 'a_saved_metric', expression: 'COUNT(*)' }, + }); + expect(await screen.findByText('a_saved_metric')).toBeInTheDocument(); + + // Grab calculator icon and mock mouse hovering over it + const calculatorIcon = await screen.findByLabelText('calculator'); + userEvent.hover(calculatorIcon); + expect(await screen.findByText('SQL expression')).toBeInTheDocument(); +}); + +test('renders when given a column', async () => { + renderMetricDefinitionOption({ option: { column_name: 'a_column' } }); + expect(await screen.findByText('a_column')).toBeInTheDocument(); +}); + +test('renders when given an aggregate metric', async () => { + renderMetricDefinitionOption({ option: { aggregate_name: 'an_aggregate' } }); + expect(await screen.findByText('an_aggregate')).toBeInTheDocument(); +});