Merge remote-tracking branch 'origin/main' into 19051-handle-quotes-in-search
authorDaniel Kutyła <daniel.kutyla@contractors.roche.com>
Fri, 16 Sep 2022 20:13:34 +0000 (22:13 +0200)
committerDaniel Kutyła <daniel.kutyla@contractors.roche.com>
Fri, 16 Sep 2022 20:14:09 +0000 (22:14 +0200)
Arvados-DCO-1.1-Signed-off-by: Daniel Kutyła <daniel.kutyla@contractors.roche.com>

1  2 
cypress/integration/search.spec.js

index 97a332fa61ac085a20ad0211ac0e70a4254dcb88,da33c7df02881dfc1d62c5bd9f03fa229e665362..c8e262f011097b43ad9b5902a7d75bacdfa26cf1
@@@ -105,39 -105,6 +105,39 @@@ describe('Search tests', function() 
          });
      });
  
 +    it('can search items using quotes', function() {
 +        const random = Math.floor(Math.random() * Math.floor(999999));
 +        const colName = `Collection ${random}`;
 +        const colName2 = `Collection test ${random}`;
 +
 +        // Creates the collection using the admin token so we can set up
 +        // a bogus manifest text without block signatures.
 +        cy.createCollection(adminUser.token, {
 +            name: colName,
 +            owner_uuid: activeUser.user.uuid,
 +            preserve_version: true,
 +            manifest_text: ". 37b51d194a7513e45b56f6524f2d51f2+3 0:3:bar\n"
 +        }).as('collection1');
 +
 +        cy.createCollection(adminUser.token, {
 +            name: colName2,
 +            owner_uuid: activeUser.user.uuid,
 +            preserve_version: true,
 +            manifest_text: ". 37b51d194a7513e45b56f6524f2d51f2+3 0:3:bar\n"
 +        }).as('collection2');
 +
 +        cy.getAll('@collection1', '@collection2')
 +            .then(function() {
 +                cy.loginAs(activeUser);
 +
 +                cy.doSearch(colName);
 +                cy.get('[data-cy=search-results] table tbody tr').should('have.length', 2);
 +
 +                cy.doSearch(`"${colName}"`);
 +                cy.get('[data-cy=search-results] table tbody tr').should('have.length', 1);
 +            });
 +    });
 +
      it('can display owner of the item', function() {
          const colName = `Collection ${Math.floor(Math.random() * Math.floor(999999))}`;
  
                  });
          });
      });
- });
+     it('shows search context menu', function() {
+         const colName = `Collection ${Math.floor(Math.random() * Math.floor(999999))}`;
+         const federatedColName = `Collection ${Math.floor(Math.random() * Math.floor(999999))}`;
+         const federatedColUuid = "xxxxx-4zz18-000000000000000";
+         // Intercept config to insert remote cluster
+         cy.intercept({method: 'GET', hostname: 'localhost', url: '**/arvados/v1/config?nocache=*'}, (req) => {
+             req.reply((res) => {
+                 res.body.RemoteClusters = {
+                     "*": res.body.RemoteClusters["*"],
+                     "xxxxx": {
+                         "ActivateUsers": true,
+                         "Host": "xxxxx.fakecluster.tld",
+                         "Insecure": false,
+                         "Proxy": true,
+                         "Scheme": ""
+                     }
+                 };
+             });
+         });
+         // Fake remote cluster config
+         cy.intercept(
+           {
+             method: "GET",
+             hostname: "xxxxx.fakecluster.tld",
+             url: "**/arvados/v1/config",
+           },
+           {
+             statusCode: 200,
+             body: {
+               API: {},
+               ClusterID: "xxxxx",
+               Collections: {},
+               Containers: {},
+               InstanceTypes: {},
+               Login: {},
+               Mail: { SupportEmailAddress: "arvados@example.com" },
+               RemoteClusters: {
+                 "*": {
+                   ActivateUsers: false,
+                   Host: "",
+                   Insecure: false,
+                   Proxy: false,
+                   Scheme: "https",
+                 },
+               },
+               Services: {
+                 Composer: { ExternalURL: "" },
+                 Controller: { ExternalURL: "https://xxxxx.fakecluster.tld:34763/" },
+                 DispatchCloud: { ExternalURL: "" },
+                 DispatchLSF: { ExternalURL: "" },
+                 DispatchSLURM: { ExternalURL: "" },
+                 GitHTTP: { ExternalURL: "https://xxxxx.fakecluster.tld:39105/" },
+                 GitSSH: { ExternalURL: "" },
+                 Health: { ExternalURL: "https://xxxxx.fakecluster.tld:42915/" },
+                 Keepbalance: { ExternalURL: "" },
+                 Keepproxy: { ExternalURL: "https://xxxxx.fakecluster.tld:46773/" },
+                 Keepstore: { ExternalURL: "" },
+                 RailsAPI: { ExternalURL: "" },
+                 WebDAV: { ExternalURL: "https://xxxxx.fakecluster.tld:36041/" },
+                 WebDAVDownload: { ExternalURL: "https://xxxxx.fakecluster.tld:42957/" },
+                 WebShell: { ExternalURL: "" },
+                 Websocket: { ExternalURL: "wss://xxxxx.fakecluster.tld:37121/websocket" },
+                 Workbench1: { ExternalURL: "https://wb1.xxxxx.fakecluster.tld/" },
+                 Workbench2: { ExternalURL: "https://wb2.xxxxx.fakecluster.tld/" },
+               },
+               StorageClasses: {
+                 default: { Default: true, Priority: 0 },
+               },
+               Users: {},
+               Volumes: {},
+               Workbench: {},
+             },
+           }
+         );
+         cy.createCollection(adminUser.token, {
+             name: colName,
+             owner_uuid: activeUser.user.uuid,
+             preserve_version: true,
+             manifest_text: ". 37b51d194a7513e45b56f6524f2d51f2+3 0:3:bar\n"
+         }).then(function(testCollection) {
+             cy.loginAs(activeUser);
+             // Intercept search results to add federated result
+             cy.intercept({method: 'GET', url: '**/arvados/v1/groups/contents?*'}, (req) => {
+                 req.reply((res) => {
+                     res.body.items = [
+                         res.body.items[0],
+                         {
+                             ...res.body.items[0],
+                             uuid: federatedColUuid,
+                             portable_data_hash: "00000000000000000000000000000000+0",
+                             name: federatedColName,
+                             href: res.body.items[0].href.replace(testCollection.uuid, federatedColUuid),
+                         }
+                     ];
+                     res.body.items_available += 1;
+                 });
+             });
+             cy.doSearch(colName);
+             // Stub new window
+             cy.window().then(win => {
+                 cy.stub(win, 'open').as('Open')
+             });
+             // Check copy to clipboard
+             cy.get('[data-cy=search-results]').contains(colName).rightclick();
+             cy.get('[data-cy=context-menu]').within((ctx) => {
+                 // Check that there are 4 items in the menu
+                 cy.get(ctx).children().should('have.length', 4);
+                 cy.contains('API Details');
+                 cy.contains('Copy to clipboard');
+                 cy.contains('Open in new tab');
+                 cy.contains('View details');
+                 cy.contains('Copy to clipboard').click();
+                 cy.window().then((win) => (
+                     win.navigator.clipboard.readText().then((text) => {
+                         expect(text).to.match(new RegExp(`/collections/${testCollection.uuid}$`));
+                     })
+                 ));
+             });
+             // Check open in new tab
+             cy.get('[data-cy=search-results]').contains(colName).rightclick();
+             cy.get('[data-cy=context-menu]').within(() => {
+                 cy.contains('Open in new tab').click();
+                 cy.get('@Open').should('have.been.calledOnceWith', `${window.location.origin}/collections/${testCollection.uuid}`)
+             });
+             // Check federated result copy to clipboard
+             cy.get('[data-cy=search-results]').contains(federatedColName).rightclick();
+             cy.get('[data-cy=context-menu]').within(() => {
+                 cy.contains('Copy to clipboard').click();
+                 cy.window().then((win) => (
+                     win.navigator.clipboard.readText().then((text) => {
+                         expect(text).to.equal(`https://wb2.xxxxx.fakecluster.tld/collections/${federatedColUuid}`);
+                     })
+                 ));
+             });
+             // Check open in new tab
+             cy.get('[data-cy=search-results]').contains(federatedColName).rightclick();
+             cy.get('[data-cy=context-menu]').within(() => {
+                 cy.contains('Open in new tab').click();
+                 cy.get('@Open').should('have.been.calledWith', `https://wb2.xxxxx.fakecluster.tld/collections/${federatedColUuid}`)
+             });
+         });
+     });
+ });