@@ -3,8 +3,8 @@ import { DataBrowserContext } from 'pane-registry'
33import { sym , graph , namedNode } from 'rdflib'
44import { JSDOM } from 'jsdom'
55import {
6- ACLControlBox5 ,
7- preventBrowserDropEvents ,
6+ ACLControlBox5 , handleDrop ,
7+ preventBrowserDropEvents , preventDrag , setGlobalWindow ,
88 shortNameForFolder
99} from '../../../src/acl/acl-control'
1010
@@ -14,9 +14,6 @@ const window = new JSDOM('<!DOCTYPE html><p>Hello world</p>').window
1414const dom = window . document
1515
1616describe ( 'ACLControlBox5' , ( ) => {
17- it ( 'exists' , ( ) => {
18- expect ( ACLControlBox5 ) . toBeInstanceOf ( Function )
19- } )
2017 it . skip ( 'runs' , ( ) => {
2118 expect ( ACLControlBox5 (
2219 sym ( 'https://test.test' ) ,
@@ -27,21 +24,59 @@ describe('ACLControlBox5', () => {
2724} )
2825
2926describe ( 'preventBrowserDropEvents' , ( ) => {
30- it ( 'exists' , ( ) => {
31- expect ( preventBrowserDropEvents ) . toBeInstanceOf ( Function )
27+ let event
28+
29+ beforeAll ( ( ) => {
30+ jest . spyOn ( dom , 'addEventListener' )
31+ preventBrowserDropEvents ( dom )
3232 } )
33- it ( 'runs' , ( ) => {
34- expect ( preventBrowserDropEvents ( dom ) ) . toEqual ( undefined )
33+ beforeEach ( ( ) => {
34+ event = {
35+ stopPropagation : jest . fn ( ) ,
36+ preventDefault : jest . fn ( )
37+ }
3538 } )
36- } )
39+ afterAll ( ( ) => jest . restoreAllMocks ( ) )
3740
38- describe ( 'shortNameForFolder' , ( ) => {
39- it ( 'exists' , ( ) => {
40- expect ( shortNameForFolder ) . toBeInstanceOf ( Function )
41+ it ( 'adds event handlers for drop' , ( ) => expect ( dom . addEventListener ) . toHaveBeenCalledWith ( 'drop' , handleDrop , false ) )
42+ it ( 'adds event handlers for dragenter' , ( ) => expect ( dom . addEventListener ) . toHaveBeenCalledWith ( 'dragenter' , preventDrag , false ) )
43+ it ( 'adds event handlers for drop, dragenter and dragover' , ( ) => expect ( dom . addEventListener ) . toHaveBeenCalledWith ( 'dragover' , preventDrag , false ) )
44+
45+ it ( 'prevents adding event listeners twice' , ( ) => {
46+ preventBrowserDropEvents ( dom )
47+ expect ( ( dom . addEventListener as jest . Mock ) . mock . calls . length ) . toBe ( 3 )
4148 } )
42- it ( 'runs' , ( ) => {
43- expect ( shortNameForFolder ( sym ( 'https://test.test/uri' ) ) ) . toEqual ( 'uri' )
49+
50+ describe ( 'preventDrag' , ( ) => {
51+ beforeEach ( ( ) => preventDrag ( event ) )
52+
53+ it ( 'calls event.stopPropagation' , ( ) => expect ( event . stopPropagation ) . toHaveBeenCalled ( ) )
54+ it ( 'calls event.preventDefault' , ( ) => expect ( event . preventDefault ) . toHaveBeenCalled ( ) )
4455 } )
56+
57+ describe ( 'handleDrop' , ( ) => {
58+ beforeEach ( ( ) => {
59+ setGlobalWindow ( window )
60+ event . dataTransfer = { files : [ { } ] }
61+ window . confirm = jest . fn ( ( ) => false )
62+ handleDrop ( event )
63+ } )
64+
65+ it ( 'calls window.confirm' , ( ) => expect ( window . confirm ) . toHaveBeenCalledWith ( 'Are you sure you want to drop this file here? (Cancel opens it in a new tab)' ) )
66+
67+ describe ( 'confirm return true' , ( ) => {
68+ beforeEach ( ( ) => {
69+ window . confirm = jest . fn ( ( ) => true )
70+ handleDrop ( event )
71+ } )
72+
73+ it ( 'calls event.stopPropagation' , ( ) => expect ( event . stopPropagation ) . toHaveBeenCalled ( ) )
74+ it ( 'calls event.preventDefault' , ( ) => expect ( event . preventDefault ) . toHaveBeenCalled ( ) )
75+ } )
76+ } )
77+ } )
78+
79+ describe ( 'shortNameForFolder' , ( ) => {
4580 it ( 'works with trailing slashes' , ( ) => {
4681 expect ( shortNameForFolder ( namedNode ( 'http://example.com/some/folder/' ) ) ) . toEqual ( 'folder' )
4782 } )
0 commit comments