// pre-requisite: // user@nocodb.com signed up as admin // sakilaDb database created already import { loginPage, projectsPage } from "../../support/page_objects/navigation"; import { mainPage, settingsPage } from "../../support/page_objects/mainPage"; import { isPostgres, isTestSuiteActive, isXcdb, roles, } from "../../support/page_objects/projectConstants"; import { _advSettings, _editSchema, _editData, _editComment, _viewMenu, _topRightMenu, enableTableAccess, _accessControl, } from "../spec/roleValidation.spec"; export const genTest = (apiType, dbType, roleType) => { if (!isTestSuiteActive(apiType, dbType)) return; /////////////////////////////////////////////////////////// //// Test Suite describe("Role preview validations", () => { // Sign in/ open project before(() => { loginPage.loginAndOpenProject(apiType, dbType); cy.openTableTab("City", 25); cy.wait(3000); settingsPage.openProjectMenu(); cy.getActiveMenu(".nc-dropdown-project-menu") .find(`[data-submenu-id="preview-as"]`) .should("exist") .click(); cy.wait(1000); cy.get(".ant-dropdown-menu-submenu") .eq(4) .find(`[data-menu-id="editor"]`) .should("exist") .click(); cy.wait(10000); cy.saveLocalStorage(); }); beforeEach(() => { cy.restoreLocalStorage(); }); after(() => { // cy.get(".nc-preview-reset").click({ force: true }); cy.get(".mdi-exit-to-app").click(); // cy.wait(20000) // wait for page rendering to complete cy.get(".nc-grid-row", { timeout: 25000 }).should("have.length", 25); // cy.get('.nc-preview-reset:visible').should('not-exist') // mainPage.navigationDraw(mainPage.ROLE_VIEW).contains('Reset Preview').should('not.exist') // cy.get('.nc-preview-reset').should('not-exist') cy.closeTableTab("City"); // open Project metadata tab // mainPage.navigationDraw(mainPage.PROJ_METADATA).click(); // cy.get(".nc-exp-imp-metadata").dblclick({ force: true }); cy.get(".nc-ui-acl-tab").click({ force: true }); // validate if it has 19 entries representing tables & views if (isPostgres()) cy.get(".nc-acl-table-row").should("have.length", 24); else if (isXcdb()) cy.get(".nc-acl-table-row").should("have.length", 19); else cy.get(".nc-acl-table-row").should("have.length", 19); // restore access // enableTableAccess("language", "editor"); enableTableAccess("language", "commenter"); enableTableAccess("language", "viewer"); enableTableAccess("customerlist", "editor"); enableTableAccess("customerlist", "commenter"); enableTableAccess("customerlist", "viewer"); }); const genTestSub = (roleType) => { it(`Role preview: ${roleType}: Enable preview`, () => { cy.get(".nc-floating-preview-btn", { timeout: 30000 }).should("exist"); cy.get(".nc-floating-preview-btn") .find(`[type="radio"][value="${roleType}"]`) .should("exist") .click(); cy.wait(5000); cy.saveLocalStorage(); }); it(`Role preview: ${roleType}: Advance settings`, () => { // project configuration settings // _advSettings(roleType, "preview"); }); it(`Role preview: ${roleType}: Access control`, () => { // Access control validation // _accessControl(roleType, "preview"); }); it(`Role preview: ${roleType}: Edit data`, () => { // Table data related validations // - Add/delete/modify row // _editData(roleType, "preview"); }); it(`Role preview: ${roleType}: Edit comment`, () => { // read &/ update comment // Viewer: not allowed to read // Everyone else: read &/ update // _editComment(roleType, "preview"); }); it(`Role preview: ${roleType}: Preview menu`, () => { // right navigation menu bar // Editor/Viewer/Commenter : can only view 'existing' views // Rest: can create/edit _viewMenu(roleType, "preview"); }); it(`Role preview: ${roleType}: Top Right Menu bar`, () => { // Share button is conditional // Rest are static/ mandatory // _topRightMenu(roleType, "preview"); }); it(`Role preview: ${roleType}: Edit Schema`, () => { // Schema related validations // - Add/delete table // - Add/Update/delete column // _editSchema(roleType, "preview"); }); }; genTestSub("editor"); genTestSub("commenter"); genTestSub("viewer"); }); }; /** * @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 . * */