@@ -61,6 +61,7 @@ describe('HotKeysService testing', () => {
6161 activeStore . setActiveNode ( file )
6262
6363 window . OCA = { Files : { Sidebar : { open : ( ) => { } , setActiveTab : ( ) => { } } } }
64+ // We only mock what needed, we do not need Files.Router.goTo or Files.Navigation
6465 window . OCP = { Files : { Router : { goToRoute : goToRouteMock , params : { } , query : { } } } }
6566
6667 initialState = document . createElement ( 'input' )
@@ -73,56 +74,56 @@ describe('HotKeysService testing', () => {
7374 } )
7475
7576 it ( 'Pressing d should open the sidebar once' , ( ) => {
76- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'd' , code : 'KeyD' } ) )
77+ dispatchEvent ( { key : 'd' , code : 'KeyD' } )
7778
7879 // Modifier keys should not trigger the action
79- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'd' , code : 'KeyD' , ctrlKey : true } ) )
80- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'd' , code : 'KeyD' , altKey : true } ) )
81- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'd' , code : 'KeyD' , shiftKey : true } ) )
82- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'd' , code : 'KeyD' , metaKey : true } ) )
80+ dispatchEvent ( { key : 'd' , code : 'KeyD' , ctrlKey : true } )
81+ dispatchEvent ( { key : 'd' , code : 'KeyD' , altKey : true } )
82+ dispatchEvent ( { key : 'd' , code : 'KeyD' , shiftKey : true } )
83+ dispatchEvent ( { key : 'd' , code : 'KeyD' , metaKey : true } )
8384
8485 expect ( sidebarAction . enabled ) . toHaveReturnedWith ( true )
8586 expect ( sidebarAction . exec ) . toHaveBeenCalledOnce ( )
8687 } )
8788
8889 it ( 'Pressing F2 should rename the file' , ( ) => {
89- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'F2' , code : 'F2' } ) )
90+ dispatchEvent ( { key : 'F2' , code : 'F2' } )
9091
9192 // Modifier keys should not trigger the action
92- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'F2' , code : 'F2' , ctrlKey : true } ) )
93- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'F2' , code : 'F2' , altKey : true } ) )
94- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'F2' , code : 'F2' , shiftKey : true } ) )
95- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'F2' , code : 'F2' , metaKey : true } ) )
93+ dispatchEvent ( { key : 'F2' , code : 'F2' , ctrlKey : true } )
94+ dispatchEvent ( { key : 'F2' , code : 'F2' , altKey : true } )
95+ dispatchEvent ( { key : 'F2' , code : 'F2' , shiftKey : true } )
96+ dispatchEvent ( { key : 'F2' , code : 'F2' , metaKey : true } )
9697
9798 expect ( renameAction . enabled ) . toHaveReturnedWith ( true )
9899 expect ( renameAction . exec ) . toHaveBeenCalledOnce ( )
99100 } )
100101
101102 it ( 'Pressing s should toggle favorite' , ( ) => {
102103 vi . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . resolve ( ) )
103- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 's' , code : 'KeyS' } ) )
104+ dispatchEvent ( { key : 's' , code : 'KeyS' } )
104105
105106 // Modifier keys should not trigger the action
106- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 's' , code : 'KeyS' , ctrlKey : true } ) )
107- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 's' , code : 'KeyS' , altKey : true } ) )
108- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 's' , code : 'KeyS' , shiftKey : true } ) )
109- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 's' , code : 'KeyS' , metaKey : true } ) )
107+ dispatchEvent ( { key : 's' , code : 'KeyS' , ctrlKey : true } )
108+ dispatchEvent ( { key : 's' , code : 'KeyS' , altKey : true } )
109+ dispatchEvent ( { key : 's' , code : 'KeyS' , shiftKey : true } )
110+ dispatchEvent ( { key : 's' , code : 'KeyS' , metaKey : true } )
110111
111112 expect ( favoriteAction . enabled ) . toHaveReturnedWith ( true )
112113 expect ( favoriteAction . exec ) . toHaveBeenCalledOnce ( )
113114 } )
114115
115116 it ( 'Pressing Delete should delete the file' , async ( ) => {
116- // @ts -expect-error mocking private field
117+ // @ts -expect-error unit testing
117118 vi . spyOn ( deleteAction . _action , 'exec' ) . mockResolvedValue ( ( ) => true )
118119
119- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' } ) )
120+ dispatchEvent ( { key : 'Delete' , code : 'Delete' } )
120121
121122 // Modifier keys should not trigger the action
122- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' , ctrlKey : true } ) )
123- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' , altKey : true } ) )
124- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' , shiftKey : true } ) )
125- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' , metaKey : true } ) )
123+ dispatchEvent ( { key : 'Delete' , code : 'Delete' , ctrlKey : true } )
124+ dispatchEvent ( { key : 'Delete' , code : 'Delete' , altKey : true } )
125+ dispatchEvent ( { key : 'Delete' , code : 'Delete' , shiftKey : true } )
126+ dispatchEvent ( { key : 'Delete' , code : 'Delete' , metaKey : true } )
126127
127128 expect ( deleteAction . enabled ) . toHaveReturnedWith ( true )
128129 expect ( deleteAction . exec ) . toHaveBeenCalledOnce ( )
@@ -132,7 +133,7 @@ describe('HotKeysService testing', () => {
132133 expect ( goToRouteMock ) . toHaveBeenCalledTimes ( 0 )
133134 window . OCP . Files . Router . query = { dir : '/foo/bar' }
134135
135- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'ArrowUp' , code : 'ArrowUp' , altKey : true } ) )
136+ dispatchEvent ( { key : 'ArrowUp' , code : 'ArrowUp' , altKey : true } )
136137
137138 expect ( goToRouteMock ) . toHaveBeenCalledOnce ( )
138139 expect ( goToRouteMock . mock . calls [ 0 ] [ 2 ] . dir ) . toBe ( '/foo' )
@@ -145,9 +146,7 @@ describe('HotKeysService testing', () => {
145146 userConfigStore . userConfig . grid_view = false
146147 expect ( userConfigStore . userConfig . grid_view ) . toBe ( false )
147148
148- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'v' , code : 'KeyV' } ) )
149- await nextTick ( )
150-
149+ dispatchEvent ( { key : 'v' , code : 'KeyV' } )
151150 expect ( userConfigStore . userConfig . grid_view ) . toBe ( true )
152151 } )
153152
@@ -164,9 +163,19 @@ describe('HotKeysService testing', () => {
164163 userConfigStore . userConfig . grid_view = false
165164 expect ( userConfigStore . userConfig . grid_view ) . toBe ( false )
166165
167- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'v' , code : 'KeyV' , [ modifier ] : true } ) )
166+ dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'v' , code : 'KeyV' , [ modifier ] : true } ) )
167+
168168 await nextTick ( )
169169
170170 expect ( userConfigStore . userConfig . grid_view ) . toBe ( false )
171171 } )
172172} )
173+
174+ /**
175+ * Helper to dispatch the correct event.
176+ *
177+ * @param init - KeyboardEvent options
178+ */
179+ function dispatchEvent ( init : KeyboardEventInit ) {
180+ document . body . dispatchEvent ( new KeyboardEvent ( 'keydown' , { ...init , bubbles : true } ) )
181+ }
0 commit comments