From: Lucas Di Pentima Date: Thu, 15 Jul 2021 01:23:24 +0000 (-0300) Subject: 17573: Adds integration tests for storage classes display & editing. X-Git-Tag: 2.3.0~15^2~1 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/8df73e82d637d7b2e81952fdc96a12a1011be99e 17573: Adds integration tests for storage classes display & editing. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- diff --git a/cypress/integration/collection.spec.js b/cypress/integration/collection.spec.js index f3b63218..308ce5f7 100644 --- a/cypress/integration/collection.spec.js +++ b/cypress/integration/collection.spec.js @@ -431,6 +431,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)}`; diff --git a/src/common/config.ts b/src/common/config.ts index 8a85ae00..7a98fd47 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -141,7 +141,7 @@ export const getStorageClasses = (config: Config): string[] => { const classes: Set = new Set(); const volumes = config.clusterConfig.Volumes; Object.keys(volumes).forEach(v => { - Object.keys(volumes[v].StorageClasses).forEach(sc => { + Object.keys(volumes[v].StorageClasses || {}).forEach(sc => { if (volumes[v].StorageClasses[sc]) { classes.add(sc); } diff --git a/src/components/checkbox-field/checkbox-field.tsx b/src/components/checkbox-field/checkbox-field.tsx index bfa3714a..02a5e9a6 100644 --- a/src/components/checkbox-field/checkbox-field.tsx +++ b/src/components/checkbox-field/checkbox-field.tsx @@ -44,6 +44,7 @@ export const MultiCheckboxField = (props: WrappedFieldProps & MultiCheckboxField