cypress: fixed AUT cypress test part 2 (#13818)

This commit is contained in:
Shailesh Parmar 2023-11-02 10:39:10 +05:30 committed by GitHub
parent 6e8bfea46d
commit 306c8ecfbe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 345 additions and 235 deletions

View File

@ -116,7 +116,11 @@ export const updateAssets = (domainObj) => {
cy.contains('Adding a new Asset is easy, just give it a spin!').should(
'be.visible'
);
visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
cy.get('[data-testid="add-domain"]').click();
@ -157,7 +161,11 @@ export const removeAssets = (domainObj) => {
.contains(entity.term)
.click();
visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
cy.get('[data-testid="add-domain"]').click();
verifyResponseStatusCode('@domains', 200);

View File

@ -26,13 +26,12 @@ export const visitEntityDetailsVersionPage = (
entityFQN,
version
) => {
visitEntityDetailsPage(
entityDetails.name,
entityDetails.serviceName,
entityDetails.entity,
undefined,
entityDetails.entityType
);
visitEntityDetailsPage({
term: entityDetails.term,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
entityType: entityDetails.entityType,
});
interceptURL(
'GET',

View File

@ -255,11 +255,11 @@ export const checkmust_notPaths = (
};
export const removeOwner = () => {
visitEntityDetailsPage(
SEARCH_ENTITY_TABLE.table_1.term,
SEARCH_ENTITY_TABLE.table_1.serviceName,
SEARCH_ENTITY_TABLE.table_1.entity
);
visitEntityDetailsPage({
term: SEARCH_ENTITY_TABLE.table_1.term,
serviceName: SEARCH_ENTITY_TABLE.table_1.serviceName,
entity: SEARCH_ENTITY_TABLE.table_1.entity,
});
interceptURL(
'PATCH',
`/api/v1/${SEARCH_ENTITY_TABLE.table_1.entity}/*`,
@ -272,11 +272,11 @@ export const removeOwner = () => {
};
export const addOwner = (ownerName) => {
visitEntityDetailsPage(
SEARCH_ENTITY_TABLE.table_1.term,
SEARCH_ENTITY_TABLE.table_1.serviceName,
SEARCH_ENTITY_TABLE.table_1.entity
);
visitEntityDetailsPage({
term: SEARCH_ENTITY_TABLE.table_1.term,
serviceName: SEARCH_ENTITY_TABLE.table_1.serviceName,
entity: SEARCH_ENTITY_TABLE.table_1.entity,
});
interceptURL(
'GET',
@ -322,11 +322,11 @@ export const addOwner = (ownerName) => {
};
export const addTier = () => {
visitEntityDetailsPage(
SEARCH_ENTITY_TABLE.table_2.term,
SEARCH_ENTITY_TABLE.table_2.serviceName,
SEARCH_ENTITY_TABLE.table_2.entity
);
visitEntityDetailsPage({
term: SEARCH_ENTITY_TABLE.table_2.term,
serviceName: SEARCH_ENTITY_TABLE.table_2.serviceName,
entity: SEARCH_ENTITY_TABLE.table_2.entity,
});
cy.get('[data-testid="edit-tier"]')
.scrollIntoView()
@ -344,11 +344,11 @@ export const addTier = () => {
};
export const addTag = (tag) => {
visitEntityDetailsPage(
SEARCH_ENTITY_TABLE.table_3.term,
SEARCH_ENTITY_TABLE.table_3.serviceName,
SEARCH_ENTITY_TABLE.table_3.entity
);
visitEntityDetailsPage({
term: SEARCH_ENTITY_TABLE.table_3.term,
serviceName: SEARCH_ENTITY_TABLE.table_3.serviceName,
entity: SEARCH_ENTITY_TABLE.table_3.entity,
});
cy.get('[data-testid="entity-right-panel"] [data-testid="entity-tags"]')
.eq(0)

View File

@ -326,17 +326,16 @@ export const testServiceCreationAndIngestion = ({
verifyResponseStatusCode('@testConnectionStepDefinition', 200);
cy.get('[data-testid="test-connection-modal"]').should('exist');
cy.get('.ant-modal-footer > .ant-btn-primary')
.should('exist')
.contains('OK')
.click();
verifyResponseStatusCode('@createWorkflow', 201);
// added extra buffer time as triggerWorkflow API can take up to 2minute to provide result
verifyResponseStatusCode('@triggerWorkflow', 200, {
responseTimeout: 120000,
});
cy.get('[data-testid="test-connection-modal"]').should('exist');
cy.get('.ant-modal-footer > .ant-btn-primary')
.should('exist')
.contains('OK')
.click();
verifyResponseStatusCode('@getWorkflow', 200);
cy.get('[data-testid="messag-text"]').then(($message) => {
if ($message.text().includes('partially successful')) {
@ -525,13 +524,14 @@ export const goToAddNewServicePage = (service_type) => {
cy.get('[data-testid="service-category"]').should('be.visible');
};
export const visitEntityDetailsPage = (
export const visitEntityDetailsPage = ({
term,
serviceName,
entity,
dataTestId,
entityType
) => {
entityType,
entityFqn,
}) => {
if (entity === 'dashboardDataModel') {
interceptURL(
'GET',
@ -557,7 +557,7 @@ export const visitEntityDetailsPage = (
// searching term in search box
cy.get('[data-testid="searchBox"]').scrollIntoView().should('be.visible');
cy.get('[data-testid="searchBox"]').type(term);
cy.get('[data-testid="searchBox"]').type(entityFqn ?? term);
cy.wait('@explorePageSearch').then(() => {
cy.wait(500);
cy.get('body').then(($body) => {
@ -598,11 +598,11 @@ export const visitEntityDetailsPage = (
// add new tag to entity and its table
export const addNewTagToEntity = (entityObj, term) => {
const { name, fqn } = term;
visitEntityDetailsPage(
entityObj.term,
entityObj.serviceName,
entityObj.entity
);
visitEntityDetailsPage({
term: entityObj.term,
serviceName: entityObj.serviceName,
entity: entityObj.entity,
});
cy.wait(500);
cy.get(
'[data-testid="classification-tags-0"] [data-testid="entity-tags"] [data-testid="add-tag"]'
@ -779,7 +779,7 @@ export const toastNotification = (msg, closeToast = true) => {
export const addCustomPropertiesForEntity = (
propertyName,
entityType,
customPropertyData,
customType,
value,
entityObj
@ -841,7 +841,7 @@ export const addCustomPropertiesForEntity = (
cy.get('[data-testid="propertyType"]').click();
cy.get(`[title="${customType}"]`).click();
cy.get(descriptionBox).clear().type(entityType.description);
cy.get(descriptionBox).clear().type(customPropertyData.description);
// Check if the property got added
cy.intercept('/api/v1/metadata/types/name/*?fields=customProperties').as(
@ -857,11 +857,11 @@ export const addCustomPropertiesForEntity = (
// Checking the added property in Entity
visitEntityDetailsPage(
entityObj.term,
entityObj.serviceName,
entityObj.entity
);
visitEntityDetailsPage({
term: entityObj.term,
serviceName: entityObj.serviceName,
entity: entityObj.entity,
});
cy.get('[data-testid="custom_properties"]').click();
cy.get('tbody').should('contain', propertyName);
@ -876,6 +876,11 @@ export const addCustomPropertiesForEntity = (
cy.get('@editbutton').click();
interceptURL(
'PATCH',
`/api/v1/${customPropertyData.entityApiType}/*`,
'patchEntity'
);
// Checking for value text box or markdown box
cy.get('body').then(($body) => {
if ($body.find('[data-testid="value-input"]').length > 0) {
@ -892,7 +897,7 @@ export const addCustomPropertiesForEntity = (
cy.get('[data-testid="save"]').click();
}
});
verifyResponseStatusCode('@patchEntity', 200);
cy.get(`[data-row-key="${propertyName}"]`).should('contain', value);
};
@ -1099,7 +1104,8 @@ export const updateDescriptionForIngestedTables = (
tableName,
description,
type,
entity
entity,
entityFqn
) => {
interceptURL(
'GET',
@ -1118,7 +1124,7 @@ export const updateDescriptionForIngestedTables = (
'pipelineStatus'
);
// Navigate to ingested table
visitEntityDetailsPage(tableName, serviceName, entity);
visitEntityDetailsPage({ term: tableName, serviceName, entity, entityFqn });
// update description
cy.get('[data-testid="edit-description"]')
@ -1176,7 +1182,7 @@ export const updateDescriptionForIngestedTables = (
retryIngestionRun();
// Navigate to table name
visitEntityDetailsPage(tableName, serviceName, entity);
visitEntityDetailsPage({ term: tableName, serviceName, entity });
cy.get('[data-testid="markdown-parser"]')
.first()
.invoke('text')
@ -1272,13 +1278,12 @@ export const deleteEntity = (
successMessageEntityName,
deletionType = 'hard'
) => {
visitEntityDetailsPage(
entityName,
visitEntityDetailsPage({
term: entityName,
serviceName,
entity,
undefined,
entityType
);
entityType,
});
cy.get('[data-testid="manage-button"]').click();
@ -1483,7 +1488,11 @@ export const addAnnouncement = (value) => {
'announcementFeed'
);
visitEntityDetailsPage(value.term, value.serviceName, value.entity);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
});
cy.get('[data-testid="manage-button"]').click();
cy.get('[data-testid="announcement-button"]').click();

View File

@ -384,6 +384,7 @@ export const ENTITIES = {
stringValue: 'This is string propery',
markdownValue: 'This is markdown value',
entityObj: SEARCH_ENTITY_TABLE.table_1,
entityApiType: 'tables',
},
entity_topic: {
name: 'topic',
@ -392,6 +393,7 @@ export const ENTITIES = {
stringValue: 'This is string propery',
markdownValue: 'This is markdown value',
entityObj: SEARCH_ENTITY_TOPIC.topic_1,
entityApiType: 'topics',
},
// commenting the dashboard test for not, need to make changes in dynamic data-test side
// entity_dashboard: {
@ -401,6 +403,7 @@ export const ENTITIES = {
// stringValue: 'This is string propery',
// markdownValue: 'This is markdown value',
// entityObj: SEARCH_ENTITY_DASHBOARD.dashboard_1,
// entityApiType: "dashboards"
// },
entity_pipeline: {
name: 'pipeline',
@ -409,6 +412,7 @@ export const ENTITIES = {
stringValue: 'This is string propery',
markdownValue: 'This is markdown value',
entityObj: SEARCH_ENTITY_PIPELINE.pipeline_1,
entityApiType: 'pipelines',
},
};

View File

@ -60,13 +60,12 @@ describe('Activity feed', () => {
const OWNER = 'admin';
interceptURL('PATCH', `/api/v1/${value.entity}/*`, 'patchOwner');
visitEntityDetailsPage(
value.term,
value.serviceName,
value.entity,
undefined,
value.entityType
);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
entityType: value.entityType,
});
verifyResponseStatusCode('@entityPermission', 200);
verifyResponseStatusCode('@activityFeed', 200);
@ -291,7 +290,11 @@ describe('Activity feed', () => {
const value = SEARCH_ENTITY_TABLE.table_1;
interceptURL('GET', `/api/v1/${value.entity}/name/*`, 'getEntityDetails');
visitEntityDetailsPage(value.term, value.serviceName, value.entity);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
});
cy.get('[data-testid="request-description"]').click();

View File

@ -147,7 +147,11 @@ describe('DataConsumer Edit policy should work properly', () => {
cy.url().should('eq', `${BASE_URL}/my-data`);
Object.values(ENTITIES).forEach((entity) => {
visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
// Check Edit description
cy.get('[data-testid="edit-description"]')
.should('be.visible')
@ -172,11 +176,11 @@ describe('DataConsumer Edit policy should work properly', () => {
});
// Check if tags is editable for table
visitEntityDetailsPage(
ENTITIES.table.term,
ENTITIES.table.serviceName,
ENTITIES.table.entity
);
visitEntityDetailsPage({
term: ENTITIES.table.term,
serviceName: ENTITIES.table.serviceName,
entity: ENTITIES.table.entity,
});
cy.get('[data-testid="add-tag"]')
.should('be.visible')
@ -186,11 +190,12 @@ describe('DataConsumer Edit policy should work properly', () => {
cy.get('[data-testid="tag-selector"]').should('be.visible');
// Check if tags is editable for dashboard
visitEntityDetailsPage(
ENTITIES.dashboard.term,
ENTITIES.dashboard.serviceName,
ENTITIES.dashboard.entity
);
visitEntityDetailsPage({
term: ENTITIES.dashboard.term,
serviceName: ENTITIES.dashboard.serviceName,
entity: ENTITIES.dashboard.entity,
});
cy.get('[data-testid="add-tag"]')
.should('be.visible')

View File

@ -40,7 +40,7 @@ const FOLLOWING_ENTITIES = [
];
const followEntity = ({ term, serviceName, entity }, isUnfollow) => {
visitEntityDetailsPage(term, serviceName, entity);
visitEntityDetailsPage({ term, serviceName, entity });
if (entity === 'dashboardDataModel') {
interceptURL(

View File

@ -44,7 +44,11 @@ describe('Query Entity', () => {
);
interceptURL('GET', '/api/v1/queries?*', 'fetchQuery');
interceptURL('POST', '/api/v1/queries', 'createQuery');
visitEntityDetailsPage(DATA.term, DATA.serviceName, DATA.entity);
visitEntityDetailsPage({
term: DATA.term,
serviceName: DATA.serviceName,
entity: DATA.entity,
});
cy.get('[data-testid="table_queries"]').click();
verifyResponseStatusCode('@fetchQuery', 200);
@ -54,7 +58,7 @@ describe('Query Entity', () => {
cy.get(descriptionBox).scrollIntoView().type(DATA.description);
cy.get('[data-testid="query-used-in"]').type(DATA.queryUsedIn.table1);
verifyResponseStatusCode('@explorePageSearch', 200);
cy.get(`[title="${DATA.queryUsedIn.table1}"]`).scrollIntoView().click();
cy.get(`[title="${DATA.queryUsedIn.table1}"]`).click();
cy.clickOutside();
cy.get('[data-testid="save-btn"]').click();
@ -76,7 +80,11 @@ describe('Query Entity', () => {
'/api/v1/search/query?q=*&from=0&size=15&index=table_search_index',
'explorePageSearch'
);
visitEntityDetailsPage(DATA.term, DATA.serviceName, DATA.entity);
visitEntityDetailsPage({
term: DATA.term,
serviceName: DATA.serviceName,
entity: DATA.entity,
});
cy.get('[data-testid="table_queries"]').click();
verifyResponseStatusCode('@fetchQuery', 200);
@ -120,7 +128,11 @@ describe('Query Entity', () => {
'/api/v1/search/query?q=*&from=0&size=15&index=table_search_index',
'explorePageSearch'
);
visitEntityDetailsPage(DATA.term, DATA.serviceName, DATA.entity);
visitEntityDetailsPage({
term: DATA.term,
serviceName: DATA.serviceName,
entity: DATA.entity,
});
cy.get('[data-testid="table_queries"]').click();
verifyResponseStatusCode('@fetchQuery', 200);
@ -147,7 +159,12 @@ describe('Query Entity', () => {
'/api/v1/search/query?q=*&from=0&size=15&index=table_search_index',
'explorePageSearch'
);
visitEntityDetailsPage(DATA.term, DATA.serviceName, DATA.entity);
visitEntityDetailsPage({
term: DATA.term,
serviceName: DATA.serviceName,
entity: DATA.entity,
});
cy.get('[data-testid="table_queries"]').click();
verifyResponseStatusCode('@fetchQuery', 200);
cy.get('[data-testid="query-entity-expand-button"]').click();

View File

@ -55,7 +55,11 @@ describe('Recently viwed data assets', () => {
it(`recently view section should have at max list of 5 entity`, () => {
RECENTLY_VIEW_ENTITIES.map((entity, index) => {
visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
interceptURL(
'GET',
@ -68,6 +72,9 @@ describe('Recently viwed data assets', () => {
// need to add manual wait as we are dependant on local storage for recently view data
cy.wait(500);
cy.get('[data-testid="recently-viewed-container"]')
.scrollIntoView()
.should('be.visible');
cy.get(
`[data-testid="recently-viewed-container"] [title="${entity.displayName}"]`
)

View File

@ -78,11 +78,11 @@ describe('Restore entity functionality should work properly', () => {
});
it('Soft Delete entity table', () => {
visitEntityDetailsPage(
ENTITY_TABLE.term,
ENTITY_TABLE.serviceName,
ENTITY_TABLE.entity
);
visitEntityDetailsPage({
term: ENTITY_TABLE.term,
serviceName: ENTITY_TABLE.serviceName,
entity: ENTITY_TABLE.entity,
});
cy.get('[data-testid="manage-button"]').click();

View File

@ -14,6 +14,7 @@
/// <reference types="Cypress" />
import { interceptURL, verifyResponseStatusCode } from '../../common/common';
import { searchServiceFromSettingPage } from '../../common/serviceUtils';
const schemaNames = ['sales', 'admin', 'anonymous', 'dip', 'gsmadmin_internal'];
let serviceId;
@ -96,6 +97,8 @@ describe('Schema search', () => {
verifyResponseStatusCode('@getServices', 200);
searchServiceFromSettingPage(serviceName);
// click on created service
cy.get(`[data-testid="service-name-${serviceName}"]`).click();

View File

@ -173,11 +173,11 @@ describe('Edit displayName for all the entities, services and verify breadcrumb'
it(`database`, () => {
interceptURL('GET', 'api/v1/databases/name/*', 'database');
visitEntityDetailsPage(
SCHEMA_AND_DATABASE_DISPLAY_NAME.name,
SCHEMA_AND_DATABASE_DISPLAY_NAME.serviceName,
SCHEMA_AND_DATABASE_DISPLAY_NAME.entity
);
visitEntityDetailsPage({
term: SCHEMA_AND_DATABASE_DISPLAY_NAME.name,
serviceName: SCHEMA_AND_DATABASE_DISPLAY_NAME.serviceName,
entity: SCHEMA_AND_DATABASE_DISPLAY_NAME.entity,
});
cy.log(SCHEMA_AND_DATABASE_DISPLAY_NAME.database);
cy.get('[data-testid="breadcrumb"]')
.contains(SCHEMA_AND_DATABASE_DISPLAY_NAME.database)
@ -194,11 +194,11 @@ describe('Edit displayName for all the entities, services and verify breadcrumb'
it(`databaseSchema`, () => {
interceptURL('GET', 'api/v1/databaseSchemas/name/*', 'databaseSchemas');
visitEntityDetailsPage(
SCHEMA_AND_DATABASE_DISPLAY_NAME.name,
SCHEMA_AND_DATABASE_DISPLAY_NAME.serviceName,
SCHEMA_AND_DATABASE_DISPLAY_NAME.entity
);
visitEntityDetailsPage({
term: SCHEMA_AND_DATABASE_DISPLAY_NAME.name,
serviceName: SCHEMA_AND_DATABASE_DISPLAY_NAME.serviceName,
entity: SCHEMA_AND_DATABASE_DISPLAY_NAME.entity,
});
cy.get('[data-testid="breadcrumb"]')
.contains(SCHEMA_AND_DATABASE_DISPLAY_NAME.schema)
.click();
@ -214,7 +214,11 @@ describe('Edit displayName for all the entities, services and verify breadcrumb'
Object.values(ENTITIES_DISPLAY_NAME).map((entity) => {
it(`${entity.entity}`, () => {
visitEntityDetailsPage(entity.name, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
updateDisplayName(entity.displayName, `/api/v1/${entity.entity}/*`);
entity.breadcrumb.map((value) => {
cy.get('[data-testid="breadcrumb"]').should('contain', value);

View File

@ -77,13 +77,12 @@ describe('Add and Remove Owner', () => {
Object.entries(ENTITIES).map(([key, value]) => {
it(`${key} details page`, () => {
visitEntityDetailsPage(
value.term,
value.serviceName,
value.entity,
undefined,
value.entityType
);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
entityType: value.entityType,
});
verifyResponseStatusCode('@entityPermission', 200);
verifyResponseStatusCode('@activityFeed', 200);
@ -95,7 +94,11 @@ describe('Add and Remove Owner', () => {
interceptURL('PATCH', '/api/v1/databaseSchemas/*', 'patchOwner');
interceptURL('GET', '/api/v1/*/name/*', 'schemaDetails');
const value = ENTITIES.table;
visitEntityDetailsPage(value.term, value.serviceName, value.entity);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
});
verifyResponseStatusCode('@entityPermission', 200);
verifyResponseStatusCode('@activityFeed', 200);
@ -111,7 +114,11 @@ describe('Add and Remove Owner', () => {
interceptURL('PATCH', '/api/v1/databases/*', 'patchOwner');
interceptURL('GET', '/api/v1/databases/name/*', 'databaseDetails');
const value = ENTITIES.table;
visitEntityDetailsPage(value.term, value.serviceName, value.entity);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
});
verifyResponseStatusCode('@entityPermission', 200);
verifyResponseStatusCode('@activityFeed', 200);
@ -137,7 +144,12 @@ describe('Add and Remove Owner', () => {
);
interceptURL('GET', '/api/v1/databases?service=*', 'databases');
const value = ENTITIES.table;
visitEntityDetailsPage(value.term, value.serviceName, value.entity);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
});
verifyResponseStatusCode('@entityPermission', 200);
verifyResponseStatusCode('@activityFeed', 200);
@ -325,13 +337,12 @@ describe('Add and Remove Tier', () => {
Object.entries(ENTITIES).map(([key, value]) => {
it(`${key} details page`, () => {
visitEntityDetailsPage(
value.term,
value.serviceName,
value.entity,
undefined,
value.entityType
);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
entityType: value.entityType,
});
verifyResponseStatusCode('@entityPermission', 200);
verifyResponseStatusCode('@activityFeed', 200);
@ -342,7 +353,11 @@ describe('Add and Remove Tier', () => {
it('database details page', () => {
interceptURL('GET', '/api/v1/databases/name/*', 'databaseDetails');
const value = ENTITIES.table;
visitEntityDetailsPage(value.term, value.serviceName, value.entity);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
});
verifyResponseStatusCode('@entityPermission', 200);
verifyResponseStatusCode('@activityFeed', 200);

View File

@ -75,11 +75,11 @@ describe.skip('Create a team and add that team as a owner of the entity', () =>
});
it('Add newly created group type team as owner, and remove it', () => {
visitEntityDetailsPage(
TEAM_DETAILS.term,
TEAM_DETAILS.serviceName,
TEAM_DETAILS.entity
);
visitEntityDetailsPage({
term: TEAM_DETAILS.term,
serviceName: TEAM_DETAILS.serviceName,
entity: TEAM_DETAILS.entity,
});
cy.get('[data-testid="edit-owner"]').should('be.visible').click();
cy.get('[data-testid="owner-select-teams-search-bar"]')
@ -105,11 +105,11 @@ describe.skip('Create a team and add that team as a owner of the entity', () =>
});
it('Remove newly created group type team as owner', () => {
visitEntityDetailsPage(
TEAM_DETAILS.term,
TEAM_DETAILS.serviceName,
TEAM_DETAILS.entity
);
visitEntityDetailsPage({
term: TEAM_DETAILS.term,
serviceName: TEAM_DETAILS.serviceName,
entity: TEAM_DETAILS.entity,
});
cy.get('[data-testid="edit-owner"]').should('be.visible').click();
cy.get('[data-testid="owner-select-teams-search-bar"]')

View File

@ -37,7 +37,11 @@ describe('Entity Announcement', () => {
'announcementFeed'
);
interceptURL('DELETE', '/api/v1/feed/*', 'deleteFeed');
visitEntityDetailsPage(value.term, value.serviceName, value.entity);
visitEntityDetailsPage({
term: value.term,
serviceName: value.serviceName,
entity: value.entity,
});
cy.get('[data-testid="manage-button"]').click();
cy.get('[data-testid="announcement-button"]').click();

View File

@ -39,11 +39,11 @@ describe('Check if voting work properly in entities', () => {
);
interceptURL('PUT', `/api/v1/${apiEntity}/*/vote`, 'upVoting');
visitEntityDetailsPage(
entityDetails.term,
entityDetails.serviceName,
entityDetails.entity
);
visitEntityDetailsPage({
term: entityDetails.term,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
});
verifyResponseStatusCode('@getEntityDetail', 200);
verifyResponseStatusCode('@getEntityPermission', 200);
@ -75,11 +75,11 @@ describe('Check if voting work properly in entities', () => {
);
interceptURL('PUT', `/api/v1/${apiEntity}/*/vote`, 'downVoting');
visitEntityDetailsPage(
entityDetails.term,
entityDetails.serviceName,
entityDetails.entity
);
visitEntityDetailsPage({
term: entityDetails.term,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
});
verifyResponseStatusCode('@getEntityDetail', 200);
verifyResponseStatusCode('@getEntityPermission', 200);
@ -114,11 +114,11 @@ describe('Check if voting work properly in entities', () => {
);
interceptURL('PUT', `/api/v1/${apiEntity}/*/vote`, 'unVoting');
visitEntityDetailsPage(
entityDetails.term,
entityDetails.serviceName,
entityDetails.entity
);
visitEntityDetailsPage({
term: entityDetails.term,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
});
verifyResponseStatusCode('@getEntityDetail', 200);
verifyResponseStatusCode('@getEntityPermission', 200);

View File

@ -38,7 +38,11 @@ describe('Entity Details Page', () => {
ENTITIES_LIST.map((entity) => {
it(`Edit lineage should work for ${entity.entity} entity`, () => {
visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
cy.get('[data-testid="lineage"]').should('be.visible').click();
// Check edit button should not be disabled
@ -55,11 +59,11 @@ describe('Lineage functionality', () => {
});
it('toggle fullscreen mode', () => {
visitEntityDetailsPage(
tableEntity.term,
tableEntity.serviceName,
tableEntity.entity
);
visitEntityDetailsPage({
term: tableEntity.term,
serviceName: tableEntity.serviceName,
entity: tableEntity.entity,
});
cy.get('[data-testid="lineage"]').click();
// Enable fullscreen

View File

@ -129,11 +129,11 @@ describe('Check if tags addition and removal flow working properly from tables',
`/api/v1/${entityDetails.insideEntity ?? apiEntity}/*`,
'tagsChange'
);
visitEntityDetailsPage(
entityDetails.term,
entityDetails.serviceName,
entityDetails.entity
);
visitEntityDetailsPage({
term: entityDetails.term,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
});
verifyResponseStatusCode('@getEntityDetail', 200);
verifyResponseStatusCode('@getEntityPermission', 200);
@ -188,11 +188,11 @@ describe('Check if tags addition and removal flow working properly from tables',
'getInsideColumnPermission'
);
}
visitEntityDetailsPage(
entityDetails.term,
entityDetails.serviceName,
entityDetails.entity
);
visitEntityDetailsPage({
term: entityDetails.term,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
});
verifyResponseStatusCode('@getEntityDetail', 200);
verifyResponseStatusCode('@getEntityPermission', 200);
if (entityDetails.insideEntity) {

View File

@ -30,8 +30,8 @@ import { DATABASE_SERVICE } from '../../constants/entityConstant';
import { SERVICE_CATEGORIES } from '../../constants/service.constants';
const ENTITY_TABLE = {
term: DATABASE_SERVICE.tables,
displayName: DATABASE_SERVICE.tables,
term: DATABASE_SERVICE.tables.name,
displayName: DATABASE_SERVICE.tables.name,
entity: MYDATA_SUMMARY_OPTIONS.tables,
serviceName: DATABASE_SERVICE.service.name,
schemaName: DATABASE_SERVICE.schema.name,
@ -147,11 +147,11 @@ describe('Task flow should work', () => {
'getEntityDetails'
);
visitEntityDetailsPage(
ENTITY_TABLE.term,
ENTITY_TABLE.serviceName,
ENTITY_TABLE.entity
);
visitEntityDetailsPage({
term: ENTITY_TABLE.term,
serviceName: ENTITY_TABLE.serviceName,
entity: ENTITY_TABLE.entity,
});
cy.get('[data-testid="request-description"]').click();
@ -174,11 +174,11 @@ describe('Task flow should work', () => {
'getEntityDetails'
);
visitEntityDetailsPage(
ENTITY_TABLE.term,
ENTITY_TABLE.serviceName,
ENTITY_TABLE.entity
);
visitEntityDetailsPage({
term: ENTITY_TABLE.term,
serviceName: ENTITY_TABLE.serviceName,
entity: ENTITY_TABLE.entity,
});
cy.get('[data-testid="request-entity-tags"]').click();

View File

@ -28,11 +28,11 @@ describe('Test if the total count of users and teams is correctly displayed in t
it('Check total count of users and teams', () => {
const token = localStorage.getItem('oidcIdToken');
visitEntityDetailsPage(
TEAM_DETAILS.term,
TEAM_DETAILS.serviceName,
TEAM_DETAILS.entity
);
visitEntityDetailsPage({
term: TEAM_DETAILS.term,
serviceName: TEAM_DETAILS.serviceName,
entity: TEAM_DETAILS.entity,
});
cy.request({
method: 'GET',

View File

@ -50,11 +50,11 @@ const goToProfilerTab = () => {
`api/v1/tables/name/${serviceName}.*.${TEAM_ENTITY}?fields=*&include=all`,
'waitForPageLoad'
);
visitEntityDetailsPage(
TEAM_ENTITY,
visitEntityDetailsPage({
term: TEAM_ENTITY,
serviceName,
MYDATA_SUMMARY_OPTIONS.tables
);
entity: MYDATA_SUMMARY_OPTIONS.tables,
});
verifyResponseStatusCode('@waitForPageLoad', 200);
cy.get('[data-testid="profiler"]').should('be.visible').click();
@ -595,7 +595,7 @@ describe.skip('Data Quality and Profiler should work properly', () => {
it('Profiler matrix and test case graph should visible', () => {
const { term, entity, serviceName, testCaseName } =
DATA_QUALITY_SAMPLE_DATA_TABLE;
visitEntityDetailsPage(term, serviceName, entity);
visitEntityDetailsPage({ term, serviceName, entity });
cy.get('[data-testid="entity-header-display-name"]')
.contains(term)
.should('be.visible');
@ -650,7 +650,7 @@ describe.skip('Data Quality and Profiler should work properly', () => {
`api/v1/tables/name/${serviceName}.*.${term}?fields=*&include=all`,
'waitForPageLoad'
);
visitEntityDetailsPage(term, serviceName, entity);
visitEntityDetailsPage({ term, serviceName, entity });
verifyResponseStatusCode('@waitForPageLoad', 200);
cy.get('[data-testid="entity-header-display-name"]')
.should('be.visible')

View File

@ -156,13 +156,12 @@ Object.entries(ENTITY_DETAILS_FOR_VERSION_TEST).map(
});
it(`${entityType} version page should show removed tags changes properly`, () => {
visitEntityDetailsPage(
entityDetails.name,
entityDetails.serviceName,
entityDetails.entity,
undefined,
entityType
);
visitEntityDetailsPage({
term: entityDetails.name,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
entityType: entityType,
});
cy.get(
'[data-testid="entity-right-panel"] [data-testid="edit-button"]'
@ -192,13 +191,12 @@ Object.entries(ENTITY_DETAILS_FOR_VERSION_TEST).map(
});
it(`${entityType} version page should show owner changes properly`, () => {
visitEntityDetailsPage(
entityDetails.name,
entityDetails.serviceName,
entityDetails.entity,
undefined,
entityType
);
visitEntityDetailsPage({
term: entityDetails.name,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
entityType: entityType,
});
cy.get('[data-testid="version-button"]').as('versionButton');
@ -254,13 +252,12 @@ Object.entries(ENTITY_DETAILS_FOR_VERSION_TEST).map(
});
it(`${entityType} version page should show tier changes properly`, () => {
visitEntityDetailsPage(
entityDetails.name,
entityDetails.serviceName,
entityDetails.entity,
undefined,
entityType
);
visitEntityDetailsPage({
term: entityDetails.name,
serviceName: entityDetails.serviceName,
entity: entityDetails.entity,
entityType: entityType,
});
cy.get('[data-testid="version-button"]').as('versionButton');

View File

@ -790,7 +790,11 @@ describe('Glossary page should work properly', () => {
cy.contains('Adding a new Asset is easy, just give it a spin!').should(
'be.visible'
);
visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
const parentPath =
'[data-testid="entity-right-panel"] [data-testid="glossary-container"]';

View File

@ -154,13 +154,12 @@ describe('SearchIndexDetails page should work properly for data consumer role',
});
it('All permissible actions on search index details page should work properly', () => {
visitEntityDetailsPage(
SEARCH_INDEX_DETAILS_FOR_DETAILS_PAGE_TEST.name,
SEARCH_INDEX_DETAILS_FOR_DETAILS_PAGE_TEST.service,
'searchIndexes',
undefined,
'Search Index'
);
visitEntityDetailsPage({
term: SEARCH_INDEX_DETAILS_FOR_DETAILS_PAGE_TEST.name,
serviceName: SEARCH_INDEX_DETAILS_FOR_DETAILS_PAGE_TEST.service,
entity: 'searchIndexes',
entityType: 'Search Index',
});
// Edit domain option should not be available
cy.get(`[data-testid="entity-page-header"]`).then(($body) => {
@ -205,7 +204,9 @@ describe('Prerequisite for data steward role tests', () => {
verifyResponseStatusCode('@getUserDetails', 200);
cy.get('[data-testid="edit-roles"]').click();
cy.get('[role="tablist"] .ant-collapse-arrow').click();
cy.get('[data-testid="edit-roles-button"]').click();
cy.get('[data-testid="inline-edit-container"] #select-role').click();
@ -230,13 +231,12 @@ describe('SearchIndexDetails page should work properly for data steward role', (
});
it('All permissible actions on search index details page should work properly', () => {
visitEntityDetailsPage(
SEARCH_INDEX_DETAILS_FOR_DETAILS_PAGE_TEST.name,
SEARCH_INDEX_DETAILS_FOR_DETAILS_PAGE_TEST.service,
'searchIndexes',
undefined,
'Search Index'
);
visitEntityDetailsPage({
term: SEARCH_INDEX_DETAILS_FOR_DETAILS_PAGE_TEST.name,
serviceName: SEARCH_INDEX_DETAILS_FOR_DETAILS_PAGE_TEST.service,
entity: 'searchIndexes',
entityType: 'Search Index',
});
// Edit domain option should not be available
cy.get(`[data-testid="entity-page-header"]`).then(($body) => {

View File

@ -206,7 +206,11 @@ describe('Tags page should work', () => {
const entity = SEARCH_ENTITY_TABLE.table_3;
const tag = 'Sensitive';
visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
cy.get('[data-testid="breadcrumb-link"]')
.should('be.visible')
@ -271,7 +275,11 @@ describe('Tags page should work', () => {
const tag = 'Personal';
const assignee = 'admin';
visitEntityDetailsPage(entity.term, entity.serviceName, entity.entity);
visitEntityDetailsPage({
term: entity.term,
serviceName: entity.serviceName,
entity: entity.entity,
});
cy.get('[data-testid="breadcrumb-link"]')
.should('be.visible')

View File

@ -165,7 +165,11 @@ describe('Postgres Ingestion', () => {
`/api/v1/tables/name/${serviceName}.*.*${tableName}?fields=*&include=all`,
'entityDetailsPage'
);
visitEntityDetailsPage(tableName, serviceName, 'tables');
visitEntityDetailsPage({
term: tableName,
serviceName: serviceName,
entity: 'tables',
});
verifyResponseStatusCode('@entityDetailsPage', 200);
interceptURL('GET', '/api/v1/queries?*', 'queriesTab');
cy.get('[data-testid="table_queries"]')

View File

@ -229,6 +229,10 @@ describe('RedShift Ingestion', () => {
verifyResponseStatusCode('@fetchClassifications', 200);
cy.get('[data-testid="data-summary-container"]')
.contains(DBT.classification)
.click();
verifyResponseStatusCode('@getTagList', 200);
// Verify DBT tag category is added
cy.get('[data-testid="tag-name"]')
@ -240,7 +244,11 @@ describe('RedShift Ingestion', () => {
.should('contain', DBT.tagName);
// Verify DBT in table entity
visitEntityDetailsPage(REDSHIFT.DBTTable, REDSHIFT.serviceName, 'tables');
visitEntityDetailsPage({
term: REDSHIFT.DBTTable,
serviceName: REDSHIFT.serviceName,
entity: 'tables',
});
// Verify tags
cy.get('[data-testid="entity-tags"]').should('contain', `${DBT.tagName}`);

View File

@ -26,6 +26,9 @@ const serviceName = `${serviceType}-ct-test-${uuid()}`;
const tableName = 'CUSTOMER';
const schema = 'TPCH_SF1000';
const description = `This is ${serviceName} description`;
const entityFqn = `${serviceName}.${Cypress.env(
'snowflakeDatabase'
)}.${schema}.${tableName}`;
describe('Snowflake Ingestion', () => {
beforeEach(() => {
@ -69,7 +72,8 @@ describe('Snowflake Ingestion', () => {
tableName,
description,
SERVICE_TYPE.Database,
'tables'
'tables',
entityFqn
);
});

View File

@ -297,6 +297,7 @@ const Users = ({
</Col>
<Col className="p-x-sm border-right" span={6}>
<UserProfileRoles
isUserAdmin={userData.isAdmin}
updateUserDetails={updateUserDetails}
userRoles={userData.roles}
/>

View File

@ -36,6 +36,7 @@ import { UserProfileRolesProps } from './UserProfileRoles.interface';
const UserProfileRoles = ({
userRoles,
updateUserDetails,
isUserAdmin,
}: UserProfileRolesProps) => {
const { t } = useTranslation();
@ -52,7 +53,7 @@ const UserProfileRoles = ({
value: role.id,
}));
if (!isAdminUser) {
if (!isUserAdmin) {
options.push({
label: TERM_ADMIN,
value: toLower(TERM_ADMIN),
@ -60,7 +61,7 @@ const UserProfileRoles = ({
}
return options;
}, [roles, isAdminUser, getEntityName]);
}, [roles, isUserAdmin, getEntityName]);
const fetchRoles = async () => {
setIsRolesLoading(true);
@ -111,27 +112,27 @@ const UserProfileRoles = ({
() => (
<Chip
data={[
...(isAdminUser
...(isUserAdmin
? [{ id: 'admin', type: 'role', name: TERM_ADMIN }]
: []),
...(userRoles ?? []),
]}
icon={<UserIcons height={20} />}
noDataPlaceholder={t('message.no-roles-assigned')}
showNoDataPlaceholder={!isAdminUser}
showNoDataPlaceholder={!isUserAdmin}
/>
),
[userRoles, isAdminUser]
[userRoles, isUserAdmin]
);
useEffect(() => {
const defaultUserRoles = [
...(userRoles?.map((role) => role.id) ?? []),
...(isAdminUser ? [toLower(TERM_ADMIN)] : []),
...(isUserAdmin ? [toLower(TERM_ADMIN)] : []),
];
setSelectedRoles(defaultUserRoles);
}, [isAdminUser, userRoles]);
}, [isUserAdmin, userRoles]);
useEffect(() => {
if (isRolesEdit && isEmpty(roles)) {

View File

@ -13,6 +13,7 @@
import { User } from '../../../../generated/entity/teams/user';
export interface UserProfileRolesProps {
isUserAdmin?: boolean;
userRoles: User['roles'];
updateUserDetails: (data: Partial<User>) => Promise<void>;
}