X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/4b7d15c94685ca3e34ebb905a4803f895367ad09..f9d1c360e059ed07909abd7bc83a61fcd3e2746d:/src/common/webdav.test.ts diff --git a/src/common/webdav.test.ts b/src/common/webdav.test.ts index 7da15858..2ab106fc 100644 --- a/src/common/webdav.test.ts +++ b/src/common/webdav.test.ts @@ -2,12 +2,26 @@ // // SPDX-License-Identifier: AGPL-3.0 +import { customEncodeURI } from "./url"; import { WebDAV } from "./webdav"; describe('WebDAV', () => { it('makes use of provided config', async () => { const { open, load, setRequestHeader, createRequest } = mockCreateRequest(); - const webdav = WebDAV.create({ baseUrl: 'http://foo.com/', headers: { Authorization: 'Basic' } }, createRequest); + const webdav = new WebDAV({ baseURL: 'http://foo.com/', headers: { Authorization: 'Basic' } }, createRequest); + const promise = webdav.propfind('foo'); + load(); + const request = await promise; + expect(open).toHaveBeenCalledWith('PROPFIND', 'http://foo.com/foo'); + expect(setRequestHeader).toHaveBeenCalledWith('Authorization', 'Basic'); + expect(request).toBeInstanceOf(XMLHttpRequest); + }); + + it('allows to modify defaults after instantiation', async () => { + const { open, load, setRequestHeader, createRequest } = mockCreateRequest(); + const webdav = new WebDAV(undefined, createRequest); + webdav.defaults.baseURL = 'http://foo.com/'; + webdav.defaults.headers = { Authorization: 'Basic' }; const promise = webdav.propfind('foo'); load(); const request = await promise; @@ -18,7 +32,7 @@ describe('WebDAV', () => { it('PROPFIND', async () => { const { open, load, createRequest } = mockCreateRequest(); - const webdav = WebDAV.create(undefined, createRequest); + const webdav = new WebDAV(undefined, createRequest); const promise = webdav.propfind('foo'); load(); const request = await promise; @@ -27,9 +41,10 @@ describe('WebDAV', () => { }); it('PUT', async () => { - const { open, send, load, createRequest } = mockCreateRequest(); - const webdav = WebDAV.create(undefined, createRequest); - const promise = webdav.put('foo', { data: 'Test data' }); + const { open, send, load, progress, createRequest } = mockCreateRequest(); + const webdav = new WebDAV(undefined, createRequest); + const promise = webdav.put('foo', 'Test data'); + progress(); load(); const request = await promise; expect(open).toHaveBeenCalledWith('PUT', 'foo'); @@ -39,29 +54,79 @@ describe('WebDAV', () => { it('COPY', async () => { const { open, setRequestHeader, load, createRequest } = mockCreateRequest(); - const webdav = WebDAV.create(undefined, createRequest); - const promise = webdav.copy('foo', { destination: 'foo-copy' }); + const webdav = new WebDAV(undefined, createRequest); + webdav.defaults.baseURL = 'http://base'; + const promise = webdav.copy('foo', 'foo-copy'); load(); const request = await promise; - expect(open).toHaveBeenCalledWith('COPY', 'foo'); - expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'foo-copy'); + expect(open).toHaveBeenCalledWith('COPY', 'http://base/foo'); + expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'http://base/foo-copy'); + expect(request).toBeInstanceOf(XMLHttpRequest); + }); + + it('COPY - adds baseURL with trailing slash to Destination header', async () => { + const { open, setRequestHeader, load, createRequest } = mockCreateRequest(); + const webdav = new WebDAV(undefined, createRequest); + webdav.defaults.baseURL = 'http://base'; + const promise = webdav.copy('foo', 'foo-copy'); + load(); + const request = await promise; + expect(open).toHaveBeenCalledWith('COPY', 'http://base/foo'); + expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'http://base/foo-copy'); + expect(request).toBeInstanceOf(XMLHttpRequest); + }); + + it('COPY - adds baseURL without trailing slash to Destination header', async () => { + const { open, setRequestHeader, load, createRequest } = mockCreateRequest(); + const webdav = new WebDAV(undefined, createRequest); + webdav.defaults.baseURL = 'http://base'; + const promise = webdav.copy('foo', 'foo-copy'); + load(); + const request = await promise; + expect(open).toHaveBeenCalledWith('COPY', 'http://base/foo'); + expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'http://base/foo-copy'); expect(request).toBeInstanceOf(XMLHttpRequest); }); it('MOVE', async () => { const { open, setRequestHeader, load, createRequest } = mockCreateRequest(); - const webdav = WebDAV.create(undefined, createRequest); - const promise = webdav.move('foo', { destination: 'foo-copy' }); + const webdav = new WebDAV(undefined, createRequest); + webdav.defaults.baseURL = 'http://base'; + const promise = webdav.move('foo', 'foo-moved'); + load(); + const request = await promise; + expect(open).toHaveBeenCalledWith('MOVE', 'http://base/foo'); + expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'http://base/foo-moved'); + expect(request).toBeInstanceOf(XMLHttpRequest); + }); + + it('MOVE - adds baseURL with trailing slash to Destination header', async () => { + const { open, setRequestHeader, load, createRequest } = mockCreateRequest(); + const webdav = new WebDAV(undefined, createRequest); + webdav.defaults.baseURL = 'http://base'; + const promise = webdav.move('foo', 'foo-moved'); + load(); + const request = await promise; + expect(open).toHaveBeenCalledWith('MOVE', 'http://base/foo'); + expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'http://base/foo-moved'); + expect(request).toBeInstanceOf(XMLHttpRequest); + }); + + it('MOVE - adds baseURL without trailing slash to Destination header', async () => { + const { open, setRequestHeader, load, createRequest } = mockCreateRequest(); + const webdav = new WebDAV(undefined, createRequest); + webdav.defaults.baseURL = 'http://base'; + const promise = webdav.move('foo', 'foo-moved'); load(); const request = await promise; - expect(open).toHaveBeenCalledWith('MOVE', 'foo'); - expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'foo-copy'); + expect(open).toHaveBeenCalledWith('MOVE', 'http://base/foo'); + expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'http://base/foo-moved'); expect(request).toBeInstanceOf(XMLHttpRequest); }); it('DELETE', async () => { const { open, load, createRequest } = mockCreateRequest(); - const webdav = WebDAV.create(undefined, createRequest); + const webdav = new WebDAV(undefined, createRequest); const promise = webdav.delete('foo'); load(); const request = await promise; @@ -79,10 +144,12 @@ const mockCreateRequest = () => { request.open = open; request.setRequestHeader = setRequestHeader; const load = () => request.dispatchEvent(new Event('load')); + const progress = () => request.dispatchEvent(new Event('progress')); return { send, open, load, + progress, setRequestHeader, createRequest: () => request };