You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/01/14 21:11:52 UTC
(superset) 16/16: test(mobile): Add tests for mobile support props
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 <ev...@rusackas.com>
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 <no...@anthropic.com>
---
.../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();
+});