Merge remote-tracking branch 'origin/main' into 18692-frozen-projects-workbench-support
authorDaniel Kutyła <daniel.kutyla@contractors.roche.com>
Fri, 23 Sep 2022 06:15:03 +0000 (08:15 +0200)
committerDaniel Kutyła <daniel.kutyla@contractors.roche.com>
Fri, 23 Sep 2022 06:15:03 +0000 (08:15 +0200)
Arvados-DCO-1.1-Signed-off-by: Daniel Kutyła <daniel.kutyla@contractors.roche.com>

1  2 
cypress/integration/project.spec.js

index 3851a665c9f8f536715446fa2680d0aca9eea63a,ea795e6c393a23fa1edb33783c65322d0e72985a..93e4257b5b55f137eb626f9669e784b2ba7a5172
@@@ -312,96 -312,29 +312,122 @@@ describe('Project tests', function() 
          });
      });
  
 +    describe('Frozen projects', () => {
 +        beforeEach(() => {  
 +            cy.createGroup(activeUser.token, {
 +                name: `Main project ${Math.floor(Math.random() * 999999)}`,
 +                group_class: 'project',
 +            }).as('mainProject');
 +    
 +            cy.createGroup(adminUser.token, {
 +                name: `Admin project ${Math.floor(Math.random() * 999999)}`,
 +                group_class: 'project',
 +            }).as('adminProject').then((mainProject) => {
 +                cy.shareWith(adminUser.token, activeUser.user.uuid, mainProject.uuid, 'can_write');
 +            });
 +
 +            cy.get('@mainProject').then((mainProject) => {
 +                cy.createGroup(adminUser.token, {
 +                    name : `Sub project ${Math.floor(Math.random() * 999999)}`,
 +                    group_class: 'project',
 +                    owner_uuid: mainProject.uuid,
 +                }).as('subProject');
 +
 +                cy.createCollection(adminUser.token, {
 +                    name: `Main collection ${Math.floor(Math.random() * 999999)}`,
 +                    owner_uuid: mainProject.uuid,
 +                    manifest_text: "./subdir 37b51d194a7513e45b56f6524f2d51f2+3 0:3:foo\n. 37b51d194a7513e45b56f6524f2d51f2+3 0:3:bar\n"
 +                }).as('mainCollection');        
 +            });
 +        });
 +
 +        it('should be able to froze own project', () => {
 +            cy.getAll('@mainProject').then(([mainProject]) => {
 +                cy.loginAs(activeUser);
 +
 +                cy.get('[data-cy=project-panel]').contains(mainProject.name).rightclick();
 +
 +                cy.get('[data-cy=context-menu]').contains('Freeze').click();
 +
 +                cy.get('[data-cy=project-panel]').contains(mainProject.name).rightclick();
 +
 +                cy.get('[data-cy=context-menu]').contains('Freeze').should('not.exist');
 +            });
 +        });
 +
 +        it('should not be able to modify items within the frozen project', () => {
 +            cy.getAll('@mainProject', '@mainCollection').then(([mainProject, mainCollection]) => {
 +                cy.loginAs(activeUser);
 +
 +                cy.get('[data-cy=project-panel]').contains(mainProject.name).rightclick();
 +
 +                cy.get('[data-cy=context-menu]').contains('Freeze').click();
 +
 +                cy.get('[data-cy=project-panel]').contains(mainProject.name).click();
 +
 +                cy.get('[data-cy=project-panel]').contains(mainCollection.name).rightclick();
 +
 +                cy.get('[data-cy=context-menu]').contains('Move to trash').should('not.exist');
 +            });
 +        });
 +
 +        it('should be able to froze not owned project', () => {
 +            cy.getAll('@adminProject').then(([adminProject]) => {
 +                cy.loginAs(activeUser);
 +
 +                cy.get('[data-cy=side-panel-tree]').contains('Shared with me').click();
 +
 +                cy.get('main').contains(adminProject.name).rightclick();
 +
 +                cy.get('[data-cy=context-menu]').contains('Freeze').should('not.exist');
 +            });
 +        });
 +
 +        it('should be able to unfroze project if user is an admin', () => {
 +            cy.getAll('@adminProject').then(([adminProject]) => {
 +                cy.loginAs(adminUser);
 +
 +                cy.get('main').contains(adminProject.name).rightclick();
 +
 +                cy.get('[data-cy=context-menu]').contains('Freeze').click();
 +
 +                cy.wait(1000);
 +
 +                cy.get('main').contains(adminProject.name).rightclick();
 +
 +                cy.get('[data-cy=context-menu]').contains('Unfreeze').click();
 +
 +                cy.get('main').contains(adminProject.name).rightclick();
 +                
 +                cy.get('[data-cy=context-menu]').contains('Freeze').should('exist');
 +            });
 +        });
 +    });
++
+     it('copies project URL to clipboard', () => {
+         const projectName = `Test project (${Math.floor(999999 * Math.random())})`;
+         cy.loginAs(activeUser);
+         cy.get('[data-cy=side-panel-button]').click();
+         cy.get('[data-cy=side-panel-new-project]').click();
+         cy.get('[data-cy=form-dialog]')
+             .should('contain', 'New Project')
+             .within(() => {
+                 cy.get('[data-cy=name-field]').within(() => {
+                     cy.get('input').type(projectName);
+                 });
+                 cy.get('[data-cy=form-submit-btn]').click();
+             });
+         cy.get('[data-cy=side-panel-tree]').contains('Projects').click();
+         cy.get('[data-cy=project-panel]').contains(projectName).rightclick();
+         cy.get('[data-cy=context-menu]').contains('Copy to clipboard').click();
+         cy.window().then((win) => (
+             win.navigator.clipboard.readText().then((text) => {
+                 expect(text).to.match(/https\:\/\/localhost\:[0-9]+\/projects\/[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{15}/,);
+             })
+         ));
+     });
  });
 +