From 1a60fe75da7b0f4517613439ab13fcd4cfbda7c3 Mon Sep 17 00:00:00 2001 From: Raju Udava <86527202+dstala@users.noreply.github.com> Date: Sat, 10 Sep 2022 23:27:33 +0530 Subject: [PATCH] test: CY test for LTAR verification Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> --- .../common/3f_link_to_another_record.js | 359 ++++++++++++++++++ .../cypress/integration/test/restTableOps.js | 2 + 2 files changed, 361 insertions(+) create mode 100644 scripts/cypress/integration/common/3f_link_to_another_record.js diff --git a/scripts/cypress/integration/common/3f_link_to_another_record.js b/scripts/cypress/integration/common/3f_link_to_another_record.js new file mode 100644 index 0000000000..0015743c1d --- /dev/null +++ b/scripts/cypress/integration/common/3f_link_to_another_record.js @@ -0,0 +1,359 @@ +import { mainPage } from "../../support/page_objects/mainPage"; +import { loginPage } from "../../support/page_objects/navigation"; +import { isTestSuiteActive } from "../../support/page_objects/projectConstants"; + +export const genTest = (apiType, dbType) => { + if (!isTestSuiteActive(apiType, dbType)) return; + + describe(`${apiType.toUpperCase()} api - RollUp column`, () => { + + function fetchParentFromLabel(label) { + cy.get("label").contains(label).parents(".ant-row").click(); + } + + // Insert new row + function addRow(index, cellValue) { + cy.get('.nc-grid-add-new-cell').should('exist').click(); + mainPage.getCell('Title', index) + .dblclick().then(($el) => { + cy.wrap($el).find('input') + .clear() + .type(`${cellValue}{enter}`); + }); + mainPage.getCell('Title', index) + .contains(cellValue).should('exist'); + } + + // Insert LTAR column + // + function addLtarColumn(columnName, foreignTable, relationType) { + // + icon + cy.get(".nc-grid tr > th:last .nc-icon").click(); + + // Column name + cy.getActiveMenu().find('input.nc-column-name-input', { timeout: 3000 }) + .should('exist') + .clear() + .type(columnName); + + // Column type + cy.get(".nc-column-type-input").last() + .click() + .type("Link"); + cy.getActiveSelection() + .find('.ant-select-item-option') + .contains("LinkToAnotherRecord").click(); + + // relation type (hm/ mm) + cy.get('.nc-ltar-relation-type') + .find('.ant-radio') + .eq(relationType==='hm'?0:1) + .click(); + + // Foreign table + fetchParentFromLabel("Child table"); + cy.get(".nc-ltar-child-table") + .last() + .click() + .type(foreignTable); + cy.getActiveSelection() + .find('.ant-select-item-option') + .contains(foreignTable) + .click(); + + // Save + cy.get(".ant-btn-primary") + .contains("Save") + .should('exist') + .click(); + + // Toast + cy.toastWait(`Column created`); + + // Verify + cy.get(`th[data-title="${columnName}"]`) + .should("exist"); + }; + + // Content verification for LTAR cell + // Validates only 1st chip contents + // + function verifyLtarCell(columnName, index, cellValue) { + cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`) + .find('.chip') + .eq(0) + .contains(cellValue) + .should("exist"); + } + + // Unlink LTAR cell + // + function ltarUnlink(columnName, index) { + // Click on cell to enable unlink icon + cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`).last() + .click() + + // Click on unlink icon + cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`).last() + .find('.unlink-icon') + .should("exist") + .click(); + + // Glitch; hence wait + cy.wait(1000); + } + + before(() => { + // required for standalone test + // loginPage.loginAndOpenProject(apiType, dbType); + + cy.createTable("Sheet1"); + cy.createTable("Sheet2"); + + cy.saveLocalStorage(); + }); + + beforeEach(() => { + cy.restoreLocalStorage(); + }); + + after(() => { + // Cleanup + // + cy.openTableTab("Sheet1", 0); + mainPage.deleteColumn("Link1-2hm"); + mainPage.deleteColumn("Link1-2mm"); + mainPage.deleteColumn("Sheet2"); + cy.deleteTable("Sheet1"); + + cy.deleteTable("Sheet2"); + }); + + /////////////////////////////////////////////////// + // Test case + + it("Create Link columns", () => { + cy.openTableTab("Sheet1", 0); + addRow(1, "1a"); + addRow(2, "1b"); + addRow(3, "1c"); + addLtarColumn("Link1-2hm", "Sheet2", "hm"); + addLtarColumn("Link1-2mm", "Sheet2", "mm"); + cy.closeTableTab("Sheet1"); + + cy.openTableTab("Sheet2", 0); + addLtarColumn("Link2-1hm", "Sheet1", "hm"); + cy.closeTableTab("Sheet2"); + + // Sheet2 now has all 3 column categories : HM, BT, MM + // + }); + + // Expand form [Add new row] + // + it("Add HM, BT, MM Link, Expand form", () => { + cy.openTableTab("Sheet2", 0); + + // Click on `Add new row` button + cy.get(".nc-add-new-row-btn:visible").should("exist"); + cy.get(".nc-add-new-row-btn").click(); + + // Title + cy.get(".nc-expand-col-Title").find(".nc-cell > input") + .should("exist") + .first() + .clear() + .type("2a"); + + // trigger("mouseover") is required to show the + icon + // didn't seem to work. As a kludge, used click with {force:true} + // additional delay ensures card contents are available before clicking + // + + // BT + cy.get(".nc-expand-col-Sheet1").find(".nc-action-icon") + .should("exist") + .click({ force: true }); + cy.wait(1000); + cy.getActiveModal() + .find('.ant-card').should('exist') + .eq(0).click(); + + // MM + cy.get(".nc-expand-col-Sheet1.List").find(".ant-btn-primary").click(); + cy.wait(1000); + cy.getActiveModal() + .find('.ant-card').should('exist') + .eq(0).click(); + + // HM + cy.get(".nc-expand-col-Link2-1hm") + .find(".ant-btn-primary") + .click(); + cy.wait(1000); + cy.getActiveModal() + .find('.ant-card').should('exist') + .eq(0).click(); + + // Save row + cy.getActiveDrawer() + .find("button") + .contains("Save row") + .click({ force: true }); + + // Toast + cy.toastWait("updated successfully"); + + // Close modal + cy.get("body").type("{esc}"); + }) + + // In cell insert + it("Add HM, BT, MM Link, In cell form", () => { + + // Insert row with `Title` field, rest of links are empty + addRow(2, "2b"); + + // BT + mainPage.getCell("Sheet1", 2) + .find(".nc-action-icon") + .click({ force: true }); + cy.getActiveModal() + .find('.ant-card') + .should('exist') + .eq(1) + .click(); + cy.wait(1000); + + // MM + mainPage.getCell("Sheet1 List", 2) + .find(".nc-action-icon") + .last() + .click({ force: true }); + cy.getActiveModal() + .find('.ant-card') + .should('exist') + .eq(1) + .click(); + cy.wait(1000); + + // HM + mainPage.getCell("Link2-1hm", 2) + .find(".nc-action-icon") + .last() + .click({ force: true }); + cy.getActiveModal() + .find('.ant-card') + .should('exist') + .eq(1) + .click(); + }); + + // Existing row, expand record + it("Add HM, BT, MM Link, expand record", () => { + addRow(3, "2c"); + cy.get(".nc-row-expand").eq(2).click({ force: true }); + + // BT + cy.wait(1000); + cy.get(".nc-expand-col-Sheet1") + .find(".nc-action-icon") + .should("exist") + .click({ force: true }); + cy.wait(1000); + cy.getActiveModal() + .find('.ant-card').should('exist') + .eq(2).click(); + + // MM + cy.get(".nc-expand-col-Sheet1.List") + .find(".ant-btn-primary").click(); + cy.wait(1000); + cy.getActiveModal() + .find('.ant-card').should('exist') + .eq(2).click(); + cy.wait(1000); + + // HM + cy.get(".nc-expand-col-Link2-1hm") + .find(".ant-btn-primary").click(); + cy.wait(1000); + cy.getActiveModal() + .find('.ant-card').should('exist') + .eq(2).click(); + cy.wait(1000); + + cy.getActiveDrawer() + .find("button") + .contains("Save row") + .click({ force: true }); + + // cy.toastWait("updated successfully"); + cy.toastWait("No columns to update"); + cy.get("body").type("{esc}"); + + verifyLtarCell("Sheet1", 1, "1a"); + verifyLtarCell("Sheet1", 2, "1b"); + verifyLtarCell("Sheet1", 3, "1c"); + verifyLtarCell("Sheet1 List", 1, "1a"); + verifyLtarCell("Sheet1 List", 2, "1b"); + verifyLtarCell("Sheet1 List", 3, "1c"); + verifyLtarCell("Link2-1hm", 1, "1a"); + verifyLtarCell("Link2-1hm", 2, "1b"); + verifyLtarCell("Link2-1hm", 3, "1c"); + + cy.closeTableTab("Sheet2"); + }); + + it("Verification", () => { + cy.openTableTab("Sheet1", 3); + verifyLtarCell("Link1-2hm", 1, "2a"); + verifyLtarCell("Link1-2hm", 2, "2b"); + verifyLtarCell("Link1-2hm", 3, "2c"); + verifyLtarCell("Link1-2mm", 1, "2a"); + verifyLtarCell("Link1-2mm", 2, "2b"); + verifyLtarCell("Link1-2mm", 3, "2c"); + verifyLtarCell("Sheet2", 1, "2a"); + verifyLtarCell("Sheet2", 2, "2b"); + verifyLtarCell("Sheet2", 3, "2c"); + cy.closeTableTab("Sheet1"); + }) + + it("Unlink", () => { + cy.openTableTab("Sheet1", 3); + ltarUnlink("Link1-2hm", 1); + ltarUnlink("Link1-2hm", 2); + ltarUnlink("Link1-2hm", 3); + ltarUnlink("Link1-2mm", 1); + ltarUnlink("Link1-2mm", 2); + ltarUnlink("Link1-2mm", 3); + ltarUnlink("Sheet2", 1); + ltarUnlink("Sheet2", 2); + ltarUnlink("Sheet2", 3); + cy.closeTableTab("Sheet1"); + }); + }); +}; + +/** + * @copyright Copyright (c) 2021, Xgene Cloud Ltd + * + * @author Pranav C Balan + * @author Raju Udava + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ diff --git a/scripts/cypress/integration/test/restTableOps.js b/scripts/cypress/integration/test/restTableOps.js index ad44c17d4d..003685c448 100644 --- a/scripts/cypress/integration/test/restTableOps.js +++ b/scripts/cypress/integration/test/restTableOps.js @@ -12,6 +12,7 @@ let t3b = require("../common/3b_formula_column"); let t3c = require("../common/3c_lookup_column"); let t3d = require("../common/3d_rollup_column"); let t3e = require("../common/3e_duration_column"); +let t3f = require("../common/3f_link_to_another_record"); const { setCurrentMode, } = require("../../support/page_objects/projectConstants"); @@ -32,6 +33,7 @@ const nocoTestSuite = (apiType, dbType) => { t3c.genTest(apiType, dbType); t3d.genTest(apiType, dbType); // NcGUI v2 t3e.genTest(apiType, dbType); + t3f.genTest(apiType, dbType); }; nocoTestSuite("rest", "mysql");