mirror of https://github.com/nocodb/nocodb
181 lines
6.2 KiB
181 lines
6.2 KiB
// 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().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 <pranavxc@gmail.com> |
|
* @author Raju Udava <sivadstala@gmail.com> |
|
* |
|
* @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 <http://www.gnu.org/licenses/>. |
|
* |
|
*/
|
|
|