Browse Source

test: use class names for accessing active expand-drawer

Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com>
pull/3655/head
Raju Udava 2 years ago
parent
commit
a4b1218e0b
  1. 10
      scripts/cypress/integration/common/1b_table_column_operations.js
  2. 218
      scripts/cypress/integration/common/2b_table_with_m2m_column.js
  3. 379
      scripts/cypress/integration/common/3a_filter_sort_fields_operations.js
  4. 571
      scripts/cypress/integration/common/3e_duration_column.js
  5. 153
      scripts/cypress/integration/common/3f_link_to_another_record.js
  6. 12
      scripts/cypress/integration/common/4f_grid_view_share.js
  7. 3
      scripts/cypress/integration/common/8a_webhook.js
  8. 512
      scripts/cypress/integration/spec/roleValidation.spec.js
  9. 33
      scripts/cypress/integration/test/restTableOps.js

10
scripts/cypress/integration/common/1b_table_column_operations.js

@ -18,10 +18,11 @@ export const genTest = (apiType, dbType) => {
.clear() .clear()
.type(cellValue); .type(cellValue);
cy.getActiveDrawer() cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button") .find("button")
.contains("Save row") .contains("Save row")
.click({ force: true }); .should("exist")
.click();
cy.toastWait("updated successfully"); cy.toastWait("updated successfully");
cy.get("body").type("{esc}"); cy.get("body").type("{esc}");
@ -148,10 +149,11 @@ export const genTest = (apiType, dbType) => {
.clear() .clear()
.type(updatedRandVal); .type(updatedRandVal);
cy.getActiveDrawer() cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button") .find("button")
.contains("Save row") .contains("Save row")
.click({ force: true }); .should("exist")
.click();
// partial toast message // partial toast message
cy.toastWait("updated successfully"); cy.toastWait("updated successfully");

218
scripts/cypress/integration/common/2b_table_with_m2m_column.js

@ -2,121 +2,135 @@ import { mainPage } from "../../support/page_objects/mainPage";
import { isTestSuiteActive } from "../../support/page_objects/projectConstants"; import { isTestSuiteActive } from "../../support/page_objects/projectConstants";
export const genTest = (apiType, dbType) => { export const genTest = (apiType, dbType) => {
if (!isTestSuiteActive(apiType, dbType)) return; if (!isTestSuiteActive(apiType, dbType)) return;
describe(`${apiType.toUpperCase()} api - M2M Column validation`, () => { describe(`${apiType.toUpperCase()} api - M2M Column validation`, () => {
// before(() => { // before(() => {
// cy.openTableTab("Actor", 25); // cy.openTableTab("Actor", 25);
// }); // });
beforeEach(() => { beforeEach(() => {
cy.restoreLocalStorage(); cy.restoreLocalStorage();
}) });
afterEach(() => { afterEach(() => {
cy.saveLocalStorage(); cy.saveLocalStorage();
}) });
// after(() => { // after(() => {
// cy.closeTableTab("Actor"); // cy.closeTableTab("Actor");
// }); // });
it("Table column header, URL validation", () => { it("Table column header, URL validation", () => {
cy.openTableTab("Actor", 25); cy.openTableTab("Actor", 25);
// column name validation // column name validation
// cy.get(`.project-tab:contains(Actor):visible`).should("exist"); // cy.get(`.project-tab:contains(Actor):visible`).should("exist");
// URL validation // URL validation
cy.url().should("contain", `table/Actor`); cy.url().should("contain", `table/Actor`);
}); });
it("M2m chip content validation on grid", () => { it("M2m chip content validation on grid", () => {
// grid m2m content validation // grid m2m content validation
mainPage.getCell("Film List", 1) mainPage
.find('.nc-virtual-cell > .chips-wrapper > .chips > .group > .name') .getCell("Film List", 1)
.contains("ACADEMY DINOSAUR") .find(".nc-virtual-cell > .chips-wrapper > .chips > .group > .name")
.should('exist'); .contains("ACADEMY DINOSAUR")
mainPage.getCell("Film List", 1) .should("exist");
.find('.nc-virtual-cell > .chips-wrapper > .chips > .group > .name') mainPage
.contains("ANACONDA CONFESSIONS") .getCell("Film List", 1)
.should('exist'); .find(".nc-virtual-cell > .chips-wrapper > .chips > .group > .name")
}); .contains("ANACONDA CONFESSIONS")
.should("exist");
});
it("Expand m2m column", () => { it("Expand m2m column", () => {
// expand first row // expand first row
mainPage.getCell("Film List", 1).should("exist").trigger("mouseover").click(); mainPage
cy.get('.nc-action-icon').eq(0).should('exist').click({ force: true }); .getCell("Film List", 1)
.should("exist")
.trigger("mouseover")
.click();
cy.get(".nc-action-icon").eq(0).should("exist").click({ force: true });
// GUI-v2 Kludge:
// validations
// cy.getActiveModal().contains("Film").should("exist");
// cy.getActiveModal().find("button.mdi-reload").should("exist");
// cy.getActiveModal()
// .find("button:contains(Link to 'Film')")
// .should("exist");
cy.getActiveModal(".nc-modal-child-list")
.find(".ant-card")
.eq(0)
.contains("ACADEMY DINOSAUR")
.should("exist");
});
// GUI-v2 Kludge: it('Expand "Link to" record, validate', () => {
// validations cy.getActiveModal(".nc-modal-child-list")
// cy.getActiveModal().contains("Film").should("exist"); .find("button:contains(Link to 'Film')")
// cy.getActiveModal().find("button.mdi-reload").should("exist"); .click()
// cy.getActiveModal() .then(() => {
// .find("button:contains(Link to 'Film')") // Link record form validation
// .should("exist"); cy.getActiveModal(".nc-modal-link-record")
cy.getActiveModal(".nc-modal-child-list") .contains("Link record")
.find(".ant-card") .should("exist");
.eq(0) cy.getActiveModal(".nc-modal-link-record")
.contains("ACADEMY DINOSAUR") .find(".nc-reload")
.should("exist"); .should("exist");
cy.getActiveModal(".nc-modal-link-record")
.find('button:contains("Add new record")')
.should("exist");
cy.getActiveModal(".nc-modal-link-record")
.find(".ant-card")
.eq(0)
.contains("ACE GOLDFINGER")
.should("exist");
cy.getActiveModal(".nc-modal-link-record")
.find("button.ant-modal-close")
.click();
}); });
});
it('Expand "Link to" record, validate', () => { it("Expand first linked card, validate", () => {
cy.getActiveModal(".nc-modal-child-list") // expand first row
.find("button:contains(Link to 'Film')") mainPage
.click() .getCell("Film List", 1)
.then(() => { .should("exist")
// Link record form validation .trigger("mouseover")
cy.getActiveModal(".nc-modal-link-record").contains("Link record").should("exist"); .click();
cy.getActiveModal(".nc-modal-link-record") cy.get(".nc-action-icon").eq(0).should("exist").click({ force: true });
.find(".nc-reload")
.should("exist"); cy.getActiveModal(".nc-modal-child-list")
cy.getActiveModal(".nc-modal-link-record") .find(".ant-card")
.find('button:contains("Add new record")') .eq(0)
.should("exist"); .contains("ACADEMY DINOSAUR", { timeout: 2000 })
cy.getActiveModal(".nc-modal-link-record") .click()
.find(".ant-card") .then(() => {
.eq(0) // wait to ensure pop up appears before we proceed further
.contains("ACE GOLDFINGER") cy.wait(1000);
.should("exist"); // Link card validation
cy.getActiveModal(".nc-modal-link-record").find("button.ant-modal-close").click(); cy.getActiveDrawer(".nc-drawer-expanded-form")
}); .find(".text-lg")
.contains("ACADEMY DINOSAUR")
.should("exist");
cy.getActiveDrawer(".nc-drawer-expanded-form")
.find('button:contains("Save row")')
.should("exist");
cy.getActiveDrawer(".nc-drawer-expanded-form")
.find('button:contains("Cancel")')
.should("exist");
cy.getActiveDrawer(".nc-drawer-expanded-form")
.find('button:contains("Cancel")')
.should("exist")
.click();
cy.getActiveModal().find("button.ant-modal-close").click();
}); });
it("Expand first linked card, validate", () => { cy.closeTableTab("Actor");
// expand first row
mainPage.getCell("Film List", 1).should("exist").trigger("mouseover").click();
cy.get('.nc-action-icon').eq(0).should('exist').click({ force: true });
cy.getActiveModal(".nc-modal-child-list")
.find(".ant-card")
.eq(0)
.contains("ACADEMY DINOSAUR", { timeout: 2000 })
.click()
.then(() => {
// wait to ensure pop up appears before we proceed further
cy.wait(1000)
// Link card validation
cy.getActiveDrawer()
.find(".text-lg")
.contains("ACADEMY DINOSAUR")
.should("exist");
cy.getActiveDrawer()
.find('button:contains("Save row")')
.should("exist");
cy.getActiveDrawer()
.find('button:contains("Cancel")')
.should("exist");
cy.getActiveDrawer()
.find('button:contains("Cancel")')
.click();
cy.getActiveModal().find("button.ant-modal-close").click();
});
cy.closeTableTab("Actor");
});
}); });
});
}; };
/** /**

379
scripts/cypress/integration/common/3a_filter_sort_fields_operations.js

@ -1,201 +1,194 @@
import { mainPage } from "../../support/page_objects/mainPage"; import { mainPage } from "../../support/page_objects/mainPage";
import { loginPage} from "../../support/page_objects/navigation"; import { loginPage } from "../../support/page_objects/navigation";
import { isTestSuiteActive } from "../../support/page_objects/projectConstants"; import { isTestSuiteActive } from "../../support/page_objects/projectConstants";
export const genTest = (apiType, dbType) => { export const genTest = (apiType, dbType) => {
if (!isTestSuiteActive(apiType, dbType)) return; if (!isTestSuiteActive(apiType, dbType)) return;
describe(`${apiType.toUpperCase()} api - Grid operations`, () => { describe(`${apiType.toUpperCase()} api - Grid operations`, () => {
// before(() => { // before(() => {
// // loginPage.loginAndOpenProject(apiType, dbType); // // loginPage.loginAndOpenProject(apiType, dbType);
// //
// // open country table // // open country table
// cy.openTableTab("Country", 25); // cy.openTableTab("Country", 25);
// }); // });
// //
// after(() => { // after(() => {
// cy.closeTableTab("Country"); // cy.closeTableTab("Country");
// }); // });
beforeEach(() => { beforeEach(() => {
cy.restoreLocalStorage(); cy.restoreLocalStorage();
})
afterEach(() => {
cy.saveLocalStorage();
})
it("Check country table - Pagination", () => {
cy.openTableTab("Country", 25);
cy.get(".nc-pagination").should("exist");
// verify > pagination option
mainPage.getPagination(">").click();
mainPage
.getPagination(2)
.should("have.class", "ant-pagination-item-active");
// verify < pagination option
mainPage.getPagination("<").click();
mainPage
.getPagination(1)
.should("have.class", "ant-pagination-item-active");
});
// create new row using + button in header
//
it("Add row using tool header button", () => {
// add a row to end of Country table
cy.get(".nc-add-new-row-btn").click();
cy.wait(1000);
cy.get(".nc-expand-col-Country").find(".nc-cell > input").first().type("Test Country");
cy.getActiveDrawer()
.find(".ant-btn-primary")
.contains("Save row")
.click();
// cy.get("#data-table-form-Country > input")
// .first()
// .type("Test Country");
// cy.contains("Save row").filter("button").click();
cy.toastWait("updated successfully");
cy.getActiveDrawer()
.find(".ant-btn")
.contains("Cancel")
.click();
// verify
mainPage.getPagination(5).click();
// kludge: flicker on load
cy.wait(3000)
mainPage
.getCell("Country", 10)
.contains("Test Country")
.should("exist");
});
// delete single row
//
it("Delete Row", () => {
// delete row added in previous step
mainPage.getCell("Country", 10).rightclick();
cy.getActiveMenu(".nc-dropdown-grid-context-menu").contains("Delete Row").click();
// cy.toastWait('Deleted row successfully')
// verify
cy.get(`:nth-child(10) > [data-title="Country"]`).should("not.exist");
mainPage.getPagination(1).click();
});
// create new row using right click menu option
//
it.skip("Add row using rightclick menu option", () => {
// Temporary
mainPage.getPagination(5).click();
mainPage.getCell("Country", 9).rightclick({ force: true });
cy.getActiveMenu(".nc-dropdown-grid-context-menu")
.contains("Insert New Row")
.click({ force: true });
mainPage
.getCell("Country", 10)
.dblclick()
.find("input")
.type("Test Country-1{enter}");
mainPage.getCell("Country", 10).rightclick({ force: true });
cy.getActiveMenu(".nc-dropdown-grid-context-menu")
.contains("Insert New Row")
.click({ force: true });
mainPage
.getCell("Country", 11)
.dblclick()
.find("input")
.type("Test Country-2{enter}");
// GUI-v2 Kludge:
// to move cursor away from input field; enter key is not recognized
// mainPage.getCell("Country", 10).click()
// verify
mainPage
.getCell("Country", 10)
.contains("Test Country-1")
.should("exist");
mainPage
.getCell("Country", 11)
.contains("Test Country-2")
.should("exist");
});
// delete selected rows (multiple)
//
it.skip("Delete Selected", () => {
cy.get(".ant-checkbox").should('exist')
.eq(10).click({ force: true });
cy.get(".ant-checkbox").should('exist')
.eq(11).click({ force: true });
mainPage.getCell("Country", 10).rightclick({ force: true });
cy.getActiveMenu(".nc-dropdown-grid-context-menu")
.contains("Delete Selected Rows")
.click({ force: true });
// verify
// mainPage.getCell("Country", 10).should("not.exist");
// mainPage.getCell("Country", 11).should("not.exist");
cy.get(
`:nth-child(10) > [data-title="Country"]`
).should("not.exist");
cy.get(
`:nth-child(11) > [data-title="Country"]`
).should("not.exist");
mainPage.getPagination(1).click();
});
it("Enable sort", () => {
mainPage.sortField("Country", "Z → A");
cy.contains("Zambia").should("exist");
});
it("Disable sort", () => {
mainPage.clearSort();
cy.contains("Zambia").should("not.exist");
});
it("Hide field", () => {
mainPage.hideField("LastUpdate");
});
it("Show field", () => {
mainPage.unhideField("LastUpdate");
});
it("Create Filter", () => {
mainPage.filterField("Country", "is equal", "India");
// cy.get("td:contains(India)").should("exist");
mainPage.getCell("Country", 1)
.contains("India")
.should("exist");
});
it("Delete Filter", () => {
// remove sort and check
mainPage.filterReset();
mainPage.getCell("Country", 1)
.contains("India")
.should("not.exist");
// cy.contains("td:contains(India)").should("not.exist");
cy.closeTableTab("Country");
});
}); });
afterEach(() => {
cy.saveLocalStorage();
});
it("Check country table - Pagination", () => {
cy.openTableTab("Country", 25);
cy.get(".nc-pagination").should("exist");
// verify > pagination option
mainPage.getPagination(">").click();
mainPage
.getPagination(2)
.should("have.class", "ant-pagination-item-active");
// verify < pagination option
mainPage.getPagination("<").click();
mainPage
.getPagination(1)
.should("have.class", "ant-pagination-item-active");
});
// create new row using + button in header
//
it("Add row using tool header button", () => {
// add a row to end of Country table
cy.get(".nc-add-new-row-btn").click();
cy.wait(1000);
cy.get(".nc-expand-col-Country")
.find(".nc-cell > input")
.first()
.type("Test Country");
cy.getActiveDrawer(".nc-drawer-expanded-form")
.find(".ant-btn-primary")
.contains("Save row")
.should("exist")
.click();
// cy.get("#data-table-form-Country > input")
// .first()
// .type("Test Country");
// cy.contains("Save row").filter("button").click();
cy.toastWait("updated successfully");
cy.getActiveDrawer(".nc-drawer-expanded-form")
.find(".ant-btn")
.contains("Cancel")
.should("exist")
.click();
// verify
mainPage.getPagination(5).click();
// kludge: flicker on load
cy.wait(3000);
mainPage.getCell("Country", 10).contains("Test Country").should("exist");
});
// delete single row
//
it("Delete Row", () => {
// delete row added in previous step
mainPage.getCell("Country", 10).rightclick();
cy.getActiveMenu(".nc-dropdown-grid-context-menu")
.contains("Delete Row")
.click();
// cy.toastWait('Deleted row successfully')
// verify
cy.get(`:nth-child(10) > [data-title="Country"]`).should("not.exist");
mainPage.getPagination(1).click();
});
// create new row using right click menu option
//
it.skip("Add row using rightclick menu option", () => {
// Temporary
mainPage.getPagination(5).click();
mainPage.getCell("Country", 9).rightclick({ force: true });
cy.getActiveMenu(".nc-dropdown-grid-context-menu")
.contains("Insert New Row")
.click({ force: true });
mainPage
.getCell("Country", 10)
.dblclick()
.find("input")
.type("Test Country-1{enter}");
mainPage.getCell("Country", 10).rightclick({ force: true });
cy.getActiveMenu(".nc-dropdown-grid-context-menu")
.contains("Insert New Row")
.click({ force: true });
mainPage
.getCell("Country", 11)
.dblclick()
.find("input")
.type("Test Country-2{enter}");
// GUI-v2 Kludge:
// to move cursor away from input field; enter key is not recognized
// mainPage.getCell("Country", 10).click()
// verify
mainPage
.getCell("Country", 10)
.contains("Test Country-1")
.should("exist");
mainPage
.getCell("Country", 11)
.contains("Test Country-2")
.should("exist");
});
// delete selected rows (multiple)
//
it.skip("Delete Selected", () => {
cy.get(".ant-checkbox").should("exist").eq(10).click({ force: true });
cy.get(".ant-checkbox").should("exist").eq(11).click({ force: true });
mainPage.getCell("Country", 10).rightclick({ force: true });
cy.getActiveMenu(".nc-dropdown-grid-context-menu")
.contains("Delete Selected Rows")
.click({ force: true });
// verify
// mainPage.getCell("Country", 10).should("not.exist");
// mainPage.getCell("Country", 11).should("not.exist");
cy.get(`:nth-child(10) > [data-title="Country"]`).should("not.exist");
cy.get(`:nth-child(11) > [data-title="Country"]`).should("not.exist");
mainPage.getPagination(1).click();
});
it("Enable sort", () => {
mainPage.sortField("Country", "Z → A");
cy.contains("Zambia").should("exist");
});
it("Disable sort", () => {
mainPage.clearSort();
cy.contains("Zambia").should("not.exist");
});
it("Hide field", () => {
mainPage.hideField("LastUpdate");
});
it("Show field", () => {
mainPage.unhideField("LastUpdate");
});
it("Create Filter", () => {
mainPage.filterField("Country", "is equal", "India");
// cy.get("td:contains(India)").should("exist");
mainPage.getCell("Country", 1).contains("India").should("exist");
});
it("Delete Filter", () => {
// remove sort and check
mainPage.filterReset();
mainPage.getCell("Country", 1).contains("India").should("not.exist");
// cy.contains("td:contains(India)").should("not.exist");
cy.closeTableTab("Country");
});
});
}; };
/** /**

571
scripts/cypress/integration/common/3e_duration_column.js

@ -1,282 +1,301 @@
import { mainPage } from "../../support/page_objects/mainPage"; import { mainPage } from "../../support/page_objects/mainPage";
import { import { isTestSuiteActive } from "../../support/page_objects/projectConstants";
isTestSuiteActive,
} from "../../support/page_objects/projectConstants";
export const genTest = (apiType, dbType) => { export const genTest = (apiType, dbType) => {
if (!isTestSuiteActive(apiType, dbType)) return; if (!isTestSuiteActive(apiType, dbType)) return;
describe(`${apiType.toUpperCase()} api - DURATION`, () => { describe(`${apiType.toUpperCase()} api - DURATION`, () => {
const tableName = "DurationTable"; const tableName = "DurationTable";
// to retrieve few v-input nodes from their label // to retrieve few v-input nodes from their label
// //
const fetchParentFromLabel = (label) => { const fetchParentFromLabel = (label) => {
cy.get("label").contains(label).parents(".ant-row").first().click(); cy.get("label").contains(label).parents(".ant-row").first().click();
}; };
// Run once before test- create table // Run once before test- create table
// //
before(() => { before(() => {
mainPage.tabReset(); mainPage.tabReset();
// // kludge: wait for page load to finish // // kludge: wait for page load to finish
// cy.wait(1000); // cy.wait(1000);
// // close team & auth tab // // close team & auth tab
// cy.get('button.ant-tabs-tab-remove').should('exist').click(); // cy.get('button.ant-tabs-tab-remove').should('exist').click();
// cy.wait(1000); // cy.wait(1000);
cy.createTable(tableName); cy.createTable(tableName);
});
beforeEach(() => {
});
after(() => {
cy.deleteTable(tableName);
});
// Routine to create a new look up column
//
const addDurationColumn = (columnName, durationFormat) => {
cy.get(".nc-grid tr > th:last .nc-icon").click({
force: true,
});
cy.getActiveMenu(".nc-dropdown-grid-add-column")
.find('input.nc-column-name-input', { timeout: 3000 })
.should('exist')
.clear()
.type(columnName);
// cy.get(".nc-column-type-input").last().click().type("Duration");
cy.getActiveMenu('.nc-dropdown-grid-add-column')
.find(".nc-column-type-input")
.last()
.click()
.type("Duration")
cy.getActiveSelection('.nc-dropdown-column-type')
.find('.ant-select-item-option')
.contains("Duration")
.click();
// Configure Duration format
fetchParentFromLabel("Duration Format");
cy.getActiveSelection('.nc-dropdown-duration-option')
.find('.ant-select-item-option')
.contains(durationFormat)
.click();
// cy.get(".ant-btn-primary").contains("Save").should('exist').click();
cy.getActiveMenu('.nc-dropdown-grid-add-column')
.find(".ant-btn-primary:visible")
.contains("Save")
.click();
cy.toastWait(`Column created`);
cy.get(`th[data-title="${columnName}"]`).should("exist");
};
// routine to delete column
//
const deleteColumnByName = (columnName) => {
mainPage.deleteColumn(columnName);
};
// routine to edit column
//
const editColumnByName = (oldName, newName, newDurationFormat) => {
cy.get(`th:contains(${oldName}) .nc-icon.ant-dropdown-trigger`)
.trigger("mouseover", { force: true })
.click({ force: true });
// cy.get(".nc-column-edit").click();
// cy.get(".nc-column-edit").should("not.be.visible");
cy.getActiveMenu(".nc-dropdown-column-operations")
.find(".nc-column-edit")
.click();
// rename column and verify
cy.getActiveMenu(".nc-dropdown-edit-column")
.find('input.nc-column-name-input', { timeout: 3000 })
.should('exist')
.clear()
.type(newName);
// Configure Duration format
fetchParentFromLabel("Duration Format");
cy.getActiveSelection('.nc-dropdown-duration-option')
.find('.ant-select-item-option')
.contains(newDurationFormat)
.click();
// cy.get(".ant-btn-primary:visible").contains("Save").click();
cy.getActiveMenu('.nc-dropdown-edit-column')
.find(".ant-btn-primary:visible")
.contains("Save")
.click();
cy.toastWait("Column updated");
cy.get(`th:contains(${oldName})`).should("not.exist");
cy.get(`th:contains(${newName})`).should("exist");
};
const addDurationData = (colName, index, cellValue, expectedValue, isNewRow = false) => {
if (isNewRow) {
cy.get(".nc-add-new-row-btn:visible").should("exist");
cy.wait(500)
cy.get(".nc-add-new-row-btn").click();
} else {
// mainPage.getRow(index).find(".nc-row-expand-icon").click({ force: true });
cy.get(".nc-row-expand")
.eq(index-1)
.click({ force: true });
}
cy.get(".duration-cell-wrapper > input").first().should('exist').type(cellValue);
cy.getActiveDrawer().find("button").contains("Save row").click({ force: true });
cy.toastWait("Row updated successfully");
cy.getActiveDrawer().find("button").contains("Cancel").click({ force: true });
// mainPage.getCell(colName, index).find('input').then(($e) => {
// expect($e[0].value).to.equal(expectedValue)
// })
mainPage.getCell(colName, index)
.contains(expectedValue)
.should("exist");
}
///////////////////////////////////////////////////
// Test case
{
// Duration: h:mm
it("Duration: h:mm", () => {
addDurationColumn("NC_DURATION_0", "h:mm (e.g. 1:23)");
addDurationData("NC_DURATION_0", 1, "1:30", "01:30", true);
addDurationData("NC_DURATION_0", 2, "30", "00:30", true);
addDurationData("NC_DURATION_0", 3, "60", "01:00", true);
addDurationData("NC_DURATION_0", 4, "80", "01:20", true);
addDurationData("NC_DURATION_0", 5, "12:34", "12:34", true);
addDurationData("NC_DURATION_0", 6, "15:130", "17:10", true);
addDurationData("NC_DURATION_0", 7, "123123", "2052:03", true);
});
it("Duration: Edit Column NC_DURATION_0", () => {
editColumnByName(
"NC_DURATION_0",
"NC_DURATION_EDITED_0",
"h:mm:ss (e.g. 3:45, 1:23:40)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_0");
});
}
{
// Duration: h:mm:ss
it("Duration: h:mm:ss", () => {
addDurationColumn("NC_DURATION_1", "h:mm:ss (e.g. 3:45, 1:23:40)");
addDurationData("NC_DURATION_1", 1, "11:22:33", "11:22:33");
addDurationData("NC_DURATION_1", 2, "1234", "00:20:34");
addDurationData("NC_DURATION_1", 3, "50", "00:00:50");
addDurationData("NC_DURATION_1", 4, "1:1111", "00:19:31");
addDurationData("NC_DURATION_1", 5, "1:11:1111", "01:29:31");
addDurationData("NC_DURATION_1", 6, "15:130", "00:17:10");
addDurationData("NC_DURATION_1", 7, "123123", "34:12:03");
});
it("Duration: Edit Column NC_DURATION_1", () => {
editColumnByName(
"NC_DURATION_1",
"NC_DURATION_EDITED_1",
"h:mm:ss.s (e.g. 3:34.6, 1:23:40.0)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_1");
});
}
{
// h:mm:ss.s
it("Duration: h:mm:ss.s", () => {
addDurationColumn("NC_DURATION_2", "h:mm:ss.s (e.g. 3:34.6, 1:23:40.0)");
addDurationData("NC_DURATION_2", 1, "1234", "00:20:34.0");
addDurationData("NC_DURATION_2", 2, "12:34", "00:12:34.0");
addDurationData("NC_DURATION_2", 3, "12:34:56", "12:34:56.0");
addDurationData("NC_DURATION_2", 4, "12:34:999", "12:50:39.0");
addDurationData("NC_DURATION_2", 5, "12:999:56", "28:39:56.0");
addDurationData("NC_DURATION_2", 6, "12:34:56.12", "12:34:56.1");
addDurationData("NC_DURATION_2", 7, "12:34:56.199", "12:34:56.2");
});
it("Duration: Edit Column NC_DURATION_2", () => {
editColumnByName(
"NC_DURATION_2",
"NC_DURATION_EDITED_2",
"h:mm:ss (e.g. 3:45, 1:23:40)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_2");
});
}
{
// h:mm:ss.ss
it("Duration: h:mm:ss.ss", () => {
addDurationColumn("NC_DURATION_3", "h:mm:ss.ss (e.g. 3.45.67, 1:23:40.00)");
addDurationData("NC_DURATION_3", 1, "1234", "00:20:34.00");
addDurationData("NC_DURATION_3", 2, "12:34", "00:12:34.00");
addDurationData("NC_DURATION_3", 3, "12:34:56", "12:34:56.00");
addDurationData("NC_DURATION_3", 4, "12:34:999", "12:50:39.00");
addDurationData("NC_DURATION_3", 5, "12:999:56", "28:39:56.00");
addDurationData("NC_DURATION_3", 6, "12:34:56.12", "12:34:56.12");
addDurationData("NC_DURATION_3", 7, "12:34:56.199", "12:34:56.20");
});
it("Duration: Edit Column NC_DURATION_3", () => {
editColumnByName(
"NC_DURATION_3",
"NC_DURATION_EDITED_3",
"h:mm:ss.ss (e.g. 3.45.67, 1:23:40.00)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_3");
});
}
{
// h:mm:ss.sss
it("Duration: h:mm:ss.sss", () => {
addDurationColumn("NC_DURATION_4", "h:mm:ss.sss (e.g. 3.45.678, 1:23:40.000)");
addDurationData("NC_DURATION_4", 1, "1234", "00:20:34.000");
addDurationData("NC_DURATION_4", 2, "12:34", "00:12:34.000");
addDurationData("NC_DURATION_4", 3, "12:34:56", "12:34:56.000");
addDurationData("NC_DURATION_4", 4, "12:34:999", "12:50:39.000");
addDurationData("NC_DURATION_4", 5, "12:999:56", "28:39:56.000");
addDurationData("NC_DURATION_4", 6, "12:34:56.12", "12:34:56.012");
addDurationData("NC_DURATION_4", 7, "12:34:56.199", "12:34:56.199");
});
it("Duration: Edit Column NC_DURATION_4", () => {
editColumnByName(
"NC_DURATION_4",
"NC_DURATION_EDITED_4",
"h:mm (e.g. 1:23)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_4");
});
}
}); });
beforeEach(() => {});
after(() => {
cy.deleteTable(tableName);
});
// Routine to create a new look up column
//
const addDurationColumn = (columnName, durationFormat) => {
cy.get(".nc-grid tr > th:last .nc-icon").click({
force: true,
});
cy.getActiveMenu(".nc-dropdown-grid-add-column")
.find("input.nc-column-name-input", { timeout: 3000 })
.should("exist")
.clear()
.type(columnName);
// cy.get(".nc-column-type-input").last().click().type("Duration");
cy.getActiveMenu(".nc-dropdown-grid-add-column")
.find(".nc-column-type-input")
.last()
.click()
.type("Duration");
cy.getActiveSelection(".nc-dropdown-column-type")
.find(".ant-select-item-option")
.contains("Duration")
.click();
// Configure Duration format
fetchParentFromLabel("Duration Format");
cy.getActiveSelection(".nc-dropdown-duration-option")
.find(".ant-select-item-option")
.contains(durationFormat)
.click();
// cy.get(".ant-btn-primary").contains("Save").should('exist').click();
cy.getActiveMenu(".nc-dropdown-grid-add-column")
.find(".ant-btn-primary:visible")
.contains("Save")
.click();
cy.toastWait(`Column created`);
cy.get(`th[data-title="${columnName}"]`).should("exist");
};
// routine to delete column
//
const deleteColumnByName = (columnName) => {
mainPage.deleteColumn(columnName);
};
// routine to edit column
//
const editColumnByName = (oldName, newName, newDurationFormat) => {
cy.get(`th:contains(${oldName}) .nc-icon.ant-dropdown-trigger`)
.trigger("mouseover", { force: true })
.click({ force: true });
// cy.get(".nc-column-edit").click();
// cy.get(".nc-column-edit").should("not.be.visible");
cy.getActiveMenu(".nc-dropdown-column-operations")
.find(".nc-column-edit")
.click();
// rename column and verify
cy.getActiveMenu(".nc-dropdown-edit-column")
.find("input.nc-column-name-input", { timeout: 3000 })
.should("exist")
.clear()
.type(newName);
// Configure Duration format
fetchParentFromLabel("Duration Format");
cy.getActiveSelection(".nc-dropdown-duration-option")
.find(".ant-select-item-option")
.contains(newDurationFormat)
.click();
// cy.get(".ant-btn-primary:visible").contains("Save").click();
cy.getActiveMenu(".nc-dropdown-edit-column")
.find(".ant-btn-primary:visible")
.contains("Save")
.click();
cy.toastWait("Column updated");
cy.get(`th:contains(${oldName})`).should("not.exist");
cy.get(`th:contains(${newName})`).should("exist");
};
const addDurationData = (
colName,
index,
cellValue,
expectedValue,
isNewRow = false
) => {
if (isNewRow) {
cy.get(".nc-add-new-row-btn:visible").should("exist");
cy.wait(500);
cy.get(".nc-add-new-row-btn").click();
} else {
// mainPage.getRow(index).find(".nc-row-expand-icon").click({ force: true });
cy.get(".nc-row-expand")
.eq(index - 1)
.click({ force: true });
}
cy.get(".duration-cell-wrapper > input")
.first()
.should("exist")
.type(cellValue);
cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button")
.contains("Save row")
.should("exist")
.click();
cy.toastWait("Row updated successfully");
cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button")
.contains("Cancel")
.should("exist")
.click();
// mainPage.getCell(colName, index).find('input').then(($e) => {
// expect($e[0].value).to.equal(expectedValue)
// })
mainPage.getCell(colName, index).contains(expectedValue).should("exist");
};
///////////////////////////////////////////////////
// Test case
{
// Duration: h:mm
it("Duration: h:mm", () => {
addDurationColumn("NC_DURATION_0", "h:mm (e.g. 1:23)");
addDurationData("NC_DURATION_0", 1, "1:30", "01:30", true);
addDurationData("NC_DURATION_0", 2, "30", "00:30", true);
addDurationData("NC_DURATION_0", 3, "60", "01:00", true);
addDurationData("NC_DURATION_0", 4, "80", "01:20", true);
addDurationData("NC_DURATION_0", 5, "12:34", "12:34", true);
addDurationData("NC_DURATION_0", 6, "15:130", "17:10", true);
addDurationData("NC_DURATION_0", 7, "123123", "2052:03", true);
});
it("Duration: Edit Column NC_DURATION_0", () => {
editColumnByName(
"NC_DURATION_0",
"NC_DURATION_EDITED_0",
"h:mm:ss (e.g. 3:45, 1:23:40)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_0");
});
}
{
// Duration: h:mm:ss
it("Duration: h:mm:ss", () => {
addDurationColumn("NC_DURATION_1", "h:mm:ss (e.g. 3:45, 1:23:40)");
addDurationData("NC_DURATION_1", 1, "11:22:33", "11:22:33");
addDurationData("NC_DURATION_1", 2, "1234", "00:20:34");
addDurationData("NC_DURATION_1", 3, "50", "00:00:50");
addDurationData("NC_DURATION_1", 4, "1:1111", "00:19:31");
addDurationData("NC_DURATION_1", 5, "1:11:1111", "01:29:31");
addDurationData("NC_DURATION_1", 6, "15:130", "00:17:10");
addDurationData("NC_DURATION_1", 7, "123123", "34:12:03");
});
it("Duration: Edit Column NC_DURATION_1", () => {
editColumnByName(
"NC_DURATION_1",
"NC_DURATION_EDITED_1",
"h:mm:ss.s (e.g. 3:34.6, 1:23:40.0)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_1");
});
}
{
// h:mm:ss.s
it("Duration: h:mm:ss.s", () => {
addDurationColumn(
"NC_DURATION_2",
"h:mm:ss.s (e.g. 3:34.6, 1:23:40.0)"
);
addDurationData("NC_DURATION_2", 1, "1234", "00:20:34.0");
addDurationData("NC_DURATION_2", 2, "12:34", "00:12:34.0");
addDurationData("NC_DURATION_2", 3, "12:34:56", "12:34:56.0");
addDurationData("NC_DURATION_2", 4, "12:34:999", "12:50:39.0");
addDurationData("NC_DURATION_2", 5, "12:999:56", "28:39:56.0");
addDurationData("NC_DURATION_2", 6, "12:34:56.12", "12:34:56.1");
addDurationData("NC_DURATION_2", 7, "12:34:56.199", "12:34:56.2");
});
it("Duration: Edit Column NC_DURATION_2", () => {
editColumnByName(
"NC_DURATION_2",
"NC_DURATION_EDITED_2",
"h:mm:ss (e.g. 3:45, 1:23:40)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_2");
});
}
{
// h:mm:ss.ss
it("Duration: h:mm:ss.ss", () => {
addDurationColumn(
"NC_DURATION_3",
"h:mm:ss.ss (e.g. 3.45.67, 1:23:40.00)"
);
addDurationData("NC_DURATION_3", 1, "1234", "00:20:34.00");
addDurationData("NC_DURATION_3", 2, "12:34", "00:12:34.00");
addDurationData("NC_DURATION_3", 3, "12:34:56", "12:34:56.00");
addDurationData("NC_DURATION_3", 4, "12:34:999", "12:50:39.00");
addDurationData("NC_DURATION_3", 5, "12:999:56", "28:39:56.00");
addDurationData("NC_DURATION_3", 6, "12:34:56.12", "12:34:56.12");
addDurationData("NC_DURATION_3", 7, "12:34:56.199", "12:34:56.20");
});
it("Duration: Edit Column NC_DURATION_3", () => {
editColumnByName(
"NC_DURATION_3",
"NC_DURATION_EDITED_3",
"h:mm:ss.ss (e.g. 3.45.67, 1:23:40.00)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_3");
});
}
{
// h:mm:ss.sss
it("Duration: h:mm:ss.sss", () => {
addDurationColumn(
"NC_DURATION_4",
"h:mm:ss.sss (e.g. 3.45.678, 1:23:40.000)"
);
addDurationData("NC_DURATION_4", 1, "1234", "00:20:34.000");
addDurationData("NC_DURATION_4", 2, "12:34", "00:12:34.000");
addDurationData("NC_DURATION_4", 3, "12:34:56", "12:34:56.000");
addDurationData("NC_DURATION_4", 4, "12:34:999", "12:50:39.000");
addDurationData("NC_DURATION_4", 5, "12:999:56", "28:39:56.000");
addDurationData("NC_DURATION_4", 6, "12:34:56.12", "12:34:56.012");
addDurationData("NC_DURATION_4", 7, "12:34:56.199", "12:34:56.199");
});
it("Duration: Edit Column NC_DURATION_4", () => {
editColumnByName(
"NC_DURATION_4",
"NC_DURATION_EDITED_4",
"h:mm (e.g. 1:23)"
);
});
it("Duration: Delete column", () => {
deleteColumnByName("NC_DURATION_EDITED_4");
});
}
});
}; };
/** /**
@ -299,4 +318,4 @@ export const genTest = (apiType, dbType) => {
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
*/ */

153
scripts/cypress/integration/common/3f_link_to_another_record.js

@ -6,22 +6,20 @@ export const genTest = (apiType, dbType) => {
if (!isTestSuiteActive(apiType, dbType)) return; if (!isTestSuiteActive(apiType, dbType)) return;
describe(`${apiType.toUpperCase()} api - Link to another record`, () => { describe(`${apiType.toUpperCase()} api - Link to another record`, () => {
function fetchParentFromLabel(label) { function fetchParentFromLabel(label) {
cy.get("label").contains(label).parents(".ant-row").click(); cy.get("label").contains(label).parents(".ant-row").click();
} }
// Insert new row // Insert new row
function addRow(index, cellValue) { function addRow(index, cellValue) {
cy.get('.nc-grid-add-new-cell').should('exist').click(); cy.get(".nc-grid-add-new-cell").should("exist").click();
mainPage.getCell('Title', index) mainPage
.dblclick().then(($el) => { .getCell("Title", index)
cy.wrap($el).find('input') .dblclick()
.clear() .then(($el) => {
.type(`${cellValue}{enter}`); cy.wrap($el).find("input").clear().type(`${cellValue}{enter}`);
}); });
mainPage.getCell('Title', index) mainPage.getCell("Title", index).contains(cellValue).should("exist");
.contains(cellValue).should('exist');
} }
// Insert LTAR column // Insert LTAR column
@ -31,8 +29,9 @@ export const genTest = (apiType, dbType) => {
cy.get(".nc-grid tr > th:last .nc-icon").click(); cy.get(".nc-grid tr > th:last .nc-icon").click();
// Column name // Column name
cy.getActiveMenu(".nc-dropdown-grid-add-column").find('input.nc-column-name-input', { timeout: 3000 }) cy.getActiveMenu(".nc-dropdown-grid-add-column")
.should('exist') .find("input.nc-column-name-input", { timeout: 3000 })
.should("exist")
.clear() .clear()
.type(columnName); .type(columnName);
@ -40,30 +39,27 @@ export const genTest = (apiType, dbType) => {
// cy.get(".nc-column-type-input").last() // cy.get(".nc-column-type-input").last()
// .click() // .click()
// .type("Link"); // .type("Link");
cy.getActiveMenu('.nc-dropdown-grid-add-column') cy.getActiveMenu(".nc-dropdown-grid-add-column")
.find(".nc-column-type-input") .find(".nc-column-type-input")
.last() .last()
.click() .click()
.type("Link") .type("Link");
cy.getActiveSelection('.nc-dropdown-column-type') cy.getActiveSelection(".nc-dropdown-column-type")
.find('.ant-select-item-option') .find(".ant-select-item-option")
.contains("LinkToAnotherRecord") .contains("LinkToAnotherRecord")
.click(); .click();
// relation type (hm/ mm) // relation type (hm/ mm)
cy.get('.nc-ltar-relation-type') cy.get(".nc-ltar-relation-type")
.find('.ant-radio') .find(".ant-radio")
.eq(relationType==='hm'?0:1) .eq(relationType === "hm" ? 0 : 1)
.click(); .click();
// Foreign table // Foreign table
fetchParentFromLabel("Child table"); fetchParentFromLabel("Child table");
cy.get(".nc-ltar-child-table") cy.get(".nc-ltar-child-table").last().click().type(foreignTable);
.last() cy.getActiveSelection(".nc-dropdown-ltar-child-table")
.click() .find(".ant-select-item-option")
.type(foreignTable);
cy.getActiveSelection('.nc-dropdown-ltar-child-table')
.find('.ant-select-item-option')
.contains(foreignTable) .contains(foreignTable)
.click(); .click();
@ -72,7 +68,7 @@ export const genTest = (apiType, dbType) => {
// .contains("Save") // .contains("Save")
// .should('exist') // .should('exist')
// .click(); // .click();
cy.getActiveMenu('.nc-dropdown-grid-add-column') cy.getActiveMenu(".nc-dropdown-grid-add-column")
.find(".ant-btn-primary:visible") .find(".ant-btn-primary:visible")
.contains("Save") .contains("Save")
.click(); .click();
@ -81,16 +77,15 @@ export const genTest = (apiType, dbType) => {
cy.toastWait(`Column created`); cy.toastWait(`Column created`);
// Verify // Verify
cy.get(`th[data-title="${columnName}"]`) cy.get(`th[data-title="${columnName}"]`).should("exist");
.should("exist"); }
};
// Content verification for LTAR cell // Content verification for LTAR cell
// Validates only 1st chip contents // Validates only 1st chip contents
// //
function verifyLtarCell(columnName, index, cellValue) { function verifyLtarCell(columnName, index, cellValue) {
cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`) cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`)
.find('.chip') .find(".chip")
.eq(0) .eq(0)
.contains(cellValue) .contains(cellValue)
.should("exist"); .should("exist");
@ -100,12 +95,14 @@ export const genTest = (apiType, dbType) => {
// //
function ltarUnlink(columnName, index) { function ltarUnlink(columnName, index) {
// Click on cell to enable unlink icon // Click on cell to enable unlink icon
cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`).last() cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`)
.click() .last()
.click();
// Click on unlink icon // Click on unlink icon
cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`).last() cy.get(`:nth-child(${index}) > [data-title="${columnName}"]`)
.find('.unlink-icon') .last()
.find(".unlink-icon")
.should("exist") .should("exist")
.click(); .click();
@ -120,7 +117,7 @@ export const genTest = (apiType, dbType) => {
afterEach(() => { afterEach(() => {
cy.saveLocalStorage(); cy.saveLocalStorage();
}) });
beforeEach(() => { beforeEach(() => {
cy.restoreLocalStorage(); cy.restoreLocalStorage();
@ -174,7 +171,8 @@ export const genTest = (apiType, dbType) => {
cy.get(".nc-add-new-row-btn").click(); cy.get(".nc-add-new-row-btn").click();
// Title // Title
cy.get(".nc-expand-col-Title").find(".nc-cell > input") cy.get(".nc-expand-col-Title")
.find(".nc-cell > input")
.should("exist") .should("exist")
.first() .first()
.clear() .clear()
@ -186,80 +184,84 @@ export const genTest = (apiType, dbType) => {
// //
// BT // BT
cy.get(".nc-expand-col-Sheet1").find(".nc-action-icon") cy.get(".nc-expand-col-Sheet1")
.find(".nc-action-icon")
.should("exist") .should("exist")
.click({ force: true }); .click({ force: true });
cy.wait(1000); cy.wait(1000);
cy.getActiveModal(".nc-modal-link-record") cy.getActiveModal(".nc-modal-link-record")
.find('.ant-card').should('exist') .find(".ant-card")
.eq(0).click(); .should("exist")
.eq(0)
.click();
// MM // MM
cy.get(".nc-expand-col-Sheet1.List").find(".ant-btn-primary").click(); cy.get(".nc-expand-col-Sheet1.List").find(".ant-btn-primary").click();
cy.wait(1000); cy.wait(1000);
cy.getActiveModal(".nc-modal-link-record") cy.getActiveModal(".nc-modal-link-record")
.find('.ant-card').should('exist') .find(".ant-card")
.eq(0).click(); .should("exist")
.eq(0)
.click();
// HM // HM
cy.get(".nc-expand-col-Link2-1hm") cy.get(".nc-expand-col-Link2-1hm").find(".ant-btn-primary").click();
.find(".ant-btn-primary")
.click();
cy.wait(1000); cy.wait(1000);
cy.getActiveModal() cy.getActiveModal().find(".ant-card").should("exist").eq(0).click();
.find('.ant-card').should('exist')
.eq(0).click();
// Save row // Save row
cy.getActiveDrawer() cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button") .find("button")
.contains("Save row") .contains("Save row")
.click({ force: true }); .should("exist")
.click();
// Toast // Toast
cy.toastWait("updated successfully"); cy.toastWait("updated successfully");
// Close modal // Close modal
cy.get("body").type("{esc}"); cy.get("body").type("{esc}");
}) });
// In cell insert // In cell insert
it("Add HM, BT, MM Link, In cell form", () => { it("Add HM, BT, MM Link, In cell form", () => {
// Insert row with `Title` field, rest of links are empty // Insert row with `Title` field, rest of links are empty
addRow(2, "2b"); addRow(2, "2b");
// BT // BT
mainPage.getCell("Sheet1", 2) mainPage
.getCell("Sheet1", 2)
.find(".nc-action-icon") .find(".nc-action-icon")
.click({ force: true }); .click({ force: true });
cy.getActiveModal(".nc-modal-link-record") cy.getActiveModal(".nc-modal-link-record")
.find('.ant-card') .find(".ant-card")
.should('exist') .should("exist")
.eq(1) .eq(1)
.click(); .click();
cy.wait(1000); cy.wait(1000);
// MM // MM
mainPage.getCell("Sheet1 List", 2) mainPage
.getCell("Sheet1 List", 2)
.find(".nc-action-icon") .find(".nc-action-icon")
.last() .last()
.click({ force: true }); .click({ force: true });
cy.getActiveModal(".nc-modal-link-record") cy.getActiveModal(".nc-modal-link-record")
.find('.ant-card') .find(".ant-card")
.should('exist') .should("exist")
.eq(1) .eq(1)
.click(); .click();
cy.wait(1000); cy.wait(1000);
// HM // HM
mainPage.getCell("Link2-1hm", 2) mainPage
.getCell("Link2-1hm", 2)
.find(".nc-action-icon") .find(".nc-action-icon")
.last() .last()
.click({ force: true }); .click({ force: true });
cy.getActiveModal(".nc-modal-link-record") cy.getActiveModal(".nc-modal-link-record")
.find('.ant-card') .find(".ant-card")
.should('exist') .should("exist")
.eq(1) .eq(1)
.click(); .click();
}); });
@ -277,31 +279,36 @@ export const genTest = (apiType, dbType) => {
.click({ force: true }); .click({ force: true });
cy.wait(1000); cy.wait(1000);
cy.getActiveModal(".nc-modal-link-record") cy.getActiveModal(".nc-modal-link-record")
.find('.ant-card').should('exist') .find(".ant-card")
.eq(2).click(); .should("exist")
.eq(2)
.click();
// MM // MM
cy.get(".nc-expand-col-Sheet1.List") cy.get(".nc-expand-col-Sheet1.List").find(".ant-btn-primary").click();
.find(".ant-btn-primary").click();
cy.wait(1000); cy.wait(1000);
cy.getActiveModal(".nc-modal-link-record") cy.getActiveModal(".nc-modal-link-record")
.find('.ant-card').should('exist') .find(".ant-card")
.eq(2).click(); .should("exist")
.eq(2)
.click();
cy.wait(1000); cy.wait(1000);
// HM // HM
cy.get(".nc-expand-col-Link2-1hm") cy.get(".nc-expand-col-Link2-1hm").find(".ant-btn-primary").click();
.find(".ant-btn-primary").click();
cy.wait(1000); cy.wait(1000);
cy.getActiveModal(".nc-modal-link-record") cy.getActiveModal(".nc-modal-link-record")
.find('.ant-card').should('exist') .find(".ant-card")
.eq(2).click(); .should("exist")
.eq(2)
.click();
cy.wait(1000); cy.wait(1000);
cy.getActiveDrawer() cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button") .find("button")
.contains("Save row") .contains("Save row")
.click({ force: true }); .should("exist")
.click();
// cy.toastWait("updated successfully"); // cy.toastWait("updated successfully");
cy.toastWait("No columns to update"); cy.toastWait("No columns to update");
@ -332,7 +339,7 @@ export const genTest = (apiType, dbType) => {
verifyLtarCell("Sheet2", 2, "2b"); verifyLtarCell("Sheet2", 2, "2b");
verifyLtarCell("Sheet2", 3, "2c"); verifyLtarCell("Sheet2", 3, "2c");
cy.closeTableTab("Sheet1"); cy.closeTableTab("Sheet1");
}) });
it("Unlink", () => { it("Unlink", () => {
cy.openTableTab("Sheet1", 3); cy.openTableTab("Sheet1", 3);

12
scripts/cypress/integration/common/4f_grid_view_share.js

@ -396,9 +396,17 @@ export const genTest = (apiType, dbType) => {
.first() .first()
.clear({ force: true }) .clear({ force: true })
.type("a"); .type("a");
cy.getActiveDrawer().find("button").contains("Save row").click(); cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button")
.contains("Save row")
.should("exist")
.click();
cy.toastWait("updated successfully"); cy.toastWait("updated successfully");
cy.getActiveDrawer().find("button").contains("Cancel").click(); cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button")
.contains("Cancel")
.should("exist")
.click();
// add column // add column
mainPage.addColumn("dummy", "Country"); mainPage.addColumn("dummy", "Country");

3
scripts/cypress/integration/common/8a_webhook.js

@ -205,7 +205,8 @@ function updateRow(index, cellValue) {
cy.getActiveDrawer(".nc-drawer-expanded-form") cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button") .find("button")
.contains("Save row") .contains("Save row")
.click({ force: true }); .should("exist")
.click();
// partial toast message // partial toast message
cy.toastWait("updated successfully"); cy.toastWait("updated successfully");

512
scripts/cypress/integration/spec/roleValidation.spec.js

@ -7,151 +7,187 @@ import { roles } from "../../support/page_objects/projectConstants";
// 3. Preview mode menu // 3. Preview mode menu
// //
export function _advSettings(roleType, mode) { export function _advSettings(roleType, mode) {
cy.log(roleType, mode); cy.log(roleType, mode);
if(mode === 'baseShare') { if (mode === "baseShare") {
// open modal
// open modal cy.get(".nc-project-menu").should("exist").click();
cy.get('.nc-project-menu').should('exist').click() cy.getActiveMenu(".nc-dropdown-project-menu")
cy.getActiveMenu(".nc-dropdown-project-menu").find(`[data-menu-id="language"]`).should('exist') .find(`[data-menu-id="language"]`)
.should("exist");
// click again to close modal
cy.get('.nc-project-menu').should('exist').click() // click again to close modal
return; cy.get(".nc-project-menu").should("exist").click();
} return;
}
let validationString =
true == roles[roleType].validations.advSettings ? "exist" : "not.exist"; let validationString =
true == roles[roleType].validations.advSettings ? "exist" : "not.exist";
// cy.get(".nc-team-settings").should(validationString);
cy.get('.nc-project-menu').should('exist').click() // cy.get(".nc-team-settings").should(validationString);
cy.getActiveMenu(".nc-dropdown-project-menu").find(`[data-menu-id="preview-as"]`).should(validationString) cy.get(".nc-project-menu").should("exist").click();
cy.getActiveMenu(".nc-dropdown-project-menu").find(`[data-menu-id="teamAndSettings"]:visible`).should(validationString) cy.getActiveMenu(".nc-dropdown-project-menu")
.find(`[data-menu-id="preview-as"]`)
if (true === roles[roleType].validations.advSettings) { .should(validationString);
cy.getActiveMenu(".nc-dropdown-project-menu").find(`[data-menu-id="teamAndSettings"]:visible`).should(validationString).click() cy.getActiveMenu(".nc-dropdown-project-menu")
.find(`[data-menu-id="teamAndSettings"]:visible`)
cy.get(`[data-menu-id="teamAndAuth"]`).should('exist') .should(validationString);
cy.get(`[data-menu-id="appStore"]`).should('exist')
cy.get(`[data-menu-id="metaData"]`).should('exist') if (true === roles[roleType].validations.advSettings) {
cy.get(`[data-menu-id="audit"]`).should('exist') cy.getActiveMenu(".nc-dropdown-project-menu")
.find(`[data-menu-id="teamAndSettings"]:visible`)
settingsPage.closeMenu() .should(validationString)
} else { .click();
cy.get('.nc-project-menu').should('exist').click()
} cy.get(`[data-menu-id="teamAndAuth"]`).should("exist");
cy.get(`[data-menu-id="appStore"]`).should("exist");
// float menu in preview mode cy.get(`[data-menu-id="metaData"]`).should("exist");
if ("preview" === mode) { cy.get(`[data-menu-id="audit"]`).should("exist");
cy.get(".nc-floating-preview-btn").should("exist");
cy.get('.nc-floating-preview-btn') settingsPage.closeMenu();
.find(`[type="radio"][value="${roles[roleType].name}"]`) } else {
.should("be.checked"); cy.get(".nc-project-menu").should("exist").click();
} }
// cy.get("body").click("bottomRight"); // float menu in preview mode
if ("preview" === mode) {
cy.get(".nc-floating-preview-btn").should("exist");
cy.get(".nc-floating-preview-btn")
.find(`[type="radio"][value="${roles[roleType].name}"]`)
.should("be.checked");
}
// cy.get("body").click("bottomRight");
} }
export function _editSchema(roleType, mode) { export function _editSchema(roleType, mode) {
let columnName = "City"; let columnName = "City";
let validationString = let validationString =
true === roles[roleType].validations.editSchema ? "exist" : "not.exist"; true === roles[roleType].validations.editSchema ? "exist" : "not.exist";
cy.openTableTab(columnName, 25); cy.openTableTab(columnName, 25);
// create table // create table
cy.get(`.nc-add-new-table`).should(validationString); cy.get(`.nc-add-new-table`).should(validationString);
// delete table option // delete table option
cy.get(`.nc-project-tree-tbl-City`).should("exist").rightclick(); cy.get(`.nc-project-tree-tbl-City`).should("exist").rightclick();
cy.get(".ant-dropdown-content:visible").should(validationString); cy.get(".ant-dropdown-content:visible").should(validationString);
if(validationString === "exist"){ if (validationString === "exist") {
cy.getActiveMenu(".nc-dropdown-tree-view-context-menu").find('[role="menuitem"]').contains("Delete").should("exist"); cy.getActiveMenu(".nc-dropdown-tree-view-context-menu")
cy.getActiveMenu(".nc-dropdown-tree-view-context-menu").find('[role="menuitem"]').contains("Rename").should("exist"); .find('[role="menuitem"]')
.contains("Delete")
// click on a cell to close table context menu .should("exist");
mainPage.getCell(columnName, 3).click(); cy.getActiveMenu(".nc-dropdown-tree-view-context-menu")
} .find('[role="menuitem"]')
.contains("Rename")
// add new column option .should("exist");
//
cy.get(".nc-column-add").should(validationString); // click on a cell to close table context menu
mainPage.getCell(columnName, 3).click();
// update column (edit/ delete menu) }
cy.get('.nc-ui-dt-dropdown').should(validationString)
// add new column option
if(validationString === "exist"){ //
cy.get('.nc-import-menu').should('exist').click(); cy.get(".nc-column-add").should(validationString);
cy.getActiveMenu(".nc-dropdown-import-menu").should('exist')
cy.getActiveMenu(".nc-dropdown-import-menu").find('.ant-dropdown-menu-item').contains('Airtable') // update column (edit/ delete menu)
cy.getActiveMenu(".nc-dropdown-import-menu").find('.ant-dropdown-menu-item').contains('CSV file') cy.get(".nc-ui-dt-dropdown").should(validationString);
cy.getActiveMenu(".nc-dropdown-import-menu").find('.ant-dropdown-menu-item').contains('JSON file')
cy.getActiveMenu(".nc-dropdown-import-menu").find('.ant-dropdown-menu-item').contains('Microsoft Excel') if (validationString === "exist") {
} cy.get(".nc-import-menu").should("exist").click();
cy.getActiveMenu(".nc-dropdown-import-menu").should("exist");
cy.getActiveMenu(".nc-dropdown-import-menu")
.find(".ant-dropdown-menu-item")
.contains("Airtable");
cy.getActiveMenu(".nc-dropdown-import-menu")
.find(".ant-dropdown-menu-item")
.contains("CSV file");
cy.getActiveMenu(".nc-dropdown-import-menu")
.find(".ant-dropdown-menu-item")
.contains("JSON file");
cy.getActiveMenu(".nc-dropdown-import-menu")
.find(".ant-dropdown-menu-item")
.contains("Microsoft Excel");
}
} }
export function _editData(roleType, mode) { export function _editData(roleType, mode) {
let columnName = "City"; let columnName = "City";
let validationString = let validationString =
true === roles[roleType].validations.editData ? "exist" : "not.exist"; true === roles[roleType].validations.editData ? "exist" : "not.exist";
cy.openTableTab(columnName, 25);
cy.openTableTab(columnName, 25); // add row button
cy.get(".nc-add-new-row-btn:visible").should(validationString);
// add row button // add button at bottom of page
cy.get('.nc-add-new-row-btn:visible').should(validationString); mainPage.getCell(columnName, 25).scrollIntoView();
cy.get(".nc-grid-add-new-cell:visible").should(validationString);
// add button at bottom of page // update row option (right click)
mainPage.getCell(columnName, 25).scrollIntoView(); //
cy.get('.nc-grid-add-new-cell:visible').should(validationString); mainPage.getCell("City", 5).rightclick();
cy.wait(100);
cy.get(".ant-dropdown-content:visible").should(validationString);
// update row option (right click) if (validationString === "exist") {
// right click options will exist (only for 'exist' case)
// //
mainPage.getCell("City", 5).rightclick(); cy.getActiveMenu(".nc-dropdown-grid-context-menu")
cy.wait(100); .contains("Insert New Row")
cy.get(".ant-dropdown-content:visible").should(validationString); .should(validationString);
cy.getActiveMenu(".nc-dropdown-grid-context-menu")
if (validationString === "exist") { .contains("Clear cell")
// right click options will exist (only for 'exist' case) .should(validationString);
// cy.getActiveMenu(".nc-dropdown-grid-context-menu")
cy.getActiveMenu(".nc-dropdown-grid-context-menu").contains("Insert New Row").should(validationString); .contains("Delete Row")
cy.getActiveMenu(".nc-dropdown-grid-context-menu").contains("Clear cell").should(validationString); .should(validationString);
cy.getActiveMenu(".nc-dropdown-grid-context-menu").contains("Delete Row").should(validationString); cy.getActiveMenu(".nc-dropdown-grid-context-menu")
cy.getActiveMenu(".nc-dropdown-grid-context-menu").contains("Delete Selected Rows").should(validationString); .contains("Delete Selected Rows")
.should(validationString);
// cy.get("body").type("{esc}");
mainPage.getCell("City", 13).click(); // cy.get("body").type("{esc}");
mainPage.getCell("City", 13).click();
// update cell contents option using row expander should be enabled
// // update cell contents option using row expander should be enabled
mainPage //
.getRow(1) mainPage
.find('.nc-row-no').should('exist') .getRow(1)
.eq(0) .find(".nc-row-no")
.trigger('mouseover', { force: true }) .should("exist")
cy.get(".nc-row-expand") .eq(0)
.should("exist") .trigger("mouseover", { force: true });
.eq(10) cy.get(".nc-row-expand").should("exist").eq(10).click({ force: true });
.click({ force: true }); cy.getActiveDrawer(".nc-drawer-expanded-form")
cy.getActiveDrawer().find("button").contains("Save row").should("exist"); .find("button")
cy.getActiveDrawer().find("button").contains("Cancel").should("exist").click(); .contains("Save row")
} else { .should("exist");
// update cell contents option using row expander should be disabled cy.getActiveDrawer(".nc-drawer-expanded-form")
// .find("button")
cy.get(".nc-row-expand") .contains("Cancel")
.should("exist") .should("exist")
.eq(10) .click();
.click({ force: true }); } else {
cy.getActiveDrawer().find("button:disabled").contains("Save row").should("exist"); // update cell contents option using row expander should be disabled
cy.getActiveDrawer().find("button").contains("Cancel").should("exist").click();
}
// double click cell entries to edit
// //
mainPage.getCell("City", 5) cy.get(".nc-row-expand").should("exist").eq(10).click({ force: true });
.dblclick() cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("input") .find("button:disabled")
.should(validationString); .contains("Save row")
.should("exist");
cy.getActiveDrawer(".nc-drawer-expanded-form")
.find("button")
.contains("Cancel")
.should("exist")
.click();
}
// double click cell entries to edit
//
mainPage.getCell("City", 5).dblclick().find("input").should(validationString);
} }
// read &/ update comment // read &/ update comment
@ -159,136 +195,138 @@ export function _editData(roleType, mode) {
// Everyone else: read &/ update // Everyone else: read &/ update
// //
export function _editComment(roleType, mode) { export function _editComment(roleType, mode) {
let columnName = "City"; let columnName = "City";
let validationString = let validationString =
true === roles[roleType].validations.editComment true === roles[roleType].validations.editComment
? "Comment added successfully" ? "Comment added successfully"
: "Not allowed"; : "Not allowed";
cy.openTableTab(columnName, 25); cy.openTableTab(columnName, 25);
cy.wait(1000); cy.wait(1000);
// click on comment icon & type comment // click on comment icon & type comment
// //
cy.get(".nc-row-expand") cy.get(".nc-row-expand").should("exist").eq(10).click({ force: true });
.should("exist")
.eq(10)
.click({force:true});
// Expected response: // Expected response:
// Viewer: Not able to see comment option // Viewer: Not able to see comment option
// Everyone else: Comment added/read successfully // Everyone else: Comment added/read successfully
// //
cy.wait(3000);
if ("viewer" === roleType) {
cy.getActiveDrawer(".nc-drawer-expanded-form")
.should("exist")
.find(".nc-toggle-comments")
.should("not.exist");
} else {
cy.getActiveDrawer(".nc-drawer-expanded-form")
.should("exist")
.find(".nc-toggle-comments")
.should("exist")
.click();
cy.wait(3000); cy.getActiveDrawer(".nc-drawer-expanded-form")
.find(".nc-comment-box")
if ("viewer" === roleType) { .should("exist")
cy.getActiveDrawer() .type("Comment-1{enter}");
.should('exist') // cy.toastWait('Comment added successfully')
.find(".nc-toggle-comments") cy.getActiveDrawer(".nc-drawer-expanded-form")
.should("not.exist"); .find(".nc-toggle-comments")
} else { .click();
cy.getActiveDrawer() }
.should('exist')
.find(".nc-toggle-comments") cy.getActiveDrawer(".nc-drawer-expanded-form")
.should("exist") .find("button")
.click(); .contains("Cancel")
.should("exist")
cy.getActiveDrawer().find(".nc-comment-box").should('exist').type("Comment-1{enter}"); .click();
// cy.toastWait('Comment added successfully')
cy.getActiveDrawer().find(".nc-toggle-comments").click();
}
cy.getActiveDrawer()
.find("button")
.contains("Cancel")
.should("exist")
.click();
} }
// right navigation menu bar // right navigation menu bar
// Editor/Viewer/Commenter : can only view 'existing' views // Editor/Viewer/Commenter : can only view 'existing' views
// Rest: can create/edit // Rest: can create/edit
export function _viewMenu(roleType, mode) { export function _viewMenu(roleType, mode) {
let columnName = "City"; let columnName = "City";
// Lock, Download, Upload // Lock, Download, Upload
let menuWithSubmenuCount = 3; let menuWithSubmenuCount = 3;
// share view list, webhook // share view list, webhook
let menuWithoutSubmenuCount = 3; let menuWithoutSubmenuCount = 3;
cy.openTableTab(columnName, 25); cy.openTableTab(columnName, 25);
let validationString = let validationString =
true === roles[roleType].validations.shareView ? "exist" : "not.exist"; true === roles[roleType].validations.shareView ? "exist" : "not.exist";
if (roleType === "editor") { if (roleType === "editor") {
// Download / Upload CSV // Download / Upload CSV
menuWithSubmenuCount = 2; menuWithSubmenuCount = 2;
// Get API Snippet // Get API Snippet
menuWithoutSubmenuCount = 1 menuWithoutSubmenuCount = 1;
if(mode === 'baseShare') menuWithoutSubmenuCount = 0 if (mode === "baseShare") menuWithoutSubmenuCount = 0;
} else if (roleType === "commenter" || roleType === "viewer") { } else if (roleType === "commenter" || roleType === "viewer") {
// Download CSV & Download excel // Download CSV & Download excel
menuWithSubmenuCount = 0; menuWithSubmenuCount = 0;
menuWithoutSubmenuCount = 2 menuWithoutSubmenuCount = 2;
} }
// view list field (default GRID view) // view list field (default GRID view)
cy.get(`.nc-view-item`).should("exist"); cy.get(`.nc-view-item`).should("exist");
// view create option, exists only for owner/ creator // view create option, exists only for owner/ creator
cy.get(`.nc-create-grid-view`).should(validationString); cy.get(`.nc-create-grid-view`).should(validationString);
cy.get(`.nc-create-gallery-view`).should(validationString); cy.get(`.nc-create-gallery-view`).should(validationString);
cy.get(`.nc-create-form-view`).should(validationString); cy.get(`.nc-create-form-view`).should(validationString);
// share view permissions are role specific // share view permissions are role specific
// actions menu (more), only download csv should be visible for non-previlaged users // actions menu (more), only download csv should be visible for non-previlaged users
cy.get(".nc-actions-menu-btn").click(); cy.get(".nc-actions-menu-btn").click();
cy.getActiveMenu(".nc-dropdown-actions-menu") cy.getActiveMenu(".nc-dropdown-actions-menu")
.find('.ant-dropdown-menu-submenu:visible') .find(".ant-dropdown-menu-submenu:visible")
.should("have.length", menuWithSubmenuCount); .should("have.length", menuWithSubmenuCount);
cy.getActiveMenu(".nc-dropdown-actions-menu") cy.getActiveMenu(".nc-dropdown-actions-menu")
.find('.ant-dropdown-menu-item:visible') .find(".ant-dropdown-menu-item:visible")
.should("have.length", menuWithoutSubmenuCount); .should("have.length", menuWithoutSubmenuCount);
// click again to close menu // click again to close menu
cy.get(".nc-actions-menu-btn").click(); cy.get(".nc-actions-menu-btn").click();
} }
export function _topRightMenu(roleType, mode) { export function _topRightMenu(roleType, mode) {
// kludge; download csv menu persists until clicked // kludge; download csv menu persists until clicked
let columnName = "City"; let columnName = "City";
// cy.closeTableTab(columnName); // cy.closeTableTab(columnName);
// cy.openTableTab(columnName, 25); // cy.openTableTab(columnName, 25);
let validationString = let validationString =
true == roles[roleType].validations.shareView ? "exist" : "not.exist"; true == roles[roleType].validations.shareView ? "exist" : "not.exist";
cy.get(`.nc-share-base`).should(validationString); cy.get(`.nc-share-base`).should(validationString);
cy.get(".nc-menu-translate").should("exist"); cy.get(".nc-menu-translate").should("exist");
cy.get(".nc-menu-accounts").should("exist"); cy.get(".nc-menu-accounts").should("exist");
} }
// Access control list // Access control list
// //
export function disableTableAccess(tbl, role) { export function disableTableAccess(tbl, role) {
const cls = `.nc-acl-${tbl}-${role}-chkbox`; const cls = `.nc-acl-${tbl}-${role}-chkbox`;
cy.get(cls).find("input").should("be.checked").click({ force: true }); cy.get(cls).find("input").should("be.checked").click({ force: true });
cy.get(cls).find("input").should("not.be.checked"); cy.get(cls).find("input").should("not.be.checked");
} }
export function enableTableAccess(tbl, role) { export function enableTableAccess(tbl, role) {
const cls = `.nc-acl-${tbl}-${role}-chkbox`; const cls = `.nc-acl-${tbl}-${role}-chkbox`;
cy.get(cls).find("input").should("not.be.checked").click({ force: true }); cy.get(cls).find("input").should("not.be.checked").click({ force: true });
cy.get(cls).find("input").should("be.checked"); cy.get(cls).find("input").should("be.checked");
} }
export function _accessControl(roleType, previewMode) { export function _accessControl(roleType, previewMode) {
let validationString = roleType === "creator" ? "exist" : "not.exist"; let validationString = roleType === "creator" ? "exist" : "not.exist";
cy.get(`.nc-project-tree-tbl-Language`).should(validationString) cy.get(`.nc-project-tree-tbl-Language`).should(validationString);
cy.get(`.nc-project-tree-tbl-CustomerList`).should(validationString) cy.get(`.nc-project-tree-tbl-CustomerList`).should(validationString);
} }

33
scripts/cypress/integration/test/restTableOps.js

@ -1,4 +1,3 @@
let t01 = require("../common/00_pre_configurations"); let t01 = require("../common/00_pre_configurations");
let t1a = require("../common/1a_table_operations"); let t1a = require("../common/1a_table_operations");
let t1b = require("../common/1b_table_column_operations"); let t1b = require("../common/1b_table_column_operations");
@ -14,26 +13,26 @@ let t3d = require("../common/3d_rollup_column");
let t3e = require("../common/3e_duration_column"); let t3e = require("../common/3e_duration_column");
let t3f = require("../common/3f_link_to_another_record"); let t3f = require("../common/3f_link_to_another_record");
const { const {
setCurrentMode, setCurrentMode,
} = require("../../support/page_objects/projectConstants"); } = require("../../support/page_objects/projectConstants");
const nocoTestSuite = (apiType, dbType) => { const nocoTestSuite = (apiType, dbType) => {
setCurrentMode(apiType, dbType); setCurrentMode(apiType, dbType);
t01.genTest(apiType, dbType); t01.genTest(apiType, dbType);
t1a.genTest(apiType, dbType); t1a.genTest(apiType, dbType);
t1b.genTest(apiType, dbType); t1b.genTest(apiType, dbType);
t1c.genTest(apiType, dbType); t1c.genTest(apiType, dbType);
// NcGUI v2 t1d.genTest(apiType, dbType); // NcGUI v2 t1d.genTest(apiType, dbType);
t1e.genTest(apiType, dbType); t1e.genTest(apiType, dbType);
t2a.genTest(apiType, dbType); t2a.genTest(apiType, dbType);
t2b.genTest(apiType, dbType); t2b.genTest(apiType, dbType);
t3a.genTest(apiType, dbType); t3a.genTest(apiType, dbType);
t3b.genTest(apiType, dbType); t3b.genTest(apiType, dbType);
t3c.genTest(apiType, dbType); t3c.genTest(apiType, dbType);
t3d.genTest(apiType, dbType); t3d.genTest(apiType, dbType);
// NcGUI v2 t3e.genTest(apiType, dbType); // NcGUI v2 t3e.genTest(apiType, dbType);
t3f.genTest(apiType, dbType); t3f.genTest(apiType, dbType);
}; };
nocoTestSuite("rest", "mysql"); nocoTestSuite("rest", "mysql");

Loading…
Cancel
Save