[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