22 * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
33 * SPDX-License-Identifier: AGPL-3.0-or-later
44 */
5- import { describe , it , vi , expect , beforeEach , beforeAll , afterEach } from 'vitest'
65import { File , Permission , View } from '@nextcloud/files'
6+ import { describe , it , vi , expect , beforeEach , beforeAll , afterEach } from 'vitest'
7+ import { nextTick } from 'vue'
78import axios from '@nextcloud/axios'
89
910import { getPinia } from '../store/index.ts'
@@ -15,7 +16,6 @@ import { action as renameAction } from '../actions/renameAction.ts'
1516import { action as sidebarAction } from '../actions/sidebarAction.ts'
1617import { registerHotkeys } from './HotKeysService.ts'
1718import { useUserConfigStore } from '../store/userconfig.ts'
18- import { subscribe } from '@nextcloud/event-bus'
1919
2020let file : File
2121const view = {
@@ -61,7 +61,6 @@ describe('HotKeysService testing', () => {
6161 activeStore . setActiveNode ( file )
6262
6363 window . OCA = { Files : { Sidebar : { open : ( ) => { } , setActiveTab : ( ) => { } } } }
64- // @ts -expect-error We only mock what needed, we do not need Files.Router.goTo or Files.Navigation
6564 window . OCP = { Files : { Router : { goToRoute : goToRouteMock , params : { } , query : { } } } }
6665
6766 initialState = document . createElement ( 'input' )
@@ -114,6 +113,7 @@ describe('HotKeysService testing', () => {
114113 } )
115114
116115 it ( 'Pressing Delete should delete the file' , async ( ) => {
116+ // @ts -expect-error mocking private field
117117 vi . spyOn ( deleteAction . _action , 'exec' ) . mockResolvedValue ( ( ) => true )
118118
119119 window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' } ) )
@@ -142,34 +142,31 @@ describe('HotKeysService testing', () => {
142142 vi . spyOn ( axios , 'put' ) . mockImplementationOnce ( ( ) => Promise . resolve ( ) )
143143
144144 const userConfigStore = useUserConfigStore ( getPinia ( ) )
145- const currentGridConfig = userConfigStore . userConfig . grid_view
146-
147- // Wait for the user config to be updated
148- // or timeout after 500ms
149- const waitForUserConfig = ( ) => new Promise ( ( resolve ) => {
150- subscribe ( 'files:config:updated' , resolve )
151- setTimeout ( resolve , 500 )
152- } )
145+ userConfigStore . userConfig . grid_view = false
146+ expect ( userConfigStore . userConfig . grid_view ) . toBe ( false )
153147
154148 window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'v' , code : 'KeyV' } ) )
155- await waitForUserConfig ( )
156- expect ( userConfigStore . userConfig . grid_view ) . toBe ( ! currentGridConfig )
149+ await nextTick ( )
157150
158- // Modifier keys should not trigger the action
159- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' , ctrlKey : true } ) )
160- await waitForUserConfig ( )
161- expect ( userConfigStore . userConfig . grid_view ) . toBe ( ! currentGridConfig )
151+ expect ( userConfigStore . userConfig . grid_view ) . toBe ( true )
152+ } )
162153
163- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' , altKey : true } ) )
164- await waitForUserConfig ( )
165- expect ( userConfigStore . userConfig . grid_view ) . toBe ( ! currentGridConfig )
154+ it . each ( [
155+ [ 'ctrlKey' ] ,
156+ [ 'altKey' ] ,
157+ // those meta keys are still triggering...
158+ // ['shiftKey'],
159+ // ['metaKey']
160+ ] ) ( 'Pressing v with modifier key %s should not toggle grid view' , async ( modifier : string ) => {
161+ vi . spyOn ( axios , 'put' ) . mockImplementationOnce ( ( ) => Promise . resolve ( ) )
166162
167- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' , shiftKey : true } ) )
168- await waitForUserConfig ( )
169- expect ( userConfigStore . userConfig . grid_view ) . toBe ( ! currentGridConfig )
163+ const userConfigStore = useUserConfigStore ( getPinia ( ) )
164+ userConfigStore . userConfig . grid_view = false
165+ expect ( userConfigStore . userConfig . grid_view ) . toBe ( false )
170166
171- window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'Delete' , code : 'Delete' , metaKey : true } ) )
172- await waitForUserConfig ( )
173- expect ( userConfigStore . userConfig . grid_view ) . toBe ( ! currentGridConfig )
167+ window . dispatchEvent ( new KeyboardEvent ( 'keydown' , { key : 'v' , code : 'KeyV' , [ modifier ] : true } ) )
168+ await nextTick ( )
169+
170+ expect ( userConfigStore . userConfig . grid_view ) . toBe ( false )
174171 } )
175172} )
0 commit comments