This is an automated email from the ASF dual-hosted git repository. rusackas pushed a commit to branch mobile-dashboard-support in repository https://gitbox.apache.org/repos/asf/superset.git
commit ed26910cd733e0c2610b2a9a14a277ee303abe21 Author: Evan Rusackas <[email protected]> AuthorDate: Wed Jan 14 13:05:34 2026 -0800 test(mobile): Add tests for mobile support props - Add tests for forceViewMode prop in ListView - Add tests for mobile filter drawer props (mobileFiltersOpen, setMobileFiltersOpen) - Add tests for leftIcon/rightIcon props in SubMenu Co-Authored-By: Claude Opus 4.5 <[email protected]> --- .../src/components/ListView/ListView.test.tsx | 81 ++++++++++++++++++++++ .../src/features/home/SubMenu.test.tsx | 24 +++++++ 2 files changed, 105 insertions(+) diff --git a/superset-frontend/src/components/ListView/ListView.test.tsx b/superset-frontend/src/components/ListView/ListView.test.tsx index 9d55ec1ad8..44fdde6b4a 100644 --- a/superset-frontend/src/components/ListView/ListView.test.tsx +++ b/superset-frontend/src/components/ListView/ListView.test.tsx @@ -359,3 +359,84 @@ describe('ListView', () => { expect(mockedPropsComprehensive.fetchData).toHaveBeenCalled(); }); }); + +// Mobile support tests +test('respects forceViewMode prop and hides view toggle', () => { + // Omit cardSortSelectOptions to avoid CardSortSelect needing initialSort + const { cardSortSelectOptions, ...propsWithoutSort } = mockedPropsComprehensive; + render( + <QueryParamProvider location={makeMockLocation()}> + <ListView + {...propsWithoutSort} + renderCard={() => <div>Card</div>} + forceViewMode="card" + /> + </QueryParamProvider>, + { store: mockStore() }, + ); + + // View toggle should not be present when forceViewMode is set + expect(screen.queryByLabelText('card-view')).not.toBeInTheDocument(); + expect(screen.queryByLabelText('list-view')).not.toBeInTheDocument(); +}); + +test('shows card view when forceViewMode is card', () => { + // Omit cardSortSelectOptions to avoid CardSortSelect needing initialSort + const { cardSortSelectOptions, ...propsWithoutSort } = mockedPropsComprehensive; + render( + <QueryParamProvider location={makeMockLocation()}> + <ListView + {...propsWithoutSort} + renderCard={() => <div data-test="test-card">Card Content</div>} + forceViewMode="card" + /> + </QueryParamProvider>, + { store: mockStore() }, + ); + + // Should render cards, not table rows + expect(screen.getAllByTestId('test-card')).toHaveLength(2); +}); + +test('renders mobile filter drawer when mobileFiltersOpen is true', () => { + const setMobileFiltersOpen = jest.fn(); + // Omit cardSortSelectOptions to avoid CardSortSelect needing initialSort + const { cardSortSelectOptions, ...propsWithoutSort } = mockedPropsComprehensive; + render( + <QueryParamProvider location={makeMockLocation()}> + <ListView + {...propsWithoutSort} + mobileFiltersOpen + setMobileFiltersOpen={setMobileFiltersOpen} + mobileFiltersDrawerTitle="Search Dashboards" + /> + </QueryParamProvider>, + { store: mockStore() }, + ); + + // Drawer should be visible with custom title + expect(screen.getByText('Search Dashboards')).toBeInTheDocument(); +}); + +test('calls setMobileFiltersOpen(false) when drawer is closed', async () => { + const setMobileFiltersOpen = jest.fn(); + // Omit cardSortSelectOptions to avoid CardSortSelect needing initialSort + const { cardSortSelectOptions, ...propsWithoutSort } = mockedPropsComprehensive; + render( + <QueryParamProvider location={makeMockLocation()}> + <ListView + {...propsWithoutSort} + mobileFiltersOpen + setMobileFiltersOpen={setMobileFiltersOpen} + mobileFiltersDrawerTitle="Search" + /> + </QueryParamProvider>, + { store: mockStore() }, + ); + + // Click the close button on the drawer + const closeButton = screen.getByLabelText('Close'); + await userEvent.click(closeButton); + + expect(setMobileFiltersOpen).toHaveBeenCalledWith(false); +}); diff --git a/superset-frontend/src/features/home/SubMenu.test.tsx b/superset-frontend/src/features/home/SubMenu.test.tsx index 2dc716f64e..25ed69d67d 100644 --- a/superset-frontend/src/features/home/SubMenu.test.tsx +++ b/superset-frontend/src/features/home/SubMenu.test.tsx @@ -127,3 +127,27 @@ test('should render the buttons', async () => { userEvent.click(testButton); expect(mockFunc).toHaveBeenCalled(); }); + +// Mobile support tests +test('should render leftIcon when provided', async () => { + setup({ + leftIcon: <button data-test="left-icon-button">Search</button>, + }); + expect(await screen.findByTestId('left-icon-button')).toBeInTheDocument(); +}); + +test('should render rightIcon when provided', async () => { + setup({ + rightIcon: <button data-test="right-icon-button">Menu</button>, + }); + expect(await screen.findByTestId('right-icon-button')).toBeInTheDocument(); +}); + +test('should render both leftIcon and rightIcon together', async () => { + setup({ + leftIcon: <span data-test="mobile-left">Left</span>, + rightIcon: <span data-test="mobile-right">Right</span>, + }); + expect(await screen.findByTestId('mobile-left')).toBeInTheDocument(); + expect(await screen.findByTestId('mobile-right')).toBeInTheDocument(); +});
