FrancescoCastaldi commented on code in PR #45051:
URL: https://github.com/apache/superset/pull/45051#discussion_r4252575973


##########
superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.overflow.test.tsx:
##########
@@ -565,3 +570,114 @@ test('focusing a filter that has not overflowed does not 
open the dropdown', asy
 
   expect(mockDropdownOpen).not.toHaveBeenCalled();
 });
+
+test('initializes horizontal bar with items when native filters are 
configured', async () => {
+  const filters = [
+    createSelectNativeFilter('NATIVE_FILTER-1', 'country'),
+    createSelectNativeFilter('NATIVE_FILTER-2', 'city'),
+  ];
+  renderHorizontal(filters, buildDataMaskSelected(filters));
+  await waitFor(() => expect(latestProps()).toBeTruthy());
+  expect(latestProps().items).toHaveLength(2);
+});
+
+test('renders native filters with requiredFirst and default values in the 
horizontal row', async () => {
+  const filters = [
+    {
+      ...createSelectNativeFilter('NATIVE_FILTER-1', 'account'),
+      requiredFirst: true,
+    },
+    createSelectNativeFilter('NATIVE_FILTER-2', 'region'),
+  ];
+  const dataMask = buildDataMaskSelected(filters, ['NATIVE_FILTER-1']);
+  renderHorizontal(filters, dataMask);
+
+  await waitFor(() => expect(latestProps()).toBeTruthy());
+  expect(latestProps().items).toHaveLength(2);
+  expect(latestProps().items.map(i => i.id)).toEqual([
+    'NATIVE_FILTER-1',
+    'NATIVE_FILTER-2',
+  ]);
+});
+
+test('maintains filter item order in horizontal bar', async () => {
+  const filters = [
+    createSelectNativeFilter('NATIVE_FILTER-1', 'alpha'),
+    createSelectNativeFilter('NATIVE_FILTER-2', 'beta'),
+    createSelectNativeFilter('NATIVE_FILTER-3', 'gamma'),
+  ];
+  renderHorizontal(filters, buildDataMaskSelected(filters));
+
+  await waitFor(() => expect(latestProps()).toBeTruthy());
+  expect(latestProps().items.map(i => i.id)).toEqual([
+    'NATIVE_FILTER-1',
+    'NATIVE_FILTER-2',
+    'NATIVE_FILTER-3',
+  ]);
+});
+
+test('provides correct filter count when filters include requiredFirst', async 
() => {
+  const filters = [
+    {
+      ...createSelectNativeFilter('NATIVE_FILTER-1', 'account'),
+      requiredFirst: true,
+    },
+    createSelectNativeFilter('NATIVE_FILTER-2', 'country'),
+    createSelectNativeFilter('NATIVE_FILTER-3', 'status'),
+  ];
+  renderHorizontal(filters, buildDataMaskSelected(filters));
+
+  await waitFor(() => expect(latestProps()).toBeTruthy());
+  expect(latestProps().items).toHaveLength(3);
+});
+
+// Regression test group for issue #45050:
+// Prevents DropdownContainer closed popover from stealing OutPortal nodes
+// into hidden DOM when requiredFirst native filters and table cross-filters 
coexist.
+test('does not pass forceRender to DropdownContainer even when a filter has 
requiredFirst (regression test for #45050)', async () => {
+  const filters = [
+    {
+      ...createSelectNativeFilter('NATIVE_FILTER-1', 'account'),
+      requiredFirst: true,
+    },
+    createSelectNativeFilter('NATIVE_FILTER-2', 'flow'),
+  ];
+
+  renderHorizontal(filters, buildDataMaskSelected(filters));
+
+  await waitFor(() => expect(latestProps()).toBeTruthy());

Review Comment:
   Great point @sadpandajoe! Updated the real `DropdownContainer` regression 
test in commit `f674ce81cb` so that it:
   1. Starts with `dataMask: {}` (no cross-filter chip in the initial state) 
and a real Redux store (`createStore(..., reducerIndex)`).
   2. Forces overflow geometry via `getBoundingClientRect` (`450px` container 
width, `200px` per child) so the first two native filters (`Account` and `Date 
range`) fit in the main row while the third (`Flow`) overflows and creates the 
closed `More filters` popover (`dropdown-container-btn`).
   3. Verifies that while `More filters` is closed, `dropdown-content` is not 
force-rendered into the DOM (`re-adding forceRender={hasRequiredFirst} fails 
this assertion immediately`).
   4. Dispatches `updateDataMask` to add the cross-filter chip while `More 
filters` is closed, then opens `More filters` and asserts all controls 
(`Products Sold By Product Line`, `Account`, `Date range`, and `Flow`) are 
reachable across the main row and opened popover.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to