+ // Add another property
+ cy.get("[data-cy=resource-properties-form]").within(() => {
+ cy.get("[data-cy=property-field-key]").within(() => {
+ cy.get("input").type("Animal");
+ });
+ cy.get("[data-cy=property-field-value]").within(() => {
+ cy.get("input").type("Dog");
+ });
+ cy.root().submit();
+ });
+ cy.get("[data-cy=form-submit-btn]").click({ force: true });
+ // Reopen edit via breadcrumbs and verify properties
+ cy.get("[data-cy=breadcrumbs]").contains(projName).rightclick();
+ cy.get("[data-cy=context-menu]").contains("Edit").click();
+ cy.get("[data-cy=form-dialog]").within(() => {
+ cy.get("[data-cy=resource-properties-list]").within(() => {
+ cy.get("div[role=button]").contains("Color: Magenta");
+ cy.get("div[role=button]").contains("Color: Pink");
+ cy.get("div[role=button]").contains("Color: Yellow");
+ cy.get("div[role=button]").contains("Animal: Dog");
+ });
+ });
+ });
+
+ it("creates a project without and with description", function () {
+ const projName = `Test project (${Math.floor(999999 * Math.random())})`;
+ cy.loginAs(activeUser);
+
+ // Create project
+ 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(projName);
+ });
+ });
+ cy.get("[data-cy=form-submit-btn]").click();
+ cy.get("[data-cy=form-dialog]").should("not.exist");
+
+ const editProjectDescription = (name, type) => {
+ cy.get("[data-cy=side-panel-tree]").contains("Home Projects").click();
+ cy.get("[data-cy=project-panel] tbody tr").contains(name).rightclick({ force: true });
+ cy.get("[data-cy=context-menu]").contains("Edit").click();
+ cy.get("[data-cy=form-dialog]").within(() => {
+ cy.get("div[contenteditable=true]").click().type(type);
+ cy.get("[data-cy=form-submit-btn]").click();
+ });
+ };
+
+ const verifyProjectDescription = (name, description) => {
+ cy.doRequest("GET", "/arvados/v1/groups", null, {
+ filters: `[["name", "=", "${name}"], ["group_class", "=", "project"]]`,
+ })
+ .its("body.items")
+ .as("projects")
+ .then(function () {
+ expect(this.projects).to.have.lengthOf(1);
+ expect(this.projects[0].description).to.equal(description);
+ });
+ };
+
+ // Edit description
+ editProjectDescription(projName, "Test description");
+
+ // Check description is set
+ verifyProjectDescription(projName, "<p>Test description</p>");
+
+ // Clear description
+ editProjectDescription(projName, "{selectall}{backspace}");
+
+ // Check description is null
+ verifyProjectDescription(projName, null);
+
+ // Set description to contain whitespace
+ editProjectDescription(projName, "{selectall}{backspace} x");
+ editProjectDescription(projName, "{backspace}");
+
+ // Check description is null
+ verifyProjectDescription(projName, null);