import Collection from '../../src/lib/DAV/Collection'; import DAV from '../../src/lib/DAV.js'; describe('DAV', () => { const getSpies = (SpyHTTPReturns = {}, SpyCacheReturns = {}) => { const SpyHTTP = jasmine.createSpyObj('HTTP', ['GET', 'HEAD', 'PUT', 'PROPFIND', 'DELETE', 'MKCOL', 'COPY', 'MOVE']), SpyCache = jasmine.createSpyObj('Cache', ['delete', 'get', 'has', 'set']) ; [ [SpyHTTP, SpyHTTPReturns], [SpyCache, SpyCacheReturns] ].forEach( ([object, returnValues]) => Object.entries(returnValues).forEach( ([method, returnValue]) => object[method] = object[method].and.returnValue(returnValue) ) ); return [ SpyHTTP, SpyCache ]; }; it('should fire a HEAD request on check', () => { const [SpyHTTP, SpyCache] = getSpies(), dav = new DAV({}, SpyCache, SpyHTTP) ; dav.check('/checkHeadRequest'); expect(SpyHTTP.HEAD).toHaveBeenCalledWith('/checkHeadRequest'); }); it('should fire a COPY request on copy', () => { const [SpyHTTP, SpyCache] = getSpies(), dav = new DAV({}, SpyCache, SpyHTTP) ; dav.copy('/copySource', '/copyDestination'); expect(SpyHTTP.COPY).toHaveBeenCalledWith('/copySource', { headers: { Destination: `${location.protocol}//${location.hostname}${location.port ? `:${location.port}` : ''}/copyDestination` } }); }); it('should fire a DELETE request on del', () => { const [SpyHTTP, SpyCache] = getSpies(), dav = new DAV({}, SpyCache, SpyHTTP) ; dav.del('/checkDeleteRequest'); expect(SpyHTTP.DELETE).toHaveBeenCalledWith('/checkDeleteRequest'); }); it('should fire a GET request on get', () => { const [SpyHTTP, SpyCache] = getSpies(), dav = new DAV({}, SpyCache, SpyHTTP) ; dav.get('/checkGetRequest'); expect(SpyHTTP.GET).toHaveBeenCalledWith('/checkGetRequest'); }); it('should fire a PROPFIND request and store cache on list', async () => { const [SpyHTTP, SpyCache] = getSpies({ HEAD: { ok: true }, PROPFIND: { text: () => '/Directory%20name/2019-11-06T16:29:46ZWed, 06 Nov 2019 16:29:46 GMT"6-596b00e926ba3"httpd/unix-directoryHTTP/1.1 200 OK' } }, { get: false }), dav = new DAV({}, SpyCache, SpyHTTP), collection = await dav.list('/checkPropfindRequest') ; expect(SpyCache.get).toHaveBeenCalledWith('/checkPropfindRequest/'); expect(SpyHTTP.HEAD).toHaveBeenCalledWith('/checkPropfindRequest/'); expect(SpyHTTP.PROPFIND).toHaveBeenCalledWith('/checkPropfindRequest/'); expect(collection).toBeInstanceOf(Collection); expect(SpyCache.set).toHaveBeenCalledWith('/checkPropfindRequest/', collection); }); it('should fire an MKCOL request on mkcol', () => { const [SpyHTTP, SpyCache] = getSpies(), dav = new DAV({}, SpyCache, SpyHTTP) ; dav.mkcol('/checkMkcolRequest'); expect(SpyHTTP.MKCOL).toHaveBeenCalledWith('/checkMkcolRequest'); }); it('should fire a MOVE request on move', () => { const [SpyHTTP, SpyCache] = getSpies(), dav = new DAV({}, SpyCache, SpyHTTP) ; dav.move('/moveSource', '/moveDestination'); expect(SpyHTTP.MOVE).toHaveBeenCalledWith('/moveSource', { headers: { Destination: `${location.protocol}//${location.hostname}${location.port ? `:${location.port}` : ''}/moveDestination` } }); }); it('should fire a PUT request on upload', () => { const [SpyHTTP, SpyCache] = getSpies(), dav = new DAV({}, SpyCache, SpyHTTP), file = new File([''], 'uploadTest', { type: 'text/plain' }) ; dav.upload('/path/', file); expect(SpyHTTP.PUT).toHaveBeenCalledWith('/path/uploadTest', { headers: { 'Content-Type': file.type }, body: file }); }); it('should not fire a HEAD request on list when `bypassCheck` is set', async () => { const [SpyHTTP, SpyCache] = getSpies({ HEAD: { ok: true }, PROPFIND: { text: () => '/Directory%20name/2019-11-06T16:29:46ZWed, 06 Nov 2019 16:29:46 GMT"6-596b00e926ba3"httpd/unix-directoryHTTP/1.1 200 OK' } }, { get: false }), dav = new DAV({ bypassCheck: true }, SpyCache, SpyHTTP) ; await dav.list('/checkPropfindRequest'); expect(SpyHTTP.HEAD).not.toHaveBeenCalledWith('/checkPropfindRequest/'); }); });