From 9ce4fa8a84b9c15f54dc84b91b1991bd75e6f540 Mon Sep 17 00:00:00 2001 From: Sachin Chaurasiya Date: Thu, 15 Dec 2022 12:40:32 +0530 Subject: [PATCH] e2e: DataConsumer Role test (#9298) * e2e: DataConsumer Role test * address comment --- .../e2e/Features/DataConsumerRole.spec.js | 288 ++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 openmetadata-ui/src/main/resources/ui/cypress/e2e/Features/DataConsumerRole.spec.js diff --git a/openmetadata-ui/src/main/resources/ui/cypress/e2e/Features/DataConsumerRole.spec.js b/openmetadata-ui/src/main/resources/ui/cypress/e2e/Features/DataConsumerRole.spec.js new file mode 100644 index 00000000000..d3e547de787 --- /dev/null +++ b/openmetadata-ui/src/main/resources/ui/cypress/e2e/Features/DataConsumerRole.spec.js @@ -0,0 +1,288 @@ +/* + * Copyright 2021 Collate + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + interceptURL, login, verifyResponseStatusCode, visitEntityDetailsPage +} from '../../common/common'; +import { + BASE_URL, SEARCH_ENTITY_DASHBOARD, SEARCH_ENTITY_PIPELINE, SEARCH_ENTITY_TABLE, + SEARCH_ENTITY_TOPIC +} from '../../constants/constants'; + +import { NAVBAR_DETAILS } from '../../constants/redirections.constants'; + +const CREDENTIALS = { + firstName: 'Test_Data_Consumer', + lastName: 'User_Data_consumer', + email: 'test_dataconsumer@openmetadata.org', + password: 'User@OMD123', +}; + +const policy = 'Data Consumer'; +const ENTITIES = { + table: SEARCH_ENTITY_TABLE.table_1, + topic: SEARCH_ENTITY_TOPIC.topic_1, + dashboard: SEARCH_ENTITY_DASHBOARD.dashboard_1, + pipeline: SEARCH_ENTITY_PIPELINE.pipeline_1, +}; + +const glossary = NAVBAR_DETAILS.glossary; +const tag = NAVBAR_DETAILS.tags; + +const ID = { + teams: { + testid: '[data-menu-id*="teams"]', + button: 'add-team', + }, + users: { + testid: '[data-menu-id*="users"]', + button: 'add-user', + }, + admins: { + testid: '[data-menu-id*="admins"]', + button: 'add-user', + }, + roles: { + testid: '[data-menu-id*="roles"]', + button: 'add-role', + }, + policies: { + testid: '[data-menu-id*="policies"]', + button: 'add-policy', + }, + databases: { + testid: '[data-menu-id*="databases"]', + button: 'add-service-button', + }, + messaging: { + testid: '[data-menu-id*="messaging"]', + button: 'add-service-button', + }, + dashboard: { + testid: '[data-menu-id*="services.dashboards"]', + button: 'add-service-button', + }, + pipelines: { + testid: '[data-menu-id*="services.pipelines"]', + button: 'add-service-button', + }, + mlmodels: { + testid: '[data-menu-id*="services.mlModels"]', + button: 'add-service-button', + }, + metadata: { + testid: '[data-menu-id*="metadata"]', + button: 'add-service-button', + }, + customAttributesTable: { + testid: '[data-menu-id*="tables"]', + button: 'add-field-button', + }, + customAttributesTopics: { + testid: '[data-menu-id*="topics"]', + button: 'add-field-button', + }, + customAttributesDashboards: { + testid: '[data-menu-id*="customAttributes.dashboards"]', + button: 'add-field-button', + }, + customAttributesPipelines: { + testid: '[data-menu-id*="customAttributes.pipelines"]', + button: 'add-field-button', + }, + customAttributesMlModels: { + testid: '[data-menu-id*="customAttributes.mlModels"]', + button: 'add-field-button', + }, + bots: { + testid: '[data-menu-id*="bots"]', + button: 'add-bot', + }, +}; + +describe('DataConsumer Edit policy should work properly', () => { + it('Create a new account and assign Data consumer role to the user', () => { + interceptURL('GET', 'api/v1/config/auth', 'getLoginPage'); + cy.visit('/'); + verifyResponseStatusCode('@getLoginPage', 200); + //Click on create account button + cy.get('[data-testid="signup"]') + .scrollIntoView() + .should('be.visible') + .click(); + //Enter first name + cy.get('[id="firstName"]').should('be.visible').type(CREDENTIALS.firstName); + cy.get('[id="firstName"]').should('have.value', CREDENTIALS.firstName); + //Enter last name + cy.get('[id="lastName"]').should('be.visible').type(CREDENTIALS.lastName); + cy.get('[id="lastName"]').should('have.value', CREDENTIALS.lastName); + //Enter email + cy.get('[id="email"]').should('be.visible').type(CREDENTIALS.email); + cy.get('[id="email"]').should('have.value', CREDENTIALS.email); + //Enter password + cy.get('[id="password"]').should('be.visible').type(CREDENTIALS.password); + cy.get('[id="password"]') + .should('have.attr', 'type') + .should('eq', 'password'); + + //Confirm password + cy.get('[id="confirmPassword"]') + .should('be.visible') + .type(CREDENTIALS.password); + //Click on create account button + cy.get('.ant-btn').contains('Create Account').should('be.visible').click(); + cy.url().should('eq', `${BASE_URL}/signin`).and('contain', 'signin'); + + //Login with the created user + + login(CREDENTIALS.email, CREDENTIALS.password); + cy.goToHomePage(); + cy.url().should('eq', `${BASE_URL}/my-data`); + + //Verify user profile + cy.get('[data-testid="avatar"]') + .first() + .should('be.visible') + .trigger('mouseover') + .click(); + + cy.get('[data-testid="user-name"]') + .should('be.visible') + .invoke('text') + .should('contain', `${CREDENTIALS.firstName}${CREDENTIALS.lastName}`); + interceptURL('GET', 'api/v1/users/name/*', 'getUserPage'); + cy.get('[data-testid="user-name"]') + .should('be.visible') + .click({ force: true }); + verifyResponseStatusCode('@getUserPage', 200); + cy.get('[data-testid="left-panel"]').should( + 'contain', + `${CREDENTIALS.firstName}${CREDENTIALS.lastName}` + ); + + cy.get('[data-testid="left-panel"]') + .should('be.visible') + .should('contain', policy); + }); + + it('Check if the new user has only edit access on description and tags', () => { + login(CREDENTIALS.email, CREDENTIALS.password); + cy.goToHomePage(); + cy.url().should('eq', `${BASE_URL}/my-data`); + + Object.values(ENTITIES).forEach((entity) => { + visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity); + //Check Edit description + cy.get('[data-testid="edit-description"]') + .should('be.visible') + .should('not.be.disabled') + .click({ force: true }); + cy.get('[data-testid="header"]') + .should('be.visible') + .invoke('text') + .should('eq', `Edit description for ${entity.displayName}`); + + cy.get('[data-testid="cancel"]').should('be.visible').click(); + + //Navigate to lineage tab + cy.get('[data-testid="Lineage"]').should('be.visible').click(); + + //Check if edit lineage button is disabled + cy.get('[data-testid="edit-lineage"]') + .should('be.visible') + .and('be.disabled'); + + cy.get('[id="openmetadata_logo"]').scrollIntoView().click(); + }); + + //Check if tags is editable for table + visitEntityDetailsPage( + ENTITIES.table.term, + ENTITIES.table.serviceName, + ENTITIES.table.entity + ); + + cy.get('[data-testid="add-tag"]') + .should('be.visible') + .should('not.be.disabled') + .first() + .click(); + cy.get('[class*="-control"]').should('be.visible'); + + //Check if tags is editable for dashboard + visitEntityDetailsPage( + ENTITIES.dashboard.term, + ENTITIES.dashboard.serviceName, + ENTITIES.dashboard.entity + ); + + cy.get('[data-testid="add-tag"]') + .should('be.visible') + .should('not.be.disabled') + .first() + .click(); + cy.get('[class*="-control"]').should('be.visible'); + }); + + it('Check for CRUD operations to be disabled for the user for glossary and tags', () => { + login(CREDENTIALS.email, CREDENTIALS.password); + cy.goToHomePage(); + cy.url().should('eq', `${BASE_URL}/my-data`); + + //Check CRUD for Glossary + cy.get(glossary.testid) + .should('be.visible') + .click({ animationDistanceThreshold: 10 }); + if (glossary.subMenu) { + cy.get(glossary.subMenu).should('be.visible').click({ force: true }); + } + cy.get('body').click(); + + cy.get('[data-testid="add-new-glossary"]') + .should('be.visible') + .should('be.disabled'); + + cy.clickOnLogo(); + + //Check CRUD for Tags + cy.get(tag.testid) + .should('be.visible') + .click({ animationDistanceThreshold: 10 }); + if (tag.subMenu) { + cy.get(tag.subMenu).should('be.visible').click({ force: true }); + } + cy.get('body').click(); + cy.wait(200); + cy.get('[data-testid="add-new-tag-button"]') + .should('be.visible') + .should('be.disabled'); + + cy.get('[data-testid="delete-tag-category-button"]') + .should('be.visible') + .should('be.disabled'); + }); + + it('Check CRUD operations for settings page', () => { + login(CREDENTIALS.email, CREDENTIALS.password); + cy.goToHomePage(); + cy.url().should('eq', `${BASE_URL}/my-data`); + //Navigate to settings + cy.get(NAVBAR_DETAILS.settings.testid).should('be.visible').click(); + Object.values(ID).forEach((id) => { + cy.get(id.testid).should('be.visible').click(); + cy.get(`[data-testid="${id.button}"]`) + .should('be.visible') + .should('be.disabled'); + }); + }); +});