X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/409d38425d383c81606220782f1abe9cd014aab5..fcfb353fa27b5399e44f32944e0d53015b89a3b8:/cypress/integration/collection.spec.js diff --git a/cypress/integration/collection.spec.js b/cypress/integration/collection.spec.js index 05cd097dcb..151700768f 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)}`, @@ -69,6 +116,7 @@ describe('Collection panel tests', function () { // on this loop may pass an assertion from the first iteration by looking // for the same file name. const fileName = isWritable ? 'bar' : 'foo'; + const subDirName = 'subdir'; cy.createGroup(adminUser.token, { name: 'Shared project', group_class: 'project', @@ -79,7 +127,7 @@ describe('Collection panel tests', function () { name: 'Test collection', owner_uuid: this.sharedGroup.uuid, properties: { someKey: 'someValue' }, - manifest_text: `. 37b51d194a7513e45b56f6524f2d51f2+3 0:3:${fileName}\n` + manifest_text: `. 37b51d194a7513e45b56f6524f2d51f2+3 0:3:${fileName}\n./${subDirName} 37b51d194a7513e45b56f6524f2d51f2+3 0:3:${fileName}\n` }) .as('testCollection').then(function () { // Share the group with active user. @@ -137,6 +185,7 @@ describe('Collection panel tests', function () { .should(`${isWritable ? '' : 'not.'}contain`, 'Upload data'); } }); + // Test context menus cy.get('[data-cy=collection-files-panel]') .contains(fileName).rightclick({ force: true }); cy.get('[data-cy=context-menu]') @@ -146,6 +195,15 @@ describe('Collection panel tests', function () { .and(`${isWritable ? '' : 'not.'}contain`, 'Rename') .and(`${isWritable ? '' : 'not.'}contain`, 'Remove'); cy.get('body').click(); // Collapse the menu + cy.get('[data-cy=collection-files-panel]') + .contains(subDirName).rightclick({ force: true }); + cy.get('[data-cy=context-menu]') + .should('not.contain', 'Download') + .and('contain', 'Open in new tab') + .and('contain', 'Copy to clipboard') + .and(`${isWritable ? '' : 'not.'}contain`, 'Rename') + .and(`${isWritable ? '' : 'not.'}contain`, 'Remove'); + cy.get('body').click(); // Collapse the menu // Hamburger 'more options' menu button cy.get('[data-cy=collection-files-panel-options-btn]') .click() @@ -155,16 +213,8 @@ describe('Collection panel tests', function () { cy.get('[data-cy=collection-files-panel-options-btn]') .click() cy.get('[data-cy=context-menu]') - // .should('contain', 'Download selected') .should(`${isWritable ? '' : 'not.'}contain`, 'Remove selected') cy.get('body').click(); // Collapse the menu - // File item 'more options' button - cy.get('[data-cy=file-item-options-btn') - .click() - cy.get('[data-cy=context-menu]') - .should('contain', 'Download') - .and(`${isWritable ? '' : 'not.'}contain`, 'Remove'); - cy.get('body').click(); // Collapse the menu }) }) })