Merge remote-tracking branch 'origin/main' into 18169-cancel-button-not-working
[arvados-workbench2.git] / src / common / webdav.test.ts
index 455cef182d48fa94a647351083a28390edf72440..2ab106fcd3cb90a8710de2c0c5662cb8b53b78c5 100644 (file)
@@ -2,12 +2,13 @@
 //
 // 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;
@@ -18,8 +19,8 @@ describe('WebDAV', () => {
 
     it('allows to modify defaults after instantiation', async () => {
         const { open, load, setRequestHeader, createRequest } = mockCreateRequest();
-        const webdav = WebDAV.create(undefined, createRequest);
-        webdav.defaults.baseUrl = 'http://foo.com/';
+        const webdav = new WebDAV(undefined, createRequest);
+        webdav.defaults.baseURL = 'http://foo.com/';
         webdav.defaults.headers = { Authorization: 'Basic' };
         const promise = webdav.propfind('foo');
         load();
@@ -31,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;
@@ -41,67 +42,91 @@ describe('WebDAV', () => {
 
     it('PUT', async () => {
         const { open, send, load, progress, createRequest } = mockCreateRequest();
-        const onProgress = jest.fn();
-        const webdav = WebDAV.create(undefined, createRequest);
-        const promise = webdav.put('foo', { data: 'Test data', onProgress });
+        const webdav = new WebDAV(undefined, createRequest);
+        const promise = webdav.put('foo', 'Test data');
         progress();
         load();
         const request = await promise;
         expect(open).toHaveBeenCalledWith('PUT', 'foo');
         expect(send).toHaveBeenCalledWith('Test data');
-        expect(onProgress).toHaveBeenCalled();
         expect(request).toBeInstanceOf(XMLHttpRequest);
     });
 
     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 to Destination header', async () => {
+
+    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 = WebDAV.create(undefined, createRequest);
-        webdav.defaults.baseUrl = 'base/';
-        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', 'base/foo');
-        expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'base/foo-copy');
+        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', '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('MOVE - adds baseUrl to Destination header', async () => {
+    it('MOVE - adds baseURL without trailing slash to Destination header', async () => {
         const { open, setRequestHeader, load, createRequest } = mockCreateRequest();
-        const webdav = WebDAV.create(undefined, createRequest);
-        webdav.defaults.baseUrl = 'base/';
-        const promise = webdav.move('foo', { destination: 'foo-moved' });
+        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', 'base/foo');
-        expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'base/foo-moved');
+        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;