[ARVADOS-WORKBENCH2] updated: 2.1.0-229-g5a7d3c08
Git user
git at public.arvados.org
Wed Mar 31 18:53:59 UTC 2021
Summary of changes:
cypress/integration/collection.spec.js | 76 ++++++++++++----------
src/common/url.test.ts | 27 +-------
src/common/url.ts | 4 --
src/common/webdav.ts | 6 --
.../collection-service-files-response.test.ts | 10 +--
.../collection-service-files-response.ts | 14 ++--
6 files changed, 56 insertions(+), 81 deletions(-)
via 5a7d3c08744413b659fd24be59992fc1daa486e5 (commit)
from 4e1fc4814be0e4cc3891fad0a0ec764b9212ccfd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 5a7d3c08744413b659fd24be59992fc1daa486e5
Author: Daniel Kutyła <daniel.kutyla at contractors.roche.com>
Date: Wed Mar 31 20:51:59 2021 +0200
17337: Added unit tests and directory names with non trivial names
Arvados-DCO-1.1-Signed-off-by: Daniel Kutyła <daniel.kutyla at contractors.roche.com>
diff --git a/cypress/integration/collection.spec.js b/cypress/integration/collection.spec.js
index 7764a8eb..841197ab 100644
--- a/cypress/integration/collection.spec.js
+++ b/cypress/integration/collection.spec.js
@@ -240,40 +240,48 @@ describe('Collection panel tests', function () {
cy.loginAs(activeUser);
cy.doSearch(`${this.testCollection.uuid}`);
- // Rename 'bar' to 'subdir/foo'
- cy.get('[data-cy=collection-files-panel]')
- .contains('bar').rightclick();
- cy.get('[data-cy=context-menu]')
- .contains('Rename')
- .click();
- cy.get('[data-cy=form-dialog]')
- .should('contain', 'Rename')
- .within(() => {
- cy.get('input').type(`{selectall}{backspace}subdir/foo`);
- });
- cy.get('[data-cy=form-submit-btn]').click();
- cy.get('[data-cy=collection-files-panel]')
- .should('not.contain', 'bar')
- .and('contain', 'subdir');
- // Look for the "arrow icon" and expand the "subdir" directory.
- cy.get('[data-cy=virtual-file-tree] > div > i').click();
- // Rename 'subdir/foo' to 'baz'
- cy.get('[data-cy=collection-files-panel]')
- .contains('foo').rightclick();
- cy.get('[data-cy=context-menu]')
- .contains('Rename')
- .click();
- cy.get('[data-cy=form-dialog]')
- .should('contain', 'Rename')
- .within(() => {
- cy.get('input')
- .should('have.value', 'subdir/foo')
- .type(`{selectall}{backspace}baz`);
- });
- cy.get('[data-cy=form-submit-btn]').click();
- cy.get('[data-cy=collection-files-panel]')
- .should('contain', 'subdir') // empty dir kept
- .and('contain', 'baz');
+ ['subdir', 'G%C3%BCnter\'s%20file', 'table%&?*2'].forEach((subdir) => {
+ cy.get('[data-cy=collection-files-panel]')
+ .contains('bar').rightclick({force: true});
+ cy.get('[data-cy=context-menu]')
+ .contains('Rename')
+ .click();
+ cy.get('[data-cy=form-dialog]')
+ .should('contain', 'Rename')
+ .within(() => {
+ cy.get('input').type(`{selectall}{backspace}${subdir}/foo`);
+ });
+ cy.get('[data-cy=form-submit-btn]').click();
+ cy.get('[data-cy=collection-files-panel]')
+ .should('not.contain', 'bar')
+ .and('contain', subdir);
+ // Look for the "arrow icon" and expand the "subdir" directory.
+ cy.get('[data-cy=virtual-file-tree] > div > i').click();
+ // Rename 'subdir/foo' to 'foo'
+ cy.get('[data-cy=collection-files-panel]')
+ .contains('foo').rightclick();
+ cy.get('[data-cy=context-menu]')
+ .contains('Rename')
+ .click();
+ cy.get('[data-cy=form-dialog]')
+ .should('contain', 'Rename')
+ .within(() => {
+ cy.get('input')
+ .should('have.value', `${subdir}/foo`)
+ .type(`{selectall}{backspace}bar`);
+ });
+ cy.get('[data-cy=form-submit-btn]').click();
+ cy.get('[data-cy=collection-files-panel]')
+ .should('contain', subdir) // empty dir kept
+ .and('contain', 'bar');
+
+ cy.get('[data-cy=collection-files-panel]')
+ .contains(subdir).rightclick();
+ cy.get('[data-cy=context-menu]')
+ .contains('Remove')
+ .click();
+ cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
+ });
});
});
diff --git a/src/common/url.test.ts b/src/common/url.test.ts
index b0f8ae25..21bc518c 100644
--- a/src/common/url.test.ts
+++ b/src/common/url.test.ts
@@ -2,34 +2,9 @@
//
// SPDX-License-Identifier: AGPL-3.0
-import { customDecodeURI, customEncodeURI, encodeHash } from './url';
+import { customDecodeURI, customEncodeURI } from './url';
describe('url', () => {
- describe('encodeHash', () => {
- it('should ignore path without hash', () => {
- // given
- const path = 'path/without/hash';
-
- // when
- const result = encodeHash(path);
-
- // then
- expect(result).toEqual(path);
- });
-
- it('should replace all hashes within the path', () => {
- // given
- const path = 'path/with/hash # and one more #';
- const expectedResult = 'path/with/hash %23 and one more %23';
-
- // when
- const result = encodeHash(path);
-
- // then
- expect(result).toEqual(expectedResult);
- });
- });
-
describe('customDecodeURI', () => {
it('should decode encoded URI', () => {
// given
diff --git a/src/common/url.ts b/src/common/url.ts
index 16dc6170..185737ca 100644
--- a/src/common/url.ts
+++ b/src/common/url.ts
@@ -33,7 +33,3 @@ export const customDecodeURI = (path: string) => {
return path;
};
-
-export const encodeHash = (path: string) => {
- return path.replace(/#/g, '%23');
-};
\ No newline at end of file
diff --git a/src/common/webdav.ts b/src/common/webdav.ts
index 0b77f8c3..758a5e18 100644
--- a/src/common/webdav.ts
+++ b/src/common/webdav.ts
@@ -79,12 +79,6 @@ export class WebDAV {
? this.defaults.baseURL+'/'
: ''}${customEncodeURI(config.url)}`);
- if (config.headers && config.headers.Destination) {
- const regexp = /(http[s]?:\/\/)?([^\/\s]+\/)(.*)/;
- const match = decodeURIComponent(config.headers.Destination).match(regexp) || {};
- config.headers.Destination = `${match[1]}${match[2]}${customEncodeURI(match[3])}`;
- }
-
const headers = { ...this.defaults.headers, ...config.headers };
Object
.keys(headers)
diff --git a/src/services/collection-service/collection-service-files-response.test.ts b/src/services/collection-service/collection-service-files-response.test.ts
index b2480c4b..074aa5ce 100644
--- a/src/services/collection-service/collection-service-files-response.test.ts
+++ b/src/services/collection-service/collection-service-files-response.test.ts
@@ -11,10 +11,10 @@ describe('collection-service-files-response', () => {
it('should correctly decode URLs & file names', () => {
const testCases = [
// input URL, input display name, expected URL, expected name
- ['table%201%202%203', 'table 1 2 3', 'table 1 2 3', 'table 1 2 3'],
- ['table%25&%3F%2A2', 'table%&?*2', 'table%&?*2', 'table%&?*2'],
- ["G%C3%BCnter%27s%20file.pdf", "Günter's file.pdf", "Günter's file.pdf", "Günter's file.pdf"],
- ['G%25C3%25BCnter%27s%2520file.pdf', 'G%C3%BCnter's%20file.pdf', "G%C3%BCnter's%20file.pdf", "G%C3%BCnter's%20file.pdf"]
+ ['table%201%202%203', 'table 1 2 3', 'table%201%202%203', 'table 1 2 3'],
+ ['table%25&%3F%2A2', 'table%&?*2', 'table%25&%3F%2A2', 'table%&?*2'],
+ ["G%C3%BCnter%27s%20file.pdf", "Günter's file.pdf", "G%C3%BCnter%27s%20file.pdf", "Günter's file.pdf"],
+ ['G%25C3%25BCnter%27s%2520file.pdf', 'G%C3%BCnter's%20file.pdf', "G%25C3%25BCnter%27s%2520file.pdf", "G%C3%BCnter's%20file.pdf"]
];
testCases.forEach(([inputURL, inputDisplayName, expectedURL, expectedName]) => {
@@ -79,7 +79,7 @@ describe('collection-service-files-response', () => {
const result = extractFilesData(xmlDoc);
// then
- expect(result).toEqual([{ id: `${collUUID}/${expectedURL}`, name: expectedName, path: "", size: 3, type: "file", url: `/c=${collUUID}/${expectedURL}` }]);
+ expect(result).toEqual([{ id: `${collUUID}/${expectedName}`, name: expectedName, path: "", size: 3, type: "file", url: `/c=${collUUID}/${expectedURL}` }]);
});
});
});
diff --git a/src/services/collection-service/collection-service-files-response.ts b/src/services/collection-service/collection-service-files-response.ts
index 1be99457..325339d0 100644
--- a/src/services/collection-service/collection-service-files-response.ts
+++ b/src/services/collection-service/collection-service-files-response.ts
@@ -27,13 +27,15 @@ export const extractFilesData = (document: Document) => {
.map(element => {
const name = getTagValue(element, 'D:displayname', '', true); // skip decoding as value should be already decoded
const size = parseInt(getTagValue(element, 'D:getcontentlength', '0', true), 10);
- const url = getTagValue(element, 'D:href', '');
- const nameSuffix = name;
+ const url = getTagValue(element, 'D:href', '', true);
const collectionUuidMatch = collectionUrlPrefix.exec(url);
const collectionUuid = collectionUuidMatch ? collectionUuidMatch.pop() : '';
- const directory = url
+ const pathArray = url.split(`/`);
+ if (!pathArray.pop()) {
+ pathArray.pop();
+ }
+ const directory = pathArray.join('/')
.replace(collectionUrlPrefix, '')
- .replace(nameSuffix, '')
.replace(/\/\//g, '/');
const parentPath = directory.replace(/\/$/, '');
@@ -41,11 +43,11 @@ export const extractFilesData = (document: Document) => {
url,
id: [
collectionUuid ? collectionUuid : '',
- directory ? parentPath : '',
+ directory ? unescape(parentPath) : '',
'/' + name
].join(''),
name,
- path: parentPath,
+ path: unescape(parentPath),
};
const result = getTagValue(element, 'D:resourcetype', '')
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list