@@ -54,10 +54,6 @@ type PdfElementsMock = {
5454 selectedDocIndex : number
5555 autoFitZoom : boolean
5656 isAddingMode ?: boolean
57- handleMouseMove ?: ReturnType < typeof vi . fn >
58- finishAdding ?: ReturnType < typeof vi . fn >
59- previewElement ?: Record < string , unknown > | null
60- previewVisible ?: boolean
6157}
6258
6359type PdfEditorVm = {
@@ -362,114 +358,21 @@ describe('PdfEditor Component - Business Rules', () => {
362358 } )
363359 } )
364360
365- describe ( 'RULE: touchend handling for mobile placement' , ( ) => {
366- it ( 'ignores touchend when no signer placement is pending' , ( ) => {
367- const handleMouseMove = vi . fn ( )
368- Object . assign ( getPdfElements ( ) , {
369- handleMouseMove,
370- isAddingMode : true ,
371- previewElement : { id : 'preview-1' } ,
372- previewVisible : false ,
373- } )
374- const event = new Event ( 'touchend' )
375- Object . defineProperty ( event , 'changedTouches' , {
376- value : [ { clientX : 10 , clientY : 20 } ] ,
377- configurable : true ,
378- } )
379-
380- document . dispatchEvent ( event )
381-
382- expect ( handleMouseMove ) . not . toHaveBeenCalled ( )
383- expect ( wrapper . emitted ( 'pdf-editor:signer-added' ) ) . toBeFalsy ( )
384- } )
385-
386- it ( 'schedules signer check when touchend has no touch point' , async ( ) => {
387- vi . useFakeTimers ( )
388- Object . assign ( getPdfElements ( ) , {
389- isAddingMode : false ,
390- pdfDocuments : [ { allObjects : [ [ ] ] } ] ,
391- } )
392- wrapper . vm . startAddingSigner ( { email : 'test@example.com' } , { width : 120 , height : 60 } )
393- vi . clearAllTimers ( )
394-
395- document . dispatchEvent ( new Event ( 'touchend' ) )
396- await vi . runOnlyPendingTimersAsync ( )
397-
398- expect ( wrapper . emitted ( 'pdf-editor:signer-added' ) ) . toHaveLength ( 1 )
399- vi . useRealTimers ( )
400- } )
401-
402- it ( 'schedules signer check when pdf-elements instance is unavailable' , async ( ) => {
403- vi . useFakeTimers ( )
404- Object . assign ( getPdfElements ( ) , {
405- isAddingMode : false ,
406- pdfDocuments : [ { allObjects : [ [ ] ] } ] ,
407- } )
408- wrapper . vm . startAddingSigner ( { email : 'test@example.com' } , { width : 120 , height : 60 } )
409- vi . clearAllTimers ( )
410- wrapper . vm . pdfElements = null
411-
412- const event = new Event ( 'touchend' )
413- Object . defineProperty ( event , 'changedTouches' , {
414- value : [ { clientX : 10 , clientY : 20 } ] ,
415- configurable : true ,
416- } )
417- document . dispatchEvent ( event )
418- await vi . runOnlyPendingTimersAsync ( )
419-
420- expect ( wrapper . emitted ( 'pdf-editor:signer-added' ) ) . toHaveLength ( 1 )
421- vi . useRealTimers ( )
422- } )
423-
424- it ( 'uses preview fallback on touchend and finalizes adding flow' , async ( ) => {
425- vi . useFakeTimers ( )
426- const runtime = Object . assign ( getPdfElements ( ) , {
427- isAddingMode : true ,
428- previewElement : { id : 'preview-1' } ,
429- previewVisible : false ,
430- handleMouseMove : vi . fn ( ) ,
431- pdfDocuments : [ { allObjects : [ [ ] ] } ] ,
432- } )
433- runtime . finishAdding = vi . fn ( ( ) => {
434- runtime . isAddingMode = false
435- } )
436-
437- wrapper . vm . startAddingSigner ( { email : 'test@example.com' } , { width : 120 , height : 60 } )
438- vi . clearAllTimers ( )
439-
440- const event = new Event ( 'touchend' )
441- const preventDefaultSpy = vi . spyOn ( event , 'preventDefault' )
442- const stopImmediatePropagationSpy = vi . spyOn ( event , 'stopImmediatePropagation' )
443- Object . defineProperty ( event , 'changedTouches' , {
444- value : [ { clientX : 44 , clientY : 88 } ] ,
445- configurable : true ,
446- } )
447- document . dispatchEvent ( event )
448- await vi . runAllTimersAsync ( )
449-
450- expect ( preventDefaultSpy ) . toHaveBeenCalledTimes ( 1 )
451- expect ( stopImmediatePropagationSpy ) . toHaveBeenCalledTimes ( 1 )
452- expect ( runtime . handleMouseMove ) . toHaveBeenCalledWith ( {
453- type : 'touchmove' ,
454- touches : [ { clientX : 44 , clientY : 88 } ] ,
455- } )
456- expect ( runtime . finishAdding ) . toHaveBeenCalledTimes ( 1 )
457- expect ( wrapper . emitted ( 'pdf-editor:signer-added' ) ) . toHaveLength ( 1 )
458- vi . useRealTimers ( )
459- } )
460- } )
461-
462361 describe ( 'RULE: document listener lifecycle' , ( ) => {
463362 it ( 'registers and unregisters touchend listener on mount/unmount' , ( ) => {
464363 wrapper . unmount ( )
465364 const addEventListenerSpy = vi . spyOn ( document , 'addEventListener' )
466365 const removeEventListenerSpy = vi . spyOn ( document , 'removeEventListener' )
467366 const localWrapper = createWrapper ( )
468- const touchendCall = addEventListenerSpy . mock . calls . find ( ( [ eventName ] ) => eventName === 'touchend' )
367+ const registeredEvents = addEventListenerSpy . mock . calls
368+ . filter ( ( [ eventName ] ) => [ 'mouseup' , 'touchend' , 'keyup' ] . includes ( String ( eventName ) ) )
369+ . map ( ( [ eventName ] ) => String ( eventName ) )
469370
470- expect ( touchendCall ) . toBeTruthy ( )
371+ expect ( registeredEvents ) . toEqual ( [ 'mouseup' , 'touchend' , 'keyup' ] )
471372 localWrapper . unmount ( )
472- expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'touchend' , touchendCall ?. [ 1 ] as EventListener )
373+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'mouseup' , expect . any ( Function ) )
374+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'touchend' , expect . any ( Function ) )
375+ expect ( removeEventListenerSpy ) . toHaveBeenCalledWith ( 'keyup' , expect . any ( Function ) )
473376 } )
474377 } )
475378
0 commit comments