[ARVADOS-WORKBENCH2] created: 1.4.1-433-g26ec4bc0

Git user git at public.arvados.org
Wed Sep 23 21:18:14 UTC 2020


        at  26ec4bc0f0d5ecaaedb468993400632e2d5a58c0 (commit)


commit 26ec4bc0f0d5ecaaedb468993400632e2d5a58c0
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Wed Sep 23 18:14:46 2020 -0300

    16592: Restores 'Rename' action. Adds support for baseURL w/o trailing slash.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/common/webdav.ts b/src/common/webdav.ts
index b2f43348..17032768 100644
--- a/src/common/webdav.ts
+++ b/src/common/webdav.ts
@@ -42,14 +42,24 @@ export class WebDAV {
         this.request({
             ...config, url,
             method: 'COPY',
-            headers: { ...config.headers, Destination: this.defaults.baseURL + destination }
+            headers: {
+                ...config.headers,
+                Destination: this.defaults.baseURL
+                    ? this.defaults.baseURL.replace(/\/+$/, '') + '/' + destination.replace(/^\/+/, '')
+                    : destination
+            }
         })
 
     move = (url: string, destination: string, config: WebDAVRequestConfig = {}) =>
         this.request({
             ...config, url,
             method: 'MOVE',
-            headers: { ...config.headers, Destination: this.defaults.baseURL + destination }
+            headers: {
+                ...config.headers,
+                Destination: this.defaults.baseURL
+                    ? this.defaults.baseURL.replace(/\/+$/, '') + '/' + destination.replace(/^\/+/, '')
+                    : destination
+            }
         })
 
     delete = (url: string, config: WebDAVRequestConfig = {}) =>
diff --git a/src/views-components/context-menu/action-sets/collection-files-item-action-set.ts b/src/views-components/context-menu/action-sets/collection-files-item-action-set.ts
index 2ded3736..b900d186 100644
--- a/src/views-components/context-menu/action-sets/collection-files-item-action-set.ts
+++ b/src/views-components/context-menu/action-sets/collection-files-item-action-set.ts
@@ -3,9 +3,9 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { ContextMenuActionSet } from "../context-menu-action-set";
-import { RemoveIcon } from "~/components/icon/icon";
+import { RemoveIcon, RenameIcon } from "~/components/icon/icon";
 import { DownloadCollectionFileAction } from "../actions/download-collection-file-action";
-import { openFileRemoveDialog } from '~/store/collection-panel/collection-panel-files/collection-panel-files-actions';
+import { openFileRemoveDialog, openRenameFileDialog } from '~/store/collection-panel/collection-panel-files/collection-panel-files-actions';
 import { CollectionFileViewerAction } from '~/views-components/context-menu/actions/collection-file-viewer-action';
 
 
@@ -21,14 +21,13 @@ export const readOnlyCollectionFilesItemActionSet: ContextMenuActionSet = [[
 ]];
 
 export const collectionFilesItemActionSet: ContextMenuActionSet = readOnlyCollectionFilesItemActionSet.concat([[
-    // FIXME: This isn't working. Maybe something related to WebDAV?
-    // {
-    //     name: "Rename",
-    //     icon: RenameIcon,
-    //     execute: (dispatch, resource) => {
-    //         dispatch<any>(openRenameFileDialog({ name: resource.name, id: resource.uuid }));
-    //     }
-    // },
+    {
+        name: "Rename",
+        icon: RenameIcon,
+        execute: (dispatch, resource) => {
+            dispatch<any>(openRenameFileDialog({ name: resource.name, id: resource.uuid }));
+        }
+    },
     {
         name: "Remove",
         icon: RemoveIcon,

commit 96efd683bb32cdff7e39a524941ca060aa023365
Author: Lucas Di Pentima <lucas at di-pentima.com.ar>
Date:   Wed Sep 23 18:14:24 2020 -0300

    16592: Adds tests exposing the bug.
    
    Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas at di-pentima.com.ar>

diff --git a/src/common/webdav.test.ts b/src/common/webdav.test.ts
index c85f30e7..b928f82a 100644
--- a/src/common/webdav.test.ts
+++ b/src/common/webdav.test.ts
@@ -62,7 +62,7 @@ describe('WebDAV', () => {
         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 = 'base/';
@@ -74,18 +74,30 @@ describe('WebDAV', () => {
         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 = '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(request).toBeInstanceOf(XMLHttpRequest);
+    });
+
     it('MOVE', async () => {
         const { open, setRequestHeader, load, createRequest } = mockCreateRequest();
         const webdav = new WebDAV(undefined, createRequest);
-        const promise = webdav.move('foo', 'foo-copy');
+        const promise = webdav.move('foo', 'foo-moved');
         load();
         const request = await promise;
         expect(open).toHaveBeenCalledWith('MOVE', 'foo');
-        expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'foo-copy');
+        expect(setRequestHeader).toHaveBeenCalledWith('Destination', 'foo-moved');
         expect(request).toBeInstanceOf(XMLHttpRequest);
     });
 
-    it('MOVE - adds baseURL to Destination header', async () => {
+    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 = 'base/';
@@ -97,6 +109,18 @@ describe('WebDAV', () => {
         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 = '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(request).toBeInstanceOf(XMLHttpRequest);
+    });
+
     it('DELETE', async () => {
         const { open, load, createRequest } = mockCreateRequest();
         const webdav = new WebDAV(undefined, createRequest);

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list