Skip to content

Commit c43a04d

Browse files
committed
test(DatasetLayout): add RTL test to check layout maintains viewport constraints with large content
1 parent ce17d33 commit c43a04d

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

superset-frontend/src/features/datasets/DatasetLayout/DatasetLayout.test.tsx

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import DatasetLayout from 'src/features/datasets/DatasetLayout';
2121
import Header from 'src/features/datasets/AddDataset/Header';
2222
import LeftPanel from 'src/features/datasets/AddDataset/LeftPanel';
2323
import DatasetPanel from 'src/features/datasets/AddDataset/DatasetPanel';
24+
import DatasetPanelComponent from 'src/features/datasets/AddDataset/DatasetPanel/DatasetPanel';
2425
import RightPanel from 'src/features/datasets/AddDataset/RightPanel';
2526
import Footer from 'src/features/datasets/AddDataset/Footer';
2627

@@ -90,4 +91,72 @@ describe('DatasetLayout', () => {
9091

9192
expect(screen.getByText(/Cancel/i)).toBeVisible();
9293
});
94+
95+
test('layout has proper flex constraints to prevent viewport overflow', () => {
96+
const { container } = render(
97+
<DatasetLayout
98+
leftPanel={<LeftPanel setDataset={() => null} />}
99+
datasetPanel={<DatasetPanel />}
100+
footer={<Footer url="" />}
101+
/>,
102+
{
103+
useRedux: true,
104+
useRouter: true,
105+
},
106+
);
107+
108+
// Find the wrapper
109+
const layoutWrapper = container.querySelector(
110+
'[data-test="dataset-layout-wrapper"]',
111+
);
112+
expect(layoutWrapper).toBeInTheDocument();
113+
114+
const outerRow = layoutWrapper?.firstElementChild as HTMLElement;
115+
expect(outerRow).toBeInTheDocument();
116+
117+
if (outerRow) {
118+
const styles = window.getComputedStyle(outerRow);
119+
// Verify the critical flex properties that prevent viewport overflow
120+
expect(styles.flexGrow).toBe('1');
121+
expect(styles.minHeight).toBe('0');
122+
expect(styles.display).toBe('flex');
123+
expect(styles.flexDirection).toBe('row');
124+
}
125+
});
126+
127+
test('layout maintains viewport constraints with large content', () => {
128+
const manyColumns = Array.from({ length: 100 }, (_, i) => ({
129+
name: `column_${i}`,
130+
type: 'VARCHAR',
131+
}));
132+
133+
const { container } = render(
134+
<DatasetLayout
135+
header={<Header setDataset={() => null} />}
136+
leftPanel={<LeftPanel setDataset={() => null} />}
137+
datasetPanel={
138+
<DatasetPanelComponent
139+
tableName="large_table"
140+
columnList={manyColumns}
141+
hasError={false}
142+
loading={false}
143+
/>
144+
}
145+
footer={<Footer url="" />}
146+
/>,
147+
{
148+
useRedux: true,
149+
useRouter: true,
150+
},
151+
);
152+
153+
const layoutWrapper = container.querySelector(
154+
'[data-test="dataset-layout-wrapper"]',
155+
);
156+
expect(layoutWrapper).toBeInTheDocument();
157+
158+
// Verify footer is always present in DOM (should be visible)
159+
const footer = screen.getByText(/Cancel/i);
160+
expect(footer).toBeInTheDocument();
161+
});
93162
});

0 commit comments

Comments
 (0)