@@ -128,26 +128,36 @@ describe("handle numeric field key down", () => {
128128} ) ;
129129
130130describe ( "handle keydown in button contenteditable" , ( ) => {
131- let button : HTMLButtonElement | undefined ;
132- let spiedPreventDefault : MockInstance < ( e : [ ] ) => void > | undefined ;
133- let spiedInsertSpaceAtCursor :
134- | MockInstance < ( typeof insertSpaceAtCursor ) [ "insertSpaceAtCursor" ] >
135- | undefined ;
131+ let spiedSendFieldEvent : MockInstance < ( ) => void > | undefined ;
132+
133+ beforeEach ( ( ) => {
134+ spiedSendFieldEvent = vi
135+ . spyOn ( generateOverlay , "sendFieldEvent" )
136+ . mockImplementation ( ( ) => { } ) ;
137+ const visualBuilderContainer = document . createElement ( "div" ) ;
138+ visualBuilderContainer . classList . add ( "visual-builder__container" ) ;
139+ document . body . appendChild ( visualBuilderContainer ) ;
140+ } ) ;
141+
142+ afterEach ( ( ) => {
143+ vi . clearAllMocks ( ) ;
144+ } ) ;
136145
137146 test ( "should insert space in button content-editable" , ( ) => {
147+ let spiedPreventDefault : MockInstance < ( e : [ ] ) => void > | undefined ;
138148 vi . spyOn ( window , "getSelection" ) . mockReturnValue ( {
139- // @ts -ignore
149+ // @ts -expect-error mocking only required properties
140150 getRangeAt : ( n : number ) => ( {
141151 startOffset : 0 ,
142152 endOffset : 0 ,
143153 } ) ,
144154 } ) ;
145- spiedInsertSpaceAtCursor = vi . spyOn (
155+ const spiedInsertSpaceAtCursor = vi . spyOn (
146156 insertSpaceAtCursor ,
147157 "insertSpaceAtCursor"
148158 ) ;
149159
150- button = document . createElement ( "button" ) ;
160+ const button = document . createElement ( "button" ) ;
151161 button . innerHTML = "Test" ;
152162 button . setAttribute ( "contenteditable" , "true" ) ;
153163 button . setAttribute (
@@ -169,6 +179,47 @@ describe("handle keydown in button contenteditable", () => {
169179
170180 expect ( spiedPreventDefault ) . toHaveBeenCalledTimes ( 1 ) ;
171181 expect ( spiedInsertSpaceAtCursor ) . toHaveBeenCalledWith ( button ) ;
182+ expect ( spiedSendFieldEvent ) . toHaveBeenCalled ( ) ;
183+ } ) ;
184+
185+ test ( "should insert space in span content-editable inside button" , ( ) => {
186+ let spiedPreventDefault : MockInstance < ( e : [ ] ) => void > | undefined ;
187+ vi . spyOn ( window , "getSelection" ) . mockReturnValue ( {
188+ // @ts -expect-error mocking only required properties
189+ getRangeAt : ( n : number ) => ( {
190+ startOffset : 0 ,
191+ endOffset : 0 ,
192+ } ) ,
193+ } ) ;
194+ const spiedInsertSpaceAtCursor = vi . spyOn (
195+ insertSpaceAtCursor ,
196+ "insertSpaceAtCursor"
197+ ) ;
198+
199+ const button = document . createElement ( "button" ) ;
200+ const span = document . createElement ( "span" ) ;
201+ button . appendChild ( span ) ;
202+ span . setAttribute ( "contenteditable" , "true" ) ;
203+ span . setAttribute (
204+ VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY ,
205+ "single_line"
206+ ) ;
207+
208+ span . addEventListener ( "keydown" , ( e ) => {
209+ spiedPreventDefault = vi . spyOn ( e , "preventDefault" ) ;
210+ handleFieldKeyDown ( e ) ;
211+ } ) ;
212+
213+ const keyDownEvent = new KeyboardEvent ( "keydown" , {
214+ bubbles : true ,
215+ key : "Space" ,
216+ code : "Space" ,
217+ } ) ;
218+ span . dispatchEvent ( keyDownEvent ) ;
219+
220+ expect ( spiedPreventDefault ) . toHaveBeenCalledTimes ( 1 ) ;
221+ expect ( spiedInsertSpaceAtCursor ) . toHaveBeenCalledWith ( span ) ;
222+ expect ( spiedSendFieldEvent ) . toHaveBeenCalled ( ) ;
172223 } ) ;
173224} ) ;
174225
0 commit comments