+ 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=form-dialog]").should("not.exist");
+ cy.get("[data-cy=side-panel-tree]").contains("Projects").click();
+ cy.get("[data-cy=project-panel]").contains(projectName).should("be.visible").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}/);
+ })
+ );
+ });
+
+ it("sorts displayed items correctly", () => {
+ cy.loginAs(activeUser);
+
+ cy.get('[data-cy=project-panel] button[title="Select columns"]').click();
+ cy.get("div[role=presentation] ul > div[role=button]").contains("Date Created").click();
+ cy.get("div[role=presentation] ul > div[role=button]").contains("Trash at").click();
+ cy.get("div[role=presentation] ul > div[role=button]").contains("Delete at").click();
+ cy.get("div[role=presentation] > div[aria-hidden=true]").click();
+
+ cy.intercept({ method: "GET", url: "**/arvados/v1/groups/*/contents*" }).as("filteredQuery");
+ [
+ {
+ name: "Name",
+ asc: "collections.name asc,container_requests.name asc,groups.name asc",
+ desc: "collections.name desc,container_requests.name desc,groups.name desc",
+ },
+ {
+ name: "Last Modified",
+ asc: "collections.modified_at asc,container_requests.modified_at asc,groups.modified_at asc",
+ desc: "collections.modified_at desc,container_requests.modified_at desc,groups.modified_at desc",
+ },
+ {
+ name: "Date Created",
+ asc: "collections.created_at asc,container_requests.created_at asc,groups.created_at asc",
+ desc: "collections.created_at desc,container_requests.created_at desc,groups.created_at desc",
+ },
+ {
+ name: "Trash at",
+ asc: "collections.trash_at asc,container_requests.trash_at asc,groups.trash_at asc",
+ desc: "collections.trash_at desc,container_requests.trash_at desc,groups.trash_at desc",
+ },
+ {
+ name: "Delete at",
+ asc: "collections.delete_at asc,container_requests.delete_at asc,groups.delete_at asc",
+ desc: "collections.delete_at desc,container_requests.delete_at desc,groups.delete_at desc",
+ },
+ ].forEach(test => {
+ cy.get("[data-cy=project-panel] table thead th").contains(test.name).click();
+ cy.wait("@filteredQuery").then(interception => {
+ const searchParams = new URLSearchParams(new URL(interception.request.url).search);
+ expect(searchParams.get("order")).to.eq(test.asc);
+ });
+ cy.get("[data-cy=project-panel] table thead th").contains(test.name).click();
+ cy.wait("@filteredQuery").then(interception => {
+ const searchParams = new URLSearchParams(new URL(interception.request.url).search);
+ expect(searchParams.get("order")).to.eq(test.desc);
+ });