+Cypress.Commands.add("createVirtualMachine", (token, data) => {
+ return cy.createResource(token, "virtual_machines", {
+ virtual_machine: JSON.stringify(data),
+ ensure_unique_name: true,
+ });
+});
+
+Cypress.Commands.add("getResource", (token, suffix, uuid) => {
+ return cy
+ .doRequest("GET", `/arvados/v1/${suffix}/${uuid}`, null, {}, token)
+ .its("body")
+ .then(function (resource) {
+ return resource;
+ });
+});
+
+Cypress.Commands.add("createResource", (token, suffix, data) => {
+ return cy
+ .doRequest("POST", "/arvados/v1/" + suffix, data, null, token, true)
+ .its("body")
+ .then(function (resource) {
+ createdResources.push({ suffix, uuid: resource.uuid });
+ return resource;
+ });
+});
+
+Cypress.Commands.add("deleteResource", (token, suffix, uuid, failOnStatusCode = true) => {
+ return cy
+ .doRequest("DELETE", "/arvados/v1/" + suffix + "/" + uuid, null, null, token, false, true, failOnStatusCode)
+ .its("body")
+ .then(function (resource) {
+ return resource;
+ });
+});
+
+Cypress.Commands.add("updateResource", (token, suffix, uuid, data) => {
+ return cy
+ .doRequest("PATCH", "/arvados/v1/" + suffix + "/" + uuid, data, null, token, true)
+ .its("body")
+ .then(function (resource) {
+ return resource;
+ });
+});
+
+Cypress.Commands.add("loginAs", user => {
+ cy.clearCookies();
+ cy.clearLocalStorage();
+ cy.visit(`/token/?api_token=${user.token}`);
+ cy.url({ timeout: 10000 }).should("contain", "/projects/");
+ cy.get("div#root").should("contain", "Arvados Workbench (zzzzz)");
+ cy.get("div#root").should("not.contain", "Your account is inactive");
+});
+
+Cypress.Commands.add("testEditProjectOrCollection", (container, oldName, newName, newDescription, isProject = true) => {
+ cy.get(container).contains(oldName).rightclick();
+ cy.get("[data-cy=context-menu]")
+ .contains(isProject ? "Edit project" : "Edit collection")
+ .click();
+ cy.get("[data-cy=form-dialog]").within(() => {
+ cy.get("input[name=name]").clear().type(newName);
+ cy.get(isProject ? "div[contenteditable=true]" : "input[name=description]")
+ .clear()
+ .type(newDescription);
+ cy.get("[data-cy=form-submit-btn]").click();
+ });
+
+ cy.get(container).contains(newName).rightclick();
+ cy.get("[data-cy=context-menu]")
+ .contains(isProject ? "Edit project" : "Edit collection")
+ .click();
+ cy.get("[data-cy=form-dialog]").within(() => {
+ cy.get("input[name=name]").should("have.value", newName);
+
+ if (isProject) {
+ cy.get("span[data-text=true]").contains(newDescription);
+ } else {
+ cy.get("input[name=description]").should("have.value", newDescription);
+ }
+
+ cy.get("[data-cy=form-cancel-btn]").click();
+ });
+});