@@ -21,6 +21,7 @@ import DatasetLayout from 'src/features/datasets/DatasetLayout';
2121import Header from 'src/features/datasets/AddDataset/Header' ;
2222import LeftPanel from 'src/features/datasets/AddDataset/LeftPanel' ;
2323import DatasetPanel from 'src/features/datasets/AddDataset/DatasetPanel' ;
24+ import DatasetPanelComponent from 'src/features/datasets/AddDataset/DatasetPanel/DatasetPanel' ;
2425import RightPanel from 'src/features/datasets/AddDataset/RightPanel' ;
2526import Footer from 'src/features/datasets/AddDataset/Footer' ;
2627
@@ -90,4 +91,72 @@ describe('DatasetLayout', () => {
9091
9192 expect ( screen . getByText ( / C a n c e l / 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 ( / C a n c e l / i) ;
160+ expect ( footer ) . toBeInTheDocument ( ) ;
161+ } ) ;
93162} ) ;
0 commit comments