X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/bde7ca868a0c201544476da6c049a98c1188dde9..55c5457ebca7455a0299ddc33b3d1622518767f0:/cypress/integration/collection.spec.js diff --git a/cypress/integration/collection.spec.js b/cypress/integration/collection.spec.js index 6bfe55814e..5bad87b3e7 100644 --- a/cypress/integration/collection.spec.js +++ b/cypress/integration/collection.spec.js @@ -2,9 +2,12 @@ // // SPDX-License-Identifier: AGPL-3.0 +const path = require('path'); + describe('Collection panel tests', function () { let activeUser; let adminUser; + let downloadsFolder; before(function () { // Only set up common users once. These aren't set up as aliases because @@ -21,6 +24,7 @@ describe('Collection panel tests', function () { activeUser = this.activeUser; } ); + downloadsFolder = Cypress.config('downloadsFolder'); }); beforeEach(function () { @@ -28,6 +32,49 @@ describe('Collection panel tests', function () { cy.clearLocalStorage(); }); + it('allows to download mountain duck config for a collection', () => { + cy.createCollection(adminUser.token, { + name: `Test collection ${Math.floor(Math.random() * 999999)}`, + owner_uuid: activeUser.user.uuid, + manifest_text: ". 37b51d194a7513e45b56f6524f2d51f2+3 0:3:bar\n" + }) + .as('testCollection').then(function (testCollection) { + cy.loginAs(activeUser); + cy.goToPath(`/collections/${testCollection.uuid}`); + + cy.get('[data-cy=collection-panel-options-btn]').click(); + cy.get('[data-cy=context-menu]').contains('Open as network folder or S3 bucket').click(); + cy.get('[data-cy=download-button').click(); + + const filename = path.join(downloadsFolder, `${testCollection.name}.duck`); + + cy.readFile(filename, { timeout: 15000 }) + .then((body) => { + const childrenCollection = Array.prototype.slice.call(Cypress.$(body).find('dict')[0].children); + const map = {}; + let i, j = 2; + + for (i=0; i < childrenCollection.length; i += j) { + map[childrenCollection[i].outerText] = childrenCollection[i + 1].outerText; + } + + cy.get('#simple-tabpanel-0').find('a') + .then((a) => { + const [host, port] = a.text().split('@')[1].split('/')[0].split(':'); + expect(map['Protocol']).to.equal('davs'); + expect(map['UUID']).to.equal(testCollection.uuid); + expect(map['Username']).to.equal(activeUser.user.username); + expect(map['Port']).to.equal(port); + expect(map['Hostname']).to.equal(host); + if (map['Path']) { + expect(map['Path']).to.equal(`/c=${testCollection.uuid}`); + } + }); + }) + .then(() => cy.task('clearDownload', { filename })); + }); + }); + it('uses the property editor with vocabulary terms', function () { cy.createCollection(adminUser.token, { name: `Test collection ${Math.floor(Math.random() * 999999)}`, @@ -36,7 +83,7 @@ describe('Collection panel tests', function () { }) .as('testCollection').then(function () { cy.loginAs(activeUser); - cy.doSearch(`${this.testCollection.uuid}`); + cy.goToPath(`/collections/${this.testCollection.uuid}`); // Key: Color (IDTAGCOLORS) - Value: Magenta (IDVALCOLORS3) cy.get('[data-cy=resource-properties-form]').within(() => { @@ -89,7 +136,7 @@ describe('Collection panel tests', function () { head_uuid: this.sharedGroup.uuid, tail_uuid: activeUser.user.uuid }) - cy.doSearch(`${this.testCollection.uuid}`); + cy.goToPath(`/collections/${this.testCollection.uuid}`); // Check that name & uuid are correct. cy.get('[data-cy=collection-info-panel]') @@ -170,7 +217,7 @@ describe('Collection panel tests', function () { }) }) - it.only('renames a file using valid names', function () { + it('renames a file using valid names', function () { function eachPair(lst, func){ for(var i=0; i < lst.length - 1; i++){ func(lst[i], lst[i + 1]) @@ -185,7 +232,7 @@ describe('Collection panel tests', function () { }) .as('testCollection').then(function () { cy.loginAs(activeUser); - cy.doSearch(`${this.testCollection.uuid}`); + cy.goToPath(`/collections/${this.testCollection.uuid}`); const names = [ 'bar', // initial name already set @@ -202,7 +249,12 @@ describe('Collection panel tests', function () { 'some_file.pdf?', '?some_file.pdf', 'some%file.pdf', - 'some%2Ffile.pdf' + 'some%2Ffile.pdf', + 'some%22file.pdf', + 'some%20file.pdf', + "G%C3%BCnter's%20file.pdf", + 'table%&?*2', + 'bar' // make sure we can go back to the original name as a last step ]; eachPair(names, (from, to) => { cy.get('[data-cy=collection-files-panel]') @@ -233,42 +285,50 @@ describe('Collection panel tests', function () { }) .as('testCollection').then(function () { cy.loginAs(activeUser); - cy.doSearch(`${this.testCollection.uuid}`); + cy.goToPath(`/collections/${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(); + }); }); }); @@ -282,7 +342,7 @@ describe('Collection panel tests', function () { }) .as('testCollection').then(function () { cy.loginAs(activeUser); - cy.doSearch(`${this.testCollection.uuid}`); + cy.goToPath(`/collections/${this.testCollection.uuid}`); const illegalNamesFromUI = [ ['.', "Name cannot be '.' or '..'"], @@ -358,7 +418,7 @@ describe('Collection panel tests', function () { }); // Check the old version displays as what it is. cy.loginAs(activeUser) - cy.doSearch(`${oldVersionUuid}`); + cy.goToPath(`/collections/${oldVersionUuid}`); cy.get('[data-cy=collection-info-panel]').should('contain', 'This is an old version'); cy.get('[data-cy=read-only-icon]').should('exist'); @@ -381,7 +441,7 @@ describe('Collection panel tests', function () { .as('collection').then(function () { // Visit collection, check basic information cy.loginAs(activeUser) - cy.doSearch(`${this.collection.uuid}`); + cy.goToPath(`/collections/${this.collection.uuid}`); cy.get('[data-cy=collection-info-panel]').should('not.contain', 'This is an old version'); cy.get('[data-cy=read-only-icon]').should('not.exist'); @@ -497,7 +557,7 @@ describe('Collection panel tests', function () { it('creates new collection on home project', function () { cy.loginAs(activeUser); - cy.doSearch(`${activeUser.user.uuid}`); + cy.goToPath(`/projects/${activeUser.user.uuid}`); cy.get('[data-cy=breadcrumb-first]').should('contain', 'Projects'); cy.get('[data-cy=breadcrumb-last]').should('not.exist'); // Create new collection