15159: Update cypress tests to check clusterConfig and inlineUrl for hiding open...
[arvados-workbench2.git] / cypress / integration / collection.spec.js
index f3b63218de0901d39472368429bd9c2df51e6072..2cb6281a300bb124d43d0119d2a3d52e246bd545 100644 (file)
@@ -43,7 +43,7 @@ describe('Collection panel tests', function () {
             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=context-menu]').contains('Open with 3rd party client').click();
             cy.get('[data-cy=download-button').click();
 
             const filename = path.join(downloadsFolder, `${testCollection.name}.duck`);
@@ -122,12 +122,22 @@ describe('Collection panel tests', function () {
             }).as('sharedGroup').then(function () {
                 // Creates the collection using the admin token so we can set up
                 // a bogus manifest text without block signatures.
-                cy.createCollection(adminUser.token, {
-                    name: 'Test collection',
-                    owner_uuid: this.sharedGroup.uuid,
-                    properties: { someKey: 'someValue' },
-                    manifest_text: `. 37b51d194a7513e45b56f6524f2d51f2+3 0:3:${fileName}\n./${subDirName} 37b51d194a7513e45b56f6524f2d51f2+3 0:3:${fileName}\n`
-                })
+                cy.doRequest('GET', '/arvados/v1/config', null, null)
+                    .its('body').should((clusterConfig) => {
+                      expect(clusterConfig.Collections, "clusterConfig").to.have.property("TrustAllContent", false);
+                      expect(clusterConfig.Services, "clusterConfig").to.have.property("WebDAV").have.property("ExternalURL");
+                      expect(clusterConfig.Services, "clusterConfig").to.have.property("WebDAVDownload").have.property("ExternalURL");
+                      const inlineUrl = clusterConfig.Services.WebDAV.ExternalURL !== ""
+                          ? clusterConfig.Services.WebDAV.ExternalURL
+                          : clusterConfig.Services.WebDAVDownload.ExternalURL;
+                      expect(inlineUrl).to.not.contain("*");
+                    })
+                    .createCollection(adminUser.token, {
+                      name: 'Test collection',
+                      owner_uuid: this.sharedGroup.uuid,
+                      properties: { someKey: 'someValue' },
+                      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.
                         cy.createLink(adminUser.token, {
@@ -189,7 +199,7 @@ describe('Collection panel tests', function () {
                             .contains(fileName).rightclick({ force: true });
                         cy.get('[data-cy=context-menu]')
                             .should('contain', 'Download')
-                            .and('contain', 'Open in new tab')
+                            .and('not.contain', 'Open in new tab')
                             .and('contain', 'Copy to clipboard')
                             .and(`${isWritable ? '' : 'not.'}contain`, 'Rename')
                             .and(`${isWritable ? '' : 'not.'}contain`, 'Remove');
@@ -198,7 +208,7 @@ describe('Collection panel tests', function () {
                             .contains(subDirName).rightclick({ force: true });
                         cy.get('[data-cy=context-menu]')
                             .should('not.contain', 'Download')
-                            .and('contain', 'Open in new tab')
+                            .and('not.contain', 'Open in new tab')
                             .and('contain', 'Copy to clipboard')
                             .and(`${isWritable ? '' : 'not.'}contain`, 'Rename')
                             .and(`${isWritable ? '' : 'not.'}contain`, 'Remove');
@@ -431,6 +441,71 @@ describe('Collection panel tests', function () {
             });
     });
 
+    it('views & edits storage classes data', function () {
+        const colName= `Test Collection ${Math.floor(Math.random() * 999999)}`;
+        cy.createCollection(adminUser.token, {
+            name: colName,
+            owner_uuid: activeUser.user.uuid,
+            manifest_text: ". 37b51d194a7513e45b56f6524f2d51f2+3 0:3:some-file\n",
+        }).as('collection').then(function () {
+            expect(this.collection.storage_classes_desired).to.deep.equal(['default'])
+
+            cy.loginAs(activeUser)
+            cy.goToPath(`/collections/${this.collection.uuid}`);
+
+            // Initial check: it should show the 'default' storage class
+            cy.get('[data-cy=collection-info-panel]')
+                .should('contain', 'Storage classes')
+                .and('contain', 'default')
+                .and('not.contain', 'foo')
+                .and('not.contain', 'bar');
+            // Edit collection: add storage class 'foo'
+            cy.get('[data-cy=collection-panel-options-btn]').click();
+            cy.get('[data-cy=context-menu]').contains('Edit collection').click();
+            cy.get('[data-cy=form-dialog]')
+                .should('contain', 'Edit Collection')
+                .and('contain', 'Storage classes')
+                .and('contain', 'default')
+                .and('contain', 'foo')
+                .and('contain', 'bar')
+                .within(() => {
+                    cy.get('[data-cy=checkbox-foo]').click();
+                });
+            cy.get('[data-cy=form-submit-btn]').click();
+            cy.get('[data-cy=collection-info-panel]')
+                .should('contain', 'default')
+                .and('contain', 'foo')
+                .and('not.contain', 'bar');
+            cy.doRequest('GET', `/arvados/v1/collections/${this.collection.uuid}`)
+                .its('body').as('updatedCollection')
+                .then(function () {
+                    expect(this.updatedCollection.storage_classes_desired).to.deep.equal(['default', 'foo']);
+                });
+            // Edit collection: remove storage class 'default'
+            cy.get('[data-cy=collection-panel-options-btn]').click();
+            cy.get('[data-cy=context-menu]').contains('Edit collection').click();
+            cy.get('[data-cy=form-dialog]')
+                .should('contain', 'Edit Collection')
+                .and('contain', 'Storage classes')
+                .and('contain', 'default')
+                .and('contain', 'foo')
+                .and('contain', 'bar')
+                .within(() => {
+                    cy.get('[data-cy=checkbox-default]').click();
+                });
+            cy.get('[data-cy=form-submit-btn]').click();
+            cy.get('[data-cy=collection-info-panel]')
+                .should('not.contain', 'default')
+                .and('contain', 'foo')
+                .and('not.contain', 'bar');
+            cy.doRequest('GET', `/arvados/v1/collections/${this.collection.uuid}`)
+                .its('body').as('updatedCollection')
+                .then(function () {
+                    expect(this.updatedCollection.storage_classes_desired).to.deep.equal(['foo']);
+                });
+        })
+    });
+
     it('uses the collection version browser to view a previous version', function () {
         const colName = `Test Collection ${Math.floor(Math.random() * 999999)}`;
 
@@ -469,10 +544,14 @@ describe('Collection panel tests', function () {
                     .within(() => {
                         // Version 1: 6 bytes in size
                         cy.get('[data-cy=collection-version-browser-select-1]')
-                            .should('contain', '1').and('contain', '6 B');
+                            .should('contain', '1')
+                            .and('contain', '6 B')
+                            .and('contain', adminUser.user.uuid);
                         // Version 2: 3 bytes in size (one file removed)
                         cy.get('[data-cy=collection-version-browser-select-2]')
-                            .should('contain', '2').and('contain', '3 B');
+                            .should('contain', '2')
+                            .and('contain', '3 B')
+                            .and('contain', activeUser.user.full_name);
                         cy.get('[data-cy=collection-version-browser-select-3]')
                             .should('not.exist');
                         cy.get('[data-cy=collection-version-browser-select-1]')
@@ -571,19 +650,28 @@ describe('Collection panel tests', function () {
         const collName = `[Test collection (${Math.floor(999999 * Math.random())})]`;
         cy.get('[data-cy=form-dialog]')
             .should('contain', 'New collection')
+            .and('contain', 'Storage classes')
+            .and('contain', 'default')
+            .and('contain', 'foo')
+            .and('contain', 'bar')
             .within(() => {
                 cy.get('[data-cy=parent-field]').within(() => {
                     cy.get('input').should('have.value', 'Home project');
-                })
+                });
                 cy.get('[data-cy=name-field]').within(() => {
                     cy.get('input').type(collName);
-                })
+                });
+                cy.get('[data-cy=checkbox-foo]').click();
             })
         cy.get('[data-cy=form-submit-btn]').click();
         // Confirm that the user was taken to the newly created thing
         cy.get('[data-cy=form-dialog]').should('not.exist');
         cy.get('[data-cy=breadcrumb-first]').should('contain', 'Projects');
         cy.get('[data-cy=breadcrumb-last]').should('contain', collName);
+        cy.get('[data-cy=collection-info-panel]')
+            .should('contain', 'default')
+            .and('contain', 'foo')
+            .and('not.contain', 'bar');
     });
 
     it('shows responsible person for collection if available', () => {