@@ -122,8 +122,42 @@ describe('useIframeBehavior', () => {
122
122
expect ( setWindowTopOffset ) . toHaveBeenCalledWith ( window . scrollY ) ;
123
123
} ) ;
124
124
125
+ it ( 'handles xblockScroll message correctly' , ( ) => {
126
+ const iframeElement = document . createElement ( 'iframe' ) ;
127
+ iframeElement . setAttribute ( 'name' , 'xblock-iframe' ) ;
128
+ Object . defineProperty ( iframeElement , 'offsetTop' , { writable : true , configurable : true , value : 50 } ) ;
129
+
130
+ const iframeParentElement = document . createElement ( 'div' ) ;
131
+ iframeParentElement . setAttribute ( 'id' , 'div0' ) ;
132
+ Object . defineProperty ( iframeParentElement , 'offsetTop' , { writable : true , configurable : true , value : 25 } ) ;
133
+
134
+ iframeParentElement . appendChild ( iframeElement ) ;
135
+ document . body . appendChild ( iframeParentElement ) ;
136
+
137
+ renderHook ( ( ) => useIframeBehavior ( { id, iframeUrl, iframeRef } ) ) ;
138
+
139
+ const message = {
140
+ data : {
141
+ type : iframeMessageTypes . xblockScroll ,
142
+ offset : 100 ,
143
+ } ,
144
+ } ;
145
+
146
+ act ( ( ) => {
147
+ window . dispatchEvent ( new MessageEvent ( 'message' , message ) ) ;
148
+ } ) ;
149
+
150
+ expect ( window . scrollTo ) . toHaveBeenCalledWith ( { top : 175 , left : 0 , behavior : 'smooth' } ) ;
151
+ expect ( window . scrollY ) . toBe ( 100 + document . getElementsByName ( 'xblock-iframe' ) [ 0 ] . offsetTop + document . getElementsByName ( 'xblock-iframe' ) [ 0 ] ! . parentElement ! . offsetTop ) ;
152
+ } ) ;
153
+
125
154
it ( 'handles offset message correctly' , ( ) => {
126
- document . body . innerHTML = '<div id="unit-iframe" style="position: absolute; top: 50px;"></div>' ;
155
+ const iframeElement = document . createElement ( 'iframe' ) ;
156
+ iframeElement . setAttribute ( 'id' , 'unit-iframe' ) ;
157
+ Object . defineProperty ( iframeElement , 'offsetTop' , { writable : true , configurable : true , value : 50 } ) ;
158
+
159
+ document . body . appendChild ( iframeElement ) ;
160
+
127
161
renderHook ( ( ) => useIframeBehavior ( { id, iframeUrl, iframeRef } ) ) ;
128
162
129
163
const message = {
@@ -134,6 +168,7 @@ describe('useIframeBehavior', () => {
134
168
window . dispatchEvent ( new MessageEvent ( 'message' , message ) ) ;
135
169
} ) ;
136
170
171
+ expect ( window . scrollTo ) . toHaveBeenCalledWith ( 0 , 150 ) ;
137
172
expect ( window . scrollY ) . toBe ( 100 + ( document . getElementById ( 'unit-iframe' ) as HTMLElement ) . offsetTop ) ;
138
173
} ) ;
139
174
0 commit comments