diff --git a/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/FormattingPopoverContent.test.tsx b/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/FormattingPopoverContent.test.tsx
new file mode 100644
index 000000000..e99796c13
--- /dev/null
+++ b/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/FormattingPopoverContent.test.tsx
@@ -0,0 +1,121 @@
+/**
+ * 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,
+ fireEvent,
+ waitFor,
+} from 'spec/helpers/testing-library';
+import { Comparator } from '@superset-ui/chart-controls';
+import { ColorSchemeEnum } from '@superset-ui/plugin-chart-table';
+import { FormattingPopoverContent } from './FormattingPopoverContent';
+
+const mockOnChange = jest.fn();
+
+const columns = [
+ { label: 'Column 1', value: 'column1' },
+ { label: 'Column 2', value: 'column2' },
+];
+
+const extraColorChoices = [
+ {
+ value: ColorSchemeEnum.Green,
+ label: 'Green for increase, red for decrease',
+ },
+ {
+ value: ColorSchemeEnum.Red,
+ label: 'Red for increase, green for decrease',
+ },
+];
+
+test('renders FormattingPopoverContent component', () => {
+ render(
+ ,
+ );
+
+ // Assert that the component renders correctly
+ expect(screen.getByLabelText('Column')).toBeInTheDocument();
+ expect(screen.getAllByLabelText('Color scheme')).toHaveLength(2);
+ expect(screen.getAllByLabelText('Operator')).toHaveLength(2);
+ expect(screen.queryByLabelText('Left value')).not.toBeInTheDocument();
+ expect(screen.queryByLabelText('Right value')).not.toBeInTheDocument();
+ expect(screen.getByText('Apply')).toBeInTheDocument();
+});
+
+test('calls onChange when Apply button is clicked', async () => {
+ render(
+ ,
+ );
+
+ // Simulate user interaction by clicking the Apply button
+ fireEvent.click(screen.getByText('Apply'));
+
+ // Assert that the onChange function is called with the correct config
+ await waitFor(() => {
+ expect(mockOnChange).toHaveBeenCalled();
+ });
+});
+
+test('renders the correct input fields based on the selected operator', async () => {
+ render(
+ ,
+ );
+
+ // Select the 'Between' operator
+ fireEvent.change(screen.getAllByLabelText('Operator')[0], {
+ target: { value: Comparator.Between },
+ });
+ fireEvent.click(await screen.findByTitle('< x <'));
+
+ // Assert that the left and right value inputs are rendered
+ expect(await screen.findByLabelText('Left value')).toBeInTheDocument();
+ expect(await screen.findByLabelText('Right value')).toBeInTheDocument();
+});
+
+test('renders None for operator when Green for increase is selected', async () => {
+ render(
+ ,
+ );
+
+ // Select the 'Green for increase' color scheme
+ fireEvent.change(screen.getAllByLabelText(/color scheme/i)[0], {
+ target: { value: ColorSchemeEnum.Green },
+ });
+
+ fireEvent.click(await screen.findByTitle(/green for increase/i));
+
+ // Assert that the operator is set to 'None'
+ expect(screen.getByText(/none/i)).toBeInTheDocument();
+});
diff --git a/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/FormattingPopoverContent.tsx b/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/FormattingPopoverContent.tsx
index b49fdbb02..79b0829da 100644
--- a/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/FormattingPopoverContent.tsx
+++ b/superset-frontend/src/explore/components/controls/ConditionalFormattingControl/FormattingPopoverContent.tsx
@@ -124,7 +124,7 @@ const shouldFormItemUpdate = (
isOperatorMultiValue(prevValues.operator) !==
isOperatorMultiValue(currentValues.operator);
-const operatorField = (showOnlyNone?: boolean) => (
+const renderOperator = ({ showOnlyNone }: { showOnlyNone?: boolean } = {}) => (
(
const renderOperatorFields = ({ getFieldValue }: GetFieldValue) =>
isOperatorNone(getFieldValue('operator')) ? (
- {operatorField()}
+ {renderOperator()}
) : isOperatorMultiValue(getFieldValue('operator')) ? (
@@ -157,7 +157,7 @@ const renderOperatorFields = ({ getFieldValue }: GetFieldValue) =>
-
{operatorField}
+ {renderOperator()}
) : (
- {operatorField}
+ {renderOperator()}
- {operatorField(true)}
+ {renderOperator({ showOnlyNone: true })}
)}