+ 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('moves a collection to a different project', function () {
+ const collName = `Test Collection ${Math.floor(Math.random() * 999999)}`;
+ const projName = `Test Project ${Math.floor(Math.random() * 999999)}`;
+ const fileName = `Test_File_${Math.floor(Math.random() * 999999)}`;
+
+ cy.createCollection(adminUser.token, {
+ name: collName,
+ owner_uuid: activeUser.user.uuid,
+ manifest_text: `. 37b51d194a7513e45b56f6524f2d51f2+3 0:3:${fileName}\n`,
+ }).as('testCollection');
+ cy.createGroup(adminUser.token, {
+ name: projName,
+ group_class: 'project',
+ owner_uuid: activeUser.user.uuid,
+ }).as('testProject');
+
+ cy.getAll('@testCollection', '@testProject')
+ .then(function ([testCollection, testProject]) {
+ cy.loginAs(activeUser);
+ cy.goToPath(`/collections/${testCollection.uuid}`);
+ cy.get('[data-cy=collection-files-panel]').should('contain', fileName);
+ cy.get('[data-cy=collection-info-panel]')
+ .should('not.contain', projName)
+ .and('not.contain', testProject.uuid);
+ cy.get('[data-cy=collection-panel-options-btn]').click();
+ cy.get('[data-cy=context-menu]').contains('Move to').click();
+ cy.get('[data-cy=form-dialog]')
+ .should('contain', 'Move to')
+ .within(() => {
+ // must use .then to avoid selecting instead of expanding https://github.com/cypress-io/cypress/issues/5529
+ cy.get('[data-cy=projects-tree-home-tree-picker]')
+ .find('i')
+ .then(el => el.click());
+ cy.get('[data-cy=projects-tree-home-tree-picker]')
+ .contains(projName)
+ .click();
+ });
+ cy.get('[data-cy=form-submit-btn]').click();
+ cy.get('[data-cy=snackbar]')
+ .contains('Collection has been moved')
+ cy.get('[data-cy=collection-info-panel]')
+ .contains(projName).and('contain', testProject.uuid);
+ // Double check that the collection is in the project
+ cy.goToPath(`/projects/${testProject.uuid}`);
+ cy.waitForDom().get('[data-cy=project-panel]').should('contain', collName);
+ });
+ });
+
+ it('automatically updates the collection UI contents without using the Refresh button', function () {
+ const collName = `Test Collection ${Math.floor(Math.random() * 999999)}`;
+ const fileName = 'foobar'
+
+ cy.createCollection(adminUser.token, {
+ name: collName,
+ owner_uuid: activeUser.user.uuid,
+ }).as('testCollection');
+
+ cy.getAll('@testCollection').then(function ([testCollection]) {
+ cy.loginAs(activeUser);
+ cy.goToPath(`/collections/${testCollection.uuid}`);
+ cy.get('[data-cy=collection-files-panel]').should('contain', 'This collection is empty');
+ cy.get('[data-cy=collection-files-panel]').should('not.contain', fileName);
+ cy.get('[data-cy=collection-info-panel]').should('contain', collName);
+
+ cy.updateCollection(adminUser.token, testCollection.uuid, {
+ name: `${collName + ' updated'}`,
+ manifest_text: `. 37b51d194a7513e45b56f6524f2d51f2+3 0:3:${fileName}\n`,
+ }).as('updatedCollection');
+ cy.getAll('@updatedCollection').then(function ([updatedCollection]) {
+ expect(updatedCollection.name).to.equal(`${collName + ' updated'}`);
+ cy.get('[data-cy=collection-info-panel]').should('contain', updatedCollection.name);
+ cy.get('[data-cy=collection-files-panel]').should('contain', fileName);
+ });
+ });
+ })
+
+ it('makes a copy of an existing collection', function() {
+ const collName = `Test Collection ${Math.floor(Math.random() * 999999)}`;
+ const copyName = `Copy of: ${collName}`;
+
+ cy.createCollection(adminUser.token, {
+ name: collName,
+ owner_uuid: activeUser.user.uuid,
+ manifest_text: ". 37b51d194a7513e45b56f6524f2d51f2+3 0:3:some-file\n",
+ }).as('collection').then(function () {
+ cy.loginAs(activeUser)
+ cy.goToPath(`/collections/${this.collection.uuid}`);
+ cy.get('[data-cy=collection-files-panel]')
+ .should('contain', 'some-file');
+ cy.get('[data-cy=collection-panel-options-btn]').click();
+ cy.get('[data-cy=context-menu]').contains('Make a copy').click();
+ cy.get('[data-cy=form-dialog]')
+ .should('contain', 'Make a copy')
+ .within(() => {
+ cy.get('[data-cy=projects-tree-home-tree-picker]')
+ .contains('Projects')
+ .click();
+ cy.get('[data-cy=form-submit-btn]').click();
+ });
+ cy.get('[data-cy=snackbar]')
+ .contains('Collection has been copied.')
+ cy.get('[data-cy=snackbar-goto-action]').click();
+ cy.get('[data-cy=project-panel]')
+ .contains(copyName).click();
+ cy.get('[data-cy=collection-files-panel]')
+ .should('contain', 'some-file');
+ });
+ });
+