sadpandajoe commented on code in PR #45051:
URL: https://github.com/apache/superset/pull/45051#discussion_r4243747874
##########
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:
The two prop assertions would fail if that exact line returned, but they
only check the props passed to a mocked container. The real-container test
still has the cross-filter in the initial state, and jsdom gives zero geometry,
so nothing overflows and no closed More popover ever exists. Re-adding the
forced render would leave that test green. Could the test start without the
chip, force overflow geometry, then add the cross-filter while More is closed
and assert the controls are reachable?
--
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]