11import { mount } from '@src/helpers/test'
2- import { useIdle } from '@src/vue-use-kit'
2+ import { useIdle , idleEventsList } from '@src/vue-use-kit'
33
44afterEach ( ( ) => {
55 jest . clearAllMocks ( )
@@ -20,7 +20,49 @@ const testComponent = () => ({
2020} )
2121
2222describe ( 'useIdle' , ( ) => {
23- it ( 'should do something' , ( ) => {
24- // Add test here
23+ // the total of the events is idleEventsList + visibilitychange
24+ const totEvents = idleEventsList . length + 1
25+
26+ it ( 'should call document.addEventListener' , async ( ) => {
27+ const addEventListenerSpy = jest . spyOn ( document , 'addEventListener' )
28+ const removeEventListenerSpy = jest . spyOn ( document , 'removeEventListener' )
29+ expect ( addEventListenerSpy ) . not . toHaveBeenCalled ( )
30+ const wrapper = mount ( testComponent ( ) )
31+ await wrapper . vm . $nextTick ( )
32+ expect ( addEventListenerSpy ) . toHaveBeenCalledTimes ( totEvents )
33+ expect ( addEventListenerSpy ) . toBeCalledWith (
34+ 'mousemove' ,
35+ expect . any ( Function )
36+ )
37+
38+ // Destroy instance to check if the remove event listener is being called
39+ wrapper . destroy ( )
40+ expect ( removeEventListenerSpy ) . toHaveBeenCalledTimes ( totEvents )
41+ expect ( removeEventListenerSpy ) . toBeCalledWith (
42+ 'mousemove' ,
43+ expect . any ( Function )
44+ )
45+ } )
46+
47+ it ( 'should call document.addEventListener again when start is called' , async ( ) => {
48+ const addEventListenerSpy = jest . spyOn ( document , 'addEventListener' )
49+ const wrapper = mount ( testComponent ( ) )
50+ expect ( addEventListenerSpy ) . toHaveBeenCalledTimes ( totEvents )
51+ wrapper . find ( '#stop' ) . trigger ( 'click' )
52+
53+ // Wait for Vue to append #start in the DOM
54+ await wrapper . vm . $nextTick ( )
55+ wrapper . find ( '#start' ) . trigger ( 'click' )
56+ expect ( addEventListenerSpy ) . toHaveBeenCalledTimes ( totEvents * 2 )
57+ } )
58+
59+ it ( 'should call document.removeEventListener when stop is called' , async ( ) => {
60+ const removeEventListenerSpy = jest . spyOn ( document , 'removeEventListener' )
61+ const wrapper = mount ( testComponent ( ) )
62+ wrapper . find ( '#stop' ) . trigger ( 'click' )
63+
64+ // Wait for Vue to append #start in the DOM
65+ await wrapper . vm . $nextTick ( )
66+ expect ( removeEventListenerSpy ) . toHaveBeenCalledTimes ( totEvents )
2567 } )
2668} )
0 commit comments