From 7a92b70e5493d76448c20c7b99161d4a2afa596d Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Wed, 29 Jan 2025 13:33:31 +0530 Subject: [PATCH 01/11] fix: add more fields for advance search filters --- .../e2e/Features/AdvancedSearch.spec.ts | 21 +++++++ .../ui/playwright/utils/advancedSearch.ts | 55 +++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts index 3dda28a884d6..db8882f7f384 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts @@ -12,6 +12,7 @@ */ import test from '@playwright/test'; import { SidebarItem } from '../../constant/sidebar'; +import { DashboardClass } from '../../support/entity/DashboardClass'; import { TableClass } from '../../support/entity/TableClass'; import { TopicClass } from '../../support/entity/TopicClass'; import { TagClass } from '../../support/tag/TagClass'; @@ -38,6 +39,8 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { const topic2 = new TopicClass(); const tierTag1 = new TagClass({ classification: 'Tier' }); const tierTag2 = new TagClass({ classification: 'Tier' }); + const dashboard1 = new DashboardClass(); + const dashboard2 = new DashboardClass(); let searchCriteria: Record = {}; @@ -54,6 +57,8 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { topic2.create(apiContext), tierTag1.create(apiContext), tierTag2.create(apiContext), + dashboard1.create(apiContext), + dashboard2.create(apiContext), ]); // Add Owner & Tag to the table @@ -109,6 +114,20 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { table1.entity.displayName, table2.entity.displayName, ], + serviceType: [table1.service.serviceType, table2.service.serviceType], + 'charts.displayName.keyword': [ + dashboard1.charts.displayName, + dashboard2.charts.displayName, + ], + 'messageSchema.schemaFields.name.keyword': ['AddressBook', 'Customer'], + 'dataModel.columns.name.keyword': ['approved', 'department_id'], + 'dataModels.displayName.keyword': ['orders', 'operations'], + dataModelType: ['LookMlExplore', 'LookMlView'], + entityType: ['container', 'dashboard'], + 'mlFeatures.name': ['persona', 'sales'], + 'fields.name.keyword': ['Columns', 'Description'], + tableType: ['Regular', 'Iceberg'], + 'tasks.displayName.keyword': ['Assert Table Exists', 'Presto Task'], }; await afterAction(); @@ -125,6 +144,8 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { topic2.delete(apiContext), tierTag1.delete(apiContext), tierTag2.delete(apiContext), + dashboard1.delete(apiContext), + dashboard2.delete(apiContext), ]); await afterAction(); }); diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts index b8d911fa594e..343869eaf891 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts @@ -63,6 +63,61 @@ export const FIELDS: EntityFields[] = [ localSearch: false, skipConditions: ['isNull', 'isNotNull'], // Null and isNotNull conditions are not present for display name }, + { + id: 'Service Type', + name: 'serviceType', + localSearch: false, + }, + { + id: 'Chart', + name: 'charts.displayName.keyword', + localSearch: false, + }, + { + id: 'Schema Field', + name: 'messageSchema.schemaFields.name.keyword', + localSearch: false, + }, + { + id: 'Container Column', + name: 'dataModel.columns.name.keyword', + localSearch: false, + }, + { + id: 'Data Model', + name: 'dataModels.displayName.keyword', + localSearch: false, + }, + { + id: 'Data Model Type', + name: 'dataModelType', + localSearch: false, + }, + { + id: 'Entity Type', + name: 'entityType', + localSearch: false, + }, + { + id: 'Feature', + name: 'mlFeatures.name', + localSearch: false, + }, + { + id: 'Field', + name: 'fields.name.keyword', + localSearch: false, + }, + { + id: 'Table Type', + name: 'tableType', + localSearch: false, + }, + { + id: 'Task', + name: 'tasks.displayName.keyword', + localSearch: false, + }, ]; export const OPERATOR = { From 574d5f5eb3a930747e40d3b697c21ec65f785de3 Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Thu, 30 Jan 2025 13:30:48 +0530 Subject: [PATCH 02/11] added more children values data in respective classes for tests --- .../playwright/support/entity/ApiCollectionClass.ts | 12 ++++++++++++ .../ui/playwright/support/entity/DashboardClass.ts | 7 +++++++ .../ui/playwright/support/entity/MlModelClass.ts | 5 +++++ .../ui/playwright/support/entity/PipelineClass.ts | 5 ++++- .../ui/playwright/support/entity/TopicClass.ts | 7 +++++++ 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/ApiCollectionClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/ApiCollectionClass.ts index 27edd96029f0..0b822daf0369 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/ApiCollectionClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/ApiCollectionClass.ts @@ -94,6 +94,12 @@ export class ApiCollectionClass extends EntityClass { }, ], }, + { + name: 'secondary', + dataType: 'RECORD', + fullyQualifiedName: `${this.fqn}.secondary`, + tags: [], + }, ], }, responseSchema: { @@ -139,6 +145,12 @@ export class ApiCollectionClass extends EntityClass { }, ], }, + { + name: 'secondary', + dataType: 'RECORD', + fullyQualifiedName: `${this.fqn}.secondary`, + tags: [], + }, ], }, }; diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts index 14777bda65ae..83c80ce429f8 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts @@ -53,6 +53,13 @@ export class DashboardClass extends EntityClass { service: this.service.name, }; children = [ + { + name: 'merchant', + dataType: 'VARCHAR', + dataLength: 256, + dataTypeDisplay: 'varchar', + description: 'merchant', + }, { name: 'country_name', dataType: 'VARCHAR', diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/MlModelClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/MlModelClass.ts index b959705e3075..119ee9401dae 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/MlModelClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/MlModelClass.ts @@ -44,6 +44,11 @@ export class MlModelClass extends EntityClass { dataType: 'numerical', description: 'Sales amount', }, + { + name: 'persona', + dataType: 'categorical', + description: 'type of buyer', + }, ]; entity = { diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/PipelineClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/PipelineClass.ts index 6f82dd496267..e7c461ae2afc 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/PipelineClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/PipelineClass.ts @@ -39,7 +39,10 @@ export class PipelineClass extends EntityClass { }, }; - children = [{ name: 'snowflake_task' }]; + children = [ + { name: 'snowflake_task', displayName: 'Snowflake Task' }, + { name: 'presto_task', displayName: 'Presto Task' }, + ]; entity = { name: this.pipelineName, diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/TopicClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/TopicClass.ts index b223f22d4fc2..abbac469cb39 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/TopicClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/TopicClass.ts @@ -83,6 +83,13 @@ export class TopicClass extends EntityClass { }, ], }, + { + name: 'secondary', + dataType: 'RECORD', + fullyQualifiedName: `${this.fqn}.secondary`, + tags: [], + children: [], + }, ]; entity = { From 96bbf8e5e2ea3e6c3795f5e1f932e150b074526f Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Thu, 30 Jan 2025 13:32:39 +0530 Subject: [PATCH 03/11] added some more fields for advance search filters --- .../e2e/Features/AdvancedSearch.spec.ts | 68 +++++++++++++++++-- .../ui/playwright/utils/advancedSearch.ts | 21 ++++++ 2 files changed, 83 insertions(+), 6 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts index db8882f7f384..179993170158 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts @@ -12,7 +12,11 @@ */ import test from '@playwright/test'; import { SidebarItem } from '../../constant/sidebar'; +import { Domain } from '../../support/domain/Domain'; +import { ApiCollectionClass } from '../../support/entity/ApiCollectionClass'; import { DashboardClass } from '../../support/entity/DashboardClass'; +import { MlModelClass } from '../../support/entity/MlModelClass'; +import { PipelineClass } from '../../support/entity/PipelineClass'; import { TableClass } from '../../support/entity/TableClass'; import { TopicClass } from '../../support/entity/TopicClass'; import { TagClass } from '../../support/tag/TagClass'; @@ -23,7 +27,11 @@ import { runRuleGroupTests, verifyAllConditions, } from '../../utils/advancedSearch'; -import { createNewPage, redirectToHomePage } from '../../utils/common'; +import { + assignDomain, + createNewPage, + redirectToHomePage, +} from '../../utils/common'; import { addMultiOwner, assignTag, assignTier } from '../../utils/entity'; import { sidebarClick } from '../../utils/sidebar'; @@ -41,6 +49,12 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { const tierTag2 = new TagClass({ classification: 'Tier' }); const dashboard1 = new DashboardClass(); const dashboard2 = new DashboardClass(); + const domain1 = new Domain(); + const domain2 = new Domain(); + const apiCollection1 = new ApiCollectionClass(); + const apiCollection2 = new ApiCollectionClass(); + const mlModel1 = new MlModelClass(); + const pipeline1 = new PipelineClass(); let searchCriteria: Record = {}; @@ -59,6 +73,12 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { tierTag2.create(apiContext), dashboard1.create(apiContext), dashboard2.create(apiContext), + domain1.create(apiContext), + domain2.create(apiContext), + apiCollection1.create(apiContext), + apiCollection2.create(apiContext), + mlModel1.create(apiContext), + pipeline1.create(apiContext), ]); // Add Owner & Tag to the table @@ -72,6 +92,7 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { type: 'Users', }); await assignTag(page, 'PersonalData.Personal'); + await assignDomain(page, domain1.data); await table2.visitEntityPage(page); await addMultiOwner({ @@ -83,6 +104,7 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { type: 'Users', }); await assignTag(page, 'PII.None'); + await assignDomain(page, domain2.data); // Add Tier To the topic 1 await topic1.visitEntityPage(page); @@ -119,15 +141,43 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { dashboard1.charts.displayName, dashboard2.charts.displayName, ], - 'messageSchema.schemaFields.name.keyword': ['AddressBook', 'Customer'], - 'dataModel.columns.name.keyword': ['approved', 'department_id'], + 'messageSchema.schemaFields.name.keyword': [ + topic1.entity.messageSchema.schemaFields[0].name, + topic1.entity.messageSchema.schemaFields[1].name, + ], + 'dataModel.columns.name.keyword': [ + dashboard1.dataModel.columns[0].name, + dashboard1.dataModel.columns[1].name, + ], 'dataModels.displayName.keyword': ['orders', 'operations'], - dataModelType: ['LookMlExplore', 'LookMlView'], + dataModelType: [ + dashboard1.dataModel.dataModelType, + dashboard2.dataModel.dataModelType, + ], entityType: ['container', 'dashboard'], - 'mlFeatures.name': ['persona', 'sales'], + 'mlFeatures.name': [ + mlModel1.entity.mlFeatures[0].name, + mlModel1.entity.mlFeatures[1].name, + ], 'fields.name.keyword': ['Columns', 'Description'], tableType: ['Regular', 'Iceberg'], - 'tasks.displayName.keyword': ['Assert Table Exists', 'Presto Task'], + 'tasks.displayName.keyword': [ + pipeline1.entity.tasks[0].displayName, + pipeline1.entity.tasks[1].displayName, + ], + 'domain.displayName.keyword': [ + domain1.data.displayName, + domain2.data.displayName, + ], + 'responseSchema.schemaFields.name.keyword': [ + apiCollection1.apiEndpoint.responseSchema.schemaFields[0].name, + apiCollection1.apiEndpoint.responseSchema.schemaFields[1].name, + ], + 'requestSchema.schemaFields.name.keyword': [ + apiCollection1.apiEndpoint.requestSchema.schemaFields[0].name, + apiCollection1.apiEndpoint.requestSchema.schemaFields[1].name, + ], + 'name.keyword': [table1.entity.name, table2.entity.name], }; await afterAction(); @@ -146,6 +196,12 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { tierTag2.delete(apiContext), dashboard1.delete(apiContext), dashboard2.delete(apiContext), + domain1.delete(apiContext), + domain2.delete(apiContext), + apiCollection1.delete(apiContext), + apiCollection2.delete(apiContext), + mlModel1.delete(apiContext), + pipeline1.delete(apiContext), ]); await afterAction(); }); diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts index 343869eaf891..f360e6ce10f2 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts @@ -118,6 +118,27 @@ export const FIELDS: EntityFields[] = [ name: 'tasks.displayName.keyword', localSearch: false, }, + { + id: 'Domain', + name: 'domain.displayName.keyword', + localSearch: false, + }, + { + id: 'Response Schema Field', + name: 'responseSchema.schemaFields.name.keyword', + localSearch: false, + }, + { + id: 'Request Schema Field', + name: 'requestSchema.schemaFields.name.keyword', + localSearch: false, + }, + { + id: 'Name', + name: 'name.keyword', + localSearch: false, + skipConditions: ['isNull', 'isNotNull'], // Null and isNotNull conditions are not present for name + }, ]; export const OPERATOR = { From 81e3ba610536cca17a99870fd39e55a8603f86d8 Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Thu, 30 Jan 2025 19:21:50 +0530 Subject: [PATCH 04/11] added project and status fields for search filter --- .../playwright/e2e/Features/AdvancedSearch.spec.ts | 12 ++++++++++++ .../support/entity/DashboardDataModelClass.ts | 2 ++ .../resources/ui/playwright/utils/advancedSearch.ts | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts index 179993170158..32e1ea9757e4 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts @@ -15,6 +15,7 @@ import { SidebarItem } from '../../constant/sidebar'; import { Domain } from '../../support/domain/Domain'; import { ApiCollectionClass } from '../../support/entity/ApiCollectionClass'; import { DashboardClass } from '../../support/entity/DashboardClass'; +import { DashboardDataModelClass } from '../../support/entity/DashboardDataModelClass'; import { MlModelClass } from '../../support/entity/MlModelClass'; import { PipelineClass } from '../../support/entity/PipelineClass'; import { TableClass } from '../../support/entity/TableClass'; @@ -55,6 +56,8 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { const apiCollection2 = new ApiCollectionClass(); const mlModel1 = new MlModelClass(); const pipeline1 = new PipelineClass(); + const dashboardDataModel1 = new DashboardDataModelClass(); + const dashboardDataModel2 = new DashboardDataModelClass(); let searchCriteria: Record = {}; @@ -79,6 +82,8 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { apiCollection2.create(apiContext), mlModel1.create(apiContext), pipeline1.create(apiContext), + dashboardDataModel1.create(apiContext), + dashboardDataModel2.create(apiContext), ]); // Add Owner & Tag to the table @@ -178,6 +183,11 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { apiCollection1.apiEndpoint.requestSchema.schemaFields[1].name, ], 'name.keyword': [table1.entity.name, table2.entity.name], + 'project.keyword': [ + dashboardDataModel1.entity.project, + dashboardDataModel2.entity.project, + ], + status: ['Approved', 'In Review'], }; await afterAction(); @@ -202,6 +212,8 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { apiCollection2.delete(apiContext), mlModel1.delete(apiContext), pipeline1.delete(apiContext), + dashboardDataModel1.delete(apiContext), + dashboardDataModel2.delete(apiContext), ]); await afterAction(); }); diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardDataModelClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardDataModelClass.ts index 738460fdb742..d1b32af7d797 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardDataModelClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardDataModelClass.ts @@ -25,6 +25,7 @@ import { EntityClass } from './EntityClass'; export class DashboardDataModelClass extends EntityClass { private dashboardDataModelName = `pw-dashboard-data-model-${uuid()}`; + private projectName = `pw-project-${uuid()}`; service = { name: `pw-dashboard-service-${uuid()}`, serviceType: 'Superset', @@ -58,6 +59,7 @@ export class DashboardDataModelClass extends EntityClass { service: this.service.name, columns: this.children, dataModelType: 'SupersetDataModel', + project: this.projectName, }; serviceResponseData: ResponseDataType = {} as ResponseDataType; diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts index f360e6ce10f2..f6fde67911f1 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts @@ -139,6 +139,16 @@ export const FIELDS: EntityFields[] = [ localSearch: false, skipConditions: ['isNull', 'isNotNull'], // Null and isNotNull conditions are not present for name }, + { + id: 'Project', + name: 'project.keyword', + localSearch: false, + }, + { + id: 'Status', + name: 'status', + localSearch: false, + }, ]; export const OPERATOR = { From dde1495dc560a86a96813a17fe273986be104318 Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Fri, 31 Jan 2025 14:18:00 +0530 Subject: [PATCH 05/11] added Glossary field and some code refactoring --- .../e2e/Features/AdvancedSearch.spec.ts | 103 ++++++++++++++---- .../ui/playwright/utils/advancedSearch.ts | 9 +- 2 files changed, 86 insertions(+), 26 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts index 32e1ea9757e4..998a84cdf7bc 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts @@ -20,6 +20,8 @@ import { MlModelClass } from '../../support/entity/MlModelClass'; import { PipelineClass } from '../../support/entity/PipelineClass'; import { TableClass } from '../../support/entity/TableClass'; import { TopicClass } from '../../support/entity/TopicClass'; +import { Glossary } from '../../support/glossary/Glossary'; +import { GlossaryTerm } from '../../support/glossary/GlossaryTerm'; import { TagClass } from '../../support/tag/TagClass'; import { UserClass } from '../../support/user/UserClass'; import { @@ -28,12 +30,8 @@ import { runRuleGroupTests, verifyAllConditions, } from '../../utils/advancedSearch'; -import { - assignDomain, - createNewPage, - redirectToHomePage, -} from '../../utils/common'; -import { addMultiOwner, assignTag, assignTier } from '../../utils/entity'; +import { createNewPage, redirectToHomePage } from '../../utils/common'; +import { assignTier } from '../../utils/entity'; import { sidebarClick } from '../../utils/sidebar'; test.describe('Advanced Search', { tag: '@advanced-search' }, () => { @@ -58,6 +56,10 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { const pipeline1 = new PipelineClass(); const dashboardDataModel1 = new DashboardDataModelClass(); const dashboardDataModel2 = new DashboardDataModelClass(); + const glossary1 = new Glossary(); + const glossary2 = new Glossary(); + const glossaryTerm1 = new GlossaryTerm(glossary1); + const glossaryTerm2 = new GlossaryTerm(glossary2); let searchCriteria: Record = {}; @@ -84,32 +86,76 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { pipeline1.create(apiContext), dashboardDataModel1.create(apiContext), dashboardDataModel2.create(apiContext), + glossary1.create(apiContext), + glossary2.create(apiContext), + glossaryTerm1.create(apiContext), + glossaryTerm2.create(apiContext), ]); // Add Owner & Tag to the table await table1.visitEntityPage(page); - await addMultiOwner({ - page, - ownerNames: [user1.getUserName()], - activatorBtnDataTestId: 'edit-owner', - resultTestId: 'data-assets-header', - endpoint: table1.endpoint, - type: 'Users', + await table1.patch({ + apiContext, + patchData: [ + { + op: 'add', + value: { + type: 'user', + id: user1.responseData.id, + }, + path: '/owners/0', + }, + { + op: 'add', + value: { + tagFQN: 'PersonalData.Personal', + }, + path: '/tags/0', + }, + { + op: 'add', + path: '/domain', + value: { + id: domain1.responseData.id, + type: 'domain', + name: domain1.responseData.name, + displayName: domain1.responseData.displayName, + }, + }, + ], }); - await assignTag(page, 'PersonalData.Personal'); - await assignDomain(page, domain1.data); await table2.visitEntityPage(page); - await addMultiOwner({ - page, - ownerNames: [user2.getUserName()], - activatorBtnDataTestId: 'edit-owner', - resultTestId: 'data-assets-header', - endpoint: table1.endpoint, - type: 'Users', + await table2.patch({ + apiContext, + patchData: [ + { + op: 'add', + value: { + type: 'user', + id: user2.responseData.id, + }, + path: '/owners/0', + }, + { + op: 'add', + value: { + tagFQN: 'PII.None', + }, + path: '/tags/0', + }, + { + op: 'add', + path: '/domain', + value: { + id: domain2.responseData.id, + type: 'domain', + name: domain2.responseData.name, + displayName: domain2.responseData.displayName, + }, + }, + ], }); - await assignTag(page, 'PII.None'); - await assignDomain(page, domain2.data); // Add Tier To the topic 1 await topic1.visitEntityPage(page); @@ -188,6 +234,11 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { dashboardDataModel2.entity.project, ], status: ['Approved', 'In Review'], + + 'glossary.name.keyword': [ + glossaryTerm1.data.name, + glossaryTerm2.data.name, + ], }; await afterAction(); @@ -214,6 +265,10 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { pipeline1.delete(apiContext), dashboardDataModel1.delete(apiContext), dashboardDataModel2.delete(apiContext), + glossary1.delete(apiContext), + glossary2.delete(apiContext), + glossaryTerm1.delete(apiContext), + glossaryTerm2.delete(apiContext), ]); await afterAction(); }); diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts index f6fde67911f1..2658fd0d4c11 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts @@ -12,7 +12,7 @@ */ import { expect, Locator, Page } from '@playwright/test'; import { clickOutside } from './common'; -import { getEncodedFqn } from './entity'; +import { escapeESReservedCharacters, getEncodedFqn } from './entity'; type EntityFields = { id: string; @@ -149,6 +149,11 @@ export const FIELDS: EntityFields[] = [ name: 'status', localSearch: false, }, + { + id: 'Glossary', + name: 'glossary.name.keyword', + localSearch: false, + }, ]; export const OPERATOR = { @@ -327,7 +332,7 @@ export const checkMustPaths = async ( await expect( page.getByTestId('advance-search-filter-container') - ).toContainText(searchData); + ).toContainText(escapeESReservedCharacters(searchData)); }; export const checkMustNotPaths = async ( From 2903c7d845656719b9c084945c539e615baad607 Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Fri, 31 Jan 2025 18:15:26 +0530 Subject: [PATCH 06/11] updated EntityDataClass with new entities required for AdvanceSearch spec --- .../e2e/Features/AdvancedSearch.spec.ts | 211 +++++++----------- .../support/entity/EntityDataClass.ts | 46 ++++ .../ui/playwright/utils/advancedSearch.ts | 4 +- 3 files changed, 125 insertions(+), 136 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts index 998a84cdf7bc..005a06037763 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts @@ -12,18 +12,7 @@ */ import test from '@playwright/test'; import { SidebarItem } from '../../constant/sidebar'; -import { Domain } from '../../support/domain/Domain'; -import { ApiCollectionClass } from '../../support/entity/ApiCollectionClass'; -import { DashboardClass } from '../../support/entity/DashboardClass'; -import { DashboardDataModelClass } from '../../support/entity/DashboardDataModelClass'; -import { MlModelClass } from '../../support/entity/MlModelClass'; -import { PipelineClass } from '../../support/entity/PipelineClass'; -import { TableClass } from '../../support/entity/TableClass'; -import { TopicClass } from '../../support/entity/TopicClass'; -import { Glossary } from '../../support/glossary/Glossary'; -import { GlossaryTerm } from '../../support/glossary/GlossaryTerm'; -import { TagClass } from '../../support/tag/TagClass'; -import { UserClass } from '../../support/user/UserClass'; +import { EntityDataClass } from '../../support/entity/EntityDataClass'; import { FIELDS, OPERATOR, @@ -38,70 +27,24 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { // use the admin user to login test.use({ storageState: 'playwright/.auth/admin.json' }); - const user1 = new UserClass(); - const user2 = new UserClass(); - const table1 = new TableClass(); - const table2 = new TableClass(); - const topic1 = new TopicClass(); - const topic2 = new TopicClass(); - const tierTag1 = new TagClass({ classification: 'Tier' }); - const tierTag2 = new TagClass({ classification: 'Tier' }); - const dashboard1 = new DashboardClass(); - const dashboard2 = new DashboardClass(); - const domain1 = new Domain(); - const domain2 = new Domain(); - const apiCollection1 = new ApiCollectionClass(); - const apiCollection2 = new ApiCollectionClass(); - const mlModel1 = new MlModelClass(); - const pipeline1 = new PipelineClass(); - const dashboardDataModel1 = new DashboardDataModelClass(); - const dashboardDataModel2 = new DashboardDataModelClass(); - const glossary1 = new Glossary(); - const glossary2 = new Glossary(); - const glossaryTerm1 = new GlossaryTerm(glossary1); - const glossaryTerm2 = new GlossaryTerm(glossary2); - let searchCriteria: Record = {}; test.beforeAll('Setup pre-requests', async ({ browser }) => { test.setTimeout(150000); const { page, apiContext, afterAction } = await createNewPage(browser); - await Promise.all([ - user1.create(apiContext), - user2.create(apiContext), - table1.create(apiContext), - table2.create(apiContext), - topic1.create(apiContext), - topic2.create(apiContext), - tierTag1.create(apiContext), - tierTag2.create(apiContext), - dashboard1.create(apiContext), - dashboard2.create(apiContext), - domain1.create(apiContext), - domain2.create(apiContext), - apiCollection1.create(apiContext), - apiCollection2.create(apiContext), - mlModel1.create(apiContext), - pipeline1.create(apiContext), - dashboardDataModel1.create(apiContext), - dashboardDataModel2.create(apiContext), - glossary1.create(apiContext), - glossary2.create(apiContext), - glossaryTerm1.create(apiContext), - glossaryTerm2.create(apiContext), - ]); + await EntityDataClass.preRequisitesForTests(apiContext); // Add Owner & Tag to the table - await table1.visitEntityPage(page); - await table1.patch({ + await EntityDataClass.table1.visitEntityPage(page); + await EntityDataClass.table1.patch({ apiContext, patchData: [ { op: 'add', value: { type: 'user', - id: user1.responseData.id, + id: EntityDataClass.user1.responseData.id, }, path: '/owners/0', }, @@ -116,24 +59,24 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { op: 'add', path: '/domain', value: { - id: domain1.responseData.id, + id: EntityDataClass.domain1.responseData.id, type: 'domain', - name: domain1.responseData.name, - displayName: domain1.responseData.displayName, + name: EntityDataClass.domain1.responseData.name, + displayName: EntityDataClass.domain1.responseData.displayName, }, }, ], }); - await table2.visitEntityPage(page); - await table2.patch({ + await EntityDataClass.table2.visitEntityPage(page); + await EntityDataClass.table2.patch({ apiContext, patchData: [ { op: 'add', value: { type: 'user', - id: user2.responseData.id, + id: EntityDataClass.user2.responseData.id, }, path: '/owners/0', }, @@ -148,96 +91,119 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { op: 'add', path: '/domain', value: { - id: domain2.responseData.id, + id: EntityDataClass.domain2.responseData.id, type: 'domain', - name: domain2.responseData.name, - displayName: domain2.responseData.displayName, + name: EntityDataClass.domain2.responseData.name, + displayName: EntityDataClass.domain2.responseData.displayName, }, }, ], }); // Add Tier To the topic 1 - await topic1.visitEntityPage(page); - await assignTier(page, tierTag1.data.displayName, topic1.endpoint); + await EntityDataClass.topic1.visitEntityPage(page); + await assignTier( + page, + EntityDataClass.tierTag1.data.displayName, + EntityDataClass.topic1.endpoint + ); // Add Tier To the topic 2 - await topic2.visitEntityPage(page); - await assignTier(page, tierTag2.data.displayName, topic2.endpoint); + await EntityDataClass.topic2.visitEntityPage(page); + await assignTier( + page, + EntityDataClass.tierTag2.data.displayName, + EntityDataClass.topic2.endpoint + ); // Update Search Criteria here searchCriteria = { - 'owners.displayName.keyword': [user1.getUserName(), user2.getUserName()], + 'owners.displayName.keyword': [ + EntityDataClass.user1.getUserName(), + EntityDataClass.user2.getUserName(), + ], 'tags.tagFQN': ['PersonalData.Personal', 'PII.None'], 'tier.tagFQN': [ - tierTag1.responseData.fullyQualifiedName, - tierTag2.responseData.fullyQualifiedName, + EntityDataClass.tierTag1.responseData.fullyQualifiedName, + EntityDataClass.tierTag2.responseData.fullyQualifiedName, + ], + 'service.displayName.keyword': [ + EntityDataClass.table1.service.name, + EntityDataClass.table2.service.name, ], - 'service.displayName.keyword': [table1.service.name, table2.service.name], 'database.displayName.keyword': [ - table1.database.name, - table2.database.name, + EntityDataClass.table1.database.name, + EntityDataClass.table2.database.name, ], 'databaseSchema.displayName.keyword': [ - table1.schema.name, - table2.schema.name, + EntityDataClass.table1.schema.name, + EntityDataClass.table2.schema.name, ], 'columns.name.keyword': ['email', 'shop_id'], 'displayName.keyword': [ - table1.entity.displayName, - table2.entity.displayName, + EntityDataClass.table1.entity.displayName, + EntityDataClass.table2.entity.displayName, + ], + serviceType: [ + EntityDataClass.table1.service.serviceType, + EntityDataClass.table2.service.serviceType, ], - serviceType: [table1.service.serviceType, table2.service.serviceType], 'charts.displayName.keyword': [ - dashboard1.charts.displayName, - dashboard2.charts.displayName, + EntityDataClass.dashboard1.charts.displayName, + EntityDataClass.dashboard2.charts.displayName, ], 'messageSchema.schemaFields.name.keyword': [ - topic1.entity.messageSchema.schemaFields[0].name, - topic1.entity.messageSchema.schemaFields[1].name, + EntityDataClass.topic1.entity.messageSchema.schemaFields[0].name, + EntityDataClass.topic1.entity.messageSchema.schemaFields[1].name, ], 'dataModel.columns.name.keyword': [ - dashboard1.dataModel.columns[0].name, - dashboard1.dataModel.columns[1].name, + EntityDataClass.dashboard1.dataModel.columns[0].name, + EntityDataClass.dashboard1.dataModel.columns[1].name, ], 'dataModels.displayName.keyword': ['orders', 'operations'], dataModelType: [ - dashboard1.dataModel.dataModelType, - dashboard2.dataModel.dataModelType, + EntityDataClass.dashboard1.dataModel.dataModelType, + EntityDataClass.dashboard2.dataModel.dataModelType, ], entityType: ['container', 'dashboard'], 'mlFeatures.name': [ - mlModel1.entity.mlFeatures[0].name, - mlModel1.entity.mlFeatures[1].name, + EntityDataClass.mlModel1.entity.mlFeatures[0].name, + EntityDataClass.mlModel1.entity.mlFeatures[1].name, ], 'fields.name.keyword': ['Columns', 'Description'], tableType: ['Regular', 'Iceberg'], 'tasks.displayName.keyword': [ - pipeline1.entity.tasks[0].displayName, - pipeline1.entity.tasks[1].displayName, + EntityDataClass.pipeline1.entity.tasks[0].displayName, + EntityDataClass.pipeline1.entity.tasks[1].displayName, ], 'domain.displayName.keyword': [ - domain1.data.displayName, - domain2.data.displayName, + EntityDataClass.domain1.data.displayName, + EntityDataClass.domain2.data.displayName, ], 'responseSchema.schemaFields.name.keyword': [ - apiCollection1.apiEndpoint.responseSchema.schemaFields[0].name, - apiCollection1.apiEndpoint.responseSchema.schemaFields[1].name, + EntityDataClass.apiCollection1.apiEndpoint.responseSchema + .schemaFields[0].name, + EntityDataClass.apiCollection1.apiEndpoint.responseSchema + .schemaFields[1].name, ], 'requestSchema.schemaFields.name.keyword': [ - apiCollection1.apiEndpoint.requestSchema.schemaFields[0].name, - apiCollection1.apiEndpoint.requestSchema.schemaFields[1].name, + EntityDataClass.apiCollection1.apiEndpoint.requestSchema.schemaFields[0] + .name, + EntityDataClass.apiCollection1.apiEndpoint.requestSchema.schemaFields[1] + .name, + ], + 'name.keyword': [ + EntityDataClass.table1.entity.name, + EntityDataClass.table2.entity.name, ], - 'name.keyword': [table1.entity.name, table2.entity.name], 'project.keyword': [ - dashboardDataModel1.entity.project, - dashboardDataModel2.entity.project, + EntityDataClass.dashboardDataModel1.entity.project, + EntityDataClass.dashboardDataModel2.entity.project, ], status: ['Approved', 'In Review'], - 'glossary.name.keyword': [ - glossaryTerm1.data.name, - glossaryTerm2.data.name, + EntityDataClass.glossaryTerm1.data.name, + EntityDataClass.glossaryTerm2.data.name, ], }; @@ -246,30 +212,7 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { test.afterAll('Cleanup', async ({ browser }) => { const { apiContext, afterAction } = await createNewPage(browser); - await Promise.all([ - user1.delete(apiContext), - user2.delete(apiContext), - table1.delete(apiContext), - table2.delete(apiContext), - topic1.delete(apiContext), - topic2.delete(apiContext), - tierTag1.delete(apiContext), - tierTag2.delete(apiContext), - dashboard1.delete(apiContext), - dashboard2.delete(apiContext), - domain1.delete(apiContext), - domain2.delete(apiContext), - apiCollection1.delete(apiContext), - apiCollection2.delete(apiContext), - mlModel1.delete(apiContext), - pipeline1.delete(apiContext), - dashboardDataModel1.delete(apiContext), - dashboardDataModel2.delete(apiContext), - glossary1.delete(apiContext), - glossary2.delete(apiContext), - glossaryTerm1.delete(apiContext), - glossaryTerm2.delete(apiContext), - ]); + await EntityDataClass.postRequisitesForTests(apiContext); await afterAction(); }); diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/EntityDataClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/EntityDataClass.ts index d66920a060b2..29e133bd9e76 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/EntityDataClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/EntityDataClass.ts @@ -17,6 +17,13 @@ import { GlossaryTerm } from '../glossary/GlossaryTerm'; import { TagClass } from '../tag/TagClass'; import { TeamClass } from '../team/TeamClass'; import { UserClass } from '../user/UserClass'; +import { ApiCollectionClass } from './ApiCollectionClass'; +import { DashboardClass } from './DashboardClass'; +import { DashboardDataModelClass } from './DashboardDataModelClass'; +import { MlModelClass } from './MlModelClass'; +import { PipelineClass } from './PipelineClass'; +import { TableClass } from './TableClass'; +import { TopicClass } from './TopicClass'; export class EntityDataClass { static readonly domain1 = new Domain(); @@ -31,6 +38,19 @@ export class EntityDataClass { static readonly team1 = new TeamClass(); static readonly team2 = new TeamClass(); static readonly tierTag1 = new TagClass({ classification: 'Tier' }); + static readonly tierTag2 = new TagClass({ classification: 'Tier' }); + static readonly table1 = new TableClass(); + static readonly table2 = new TableClass(); + static readonly topic1 = new TopicClass(); + static readonly topic2 = new TopicClass(); + static readonly dashboard1 = new DashboardClass(); + static readonly dashboard2 = new DashboardClass(); + static readonly mlModel1 = new MlModelClass(); + static readonly pipeline1 = new PipelineClass(); + static readonly dashboardDataModel1 = new DashboardDataModelClass(); + static readonly dashboardDataModel2 = new DashboardDataModelClass(); + static readonly apiCollection1 = new ApiCollectionClass(); + static readonly apiCollection2 = new ApiCollectionClass(); static async preRequisitesForTests(apiContext: APIRequestContext) { // Add pre-requisites for tests @@ -46,6 +66,19 @@ export class EntityDataClass { await this.team1.create(apiContext); await this.team2.create(apiContext); await this.tierTag1.create(apiContext); + await this.tierTag2.create(apiContext); + await this.table1.create(apiContext); + await this.table2.create(apiContext); + await this.topic1.create(apiContext); + await this.topic2.create(apiContext); + await this.dashboard1.create(apiContext); + await this.dashboard2.create(apiContext); + await this.mlModel1.create(apiContext); + await this.pipeline1.create(apiContext); + await this.dashboardDataModel1.create(apiContext); + await this.dashboardDataModel2.create(apiContext); + await this.apiCollection1.create(apiContext); + await this.apiCollection2.create(apiContext); } static async postRequisitesForTests(apiContext: APIRequestContext) { @@ -61,5 +94,18 @@ export class EntityDataClass { await this.team1.delete(apiContext); await this.team2.delete(apiContext); await this.tierTag1.delete(apiContext); + await this.tierTag2.delete(apiContext); + await this.table1.delete(apiContext); + await this.table2.delete(apiContext); + await this.topic1.delete(apiContext); + await this.topic2.delete(apiContext); + await this.dashboard1.delete(apiContext); + await this.dashboard2.delete(apiContext); + await this.mlModel1.delete(apiContext); + await this.pipeline1.delete(apiContext); + await this.dashboardDataModel1.delete(apiContext); + await this.dashboardDataModel2.delete(apiContext); + await this.apiCollection1.delete(apiContext); + await this.apiCollection2.delete(apiContext); } } diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts index 2658fd0d4c11..52081ae1ee21 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts @@ -12,7 +12,7 @@ */ import { expect, Locator, Page } from '@playwright/test'; import { clickOutside } from './common'; -import { escapeESReservedCharacters, getEncodedFqn } from './entity'; +import { getEncodedFqn } from './entity'; type EntityFields = { id: string; @@ -332,7 +332,7 @@ export const checkMustPaths = async ( await expect( page.getByTestId('advance-search-filter-container') - ).toContainText(escapeESReservedCharacters(searchData)); + ).toContainText(searchData); }; export const checkMustNotPaths = async ( From 4f1c866d13fe63db86f7bbd70d7f5c9a9ef8346f Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Mon, 3 Feb 2025 18:51:25 +0530 Subject: [PATCH 07/11] removed some hard coded field values --- .../ui/playwright/e2e/Features/AdvancedSearch.spec.ts | 8 ++++++-- .../ui/playwright/support/entity/DashboardClass.ts | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts index 005a06037763..9f73ae72fae7 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts @@ -11,6 +11,7 @@ * limitations under the License. */ import test from '@playwright/test'; +import { CUSTOM_PROPERTIES_ENTITIES } from '../../constant/customProperty'; import { SidebarItem } from '../../constant/sidebar'; import { EntityDataClass } from '../../support/entity/EntityDataClass'; import { @@ -146,7 +147,7 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { ], serviceType: [ EntityDataClass.table1.service.serviceType, - EntityDataClass.table2.service.serviceType, + EntityDataClass.topic1.service.serviceType, ], 'charts.displayName.keyword': [ EntityDataClass.dashboard1.charts.displayName, @@ -165,7 +166,10 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { EntityDataClass.dashboard1.dataModel.dataModelType, EntityDataClass.dashboard2.dataModel.dataModelType, ], - entityType: ['container', 'dashboard'], + entityType: [ + CUSTOM_PROPERTIES_ENTITIES.entity_container.name, + CUSTOM_PROPERTIES_ENTITIES.entity_dashboard.name, + ], 'mlFeatures.name': [ EntityDataClass.mlModel1.entity.mlFeatures[0].name, EntityDataClass.mlModel1.entity.mlFeatures[1].name, diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts index 83c80ce429f8..b8d451d9e7c0 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts @@ -60,6 +60,13 @@ export class DashboardClass extends EntityClass { dataTypeDisplay: 'varchar', description: 'merchant', }, + { + name: 'notes', + dataType: 'VARCHAR', + dataLength: 256, + dataTypeDisplay: 'varchar', + description: 'merchant', + }, { name: 'country_name', dataType: 'VARCHAR', From 60a711bf05ed4a44eb38600b20333f1067e74145 Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Tue, 4 Feb 2025 11:28:25 +0530 Subject: [PATCH 08/11] updated advancedSearch with additional fields --- .../main/resources/ui/playwright.config.ts | 1 + .../e2e/Features/AdvancedSearch.spec.ts | 18 +++++------------ .../support/entity/DashboardClass.ts | 3 ++- .../support/entity/EntityDataClass.ts | 12 ++++++++++- .../support/entity/SearchIndexClass.ts | 8 ++++++++ .../ui/playwright/utils/advancedSearch.ts | 20 ------------------- 6 files changed, 27 insertions(+), 35 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright.config.ts b/openmetadata-ui/src/main/resources/ui/playwright.config.ts index c47a3699213b..a0945e7e15a0 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright.config.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright.config.ts @@ -91,6 +91,7 @@ export default defineConfig({ // Increase timeout for the test timeout: 60000, + testMatch: ['**/AdvancedSearch.spec.ts'], /* Run your local dev server before starting the tests */ // webServer: { diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts index 9f73ae72fae7..8c42b7f9d6ef 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts @@ -11,7 +11,6 @@ * limitations under the License. */ import test from '@playwright/test'; -import { CUSTOM_PROPERTIES_ENTITIES } from '../../constant/customProperty'; import { SidebarItem } from '../../constant/sidebar'; import { EntityDataClass } from '../../support/entity/EntityDataClass'; import { @@ -161,21 +160,18 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { EntityDataClass.dashboard1.dataModel.columns[0].name, EntityDataClass.dashboard1.dataModel.columns[1].name, ], - 'dataModels.displayName.keyword': ['orders', 'operations'], dataModelType: [ EntityDataClass.dashboard1.dataModel.dataModelType, EntityDataClass.dashboard2.dataModel.dataModelType, ], entityType: [ - CUSTOM_PROPERTIES_ENTITIES.entity_container.name, - CUSTOM_PROPERTIES_ENTITIES.entity_dashboard.name, + EntityDataClass.dashboard1.type.toLowerCase(), + EntityDataClass.table1.type.toLowerCase(), ], - 'mlFeatures.name': [ - EntityDataClass.mlModel1.entity.mlFeatures[0].name, - EntityDataClass.mlModel1.entity.mlFeatures[1].name, + 'fields.name.keyword': [ + EntityDataClass.searchIndex1.entity.fields[1].name, + EntityDataClass.searchIndex1.entity.fields[3].name, ], - 'fields.name.keyword': ['Columns', 'Description'], - tableType: ['Regular', 'Iceberg'], 'tasks.displayName.keyword': [ EntityDataClass.pipeline1.entity.tasks[0].displayName, EntityDataClass.pipeline1.entity.tasks[1].displayName, @@ -205,10 +201,6 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { EntityDataClass.dashboardDataModel2.entity.project, ], status: ['Approved', 'In Review'], - 'glossary.name.keyword': [ - EntityDataClass.glossaryTerm1.data.name, - EntityDataClass.glossaryTerm2.data.name, - ], }; await afterAction(); diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts index b8d451d9e7c0..6350f15ce96b 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/DashboardClass.ts @@ -90,12 +90,13 @@ export class DashboardClass extends EntityClass { {} as ResponseDataWithServiceType; chartsResponseData: ResponseDataType = {} as ResponseDataType; - constructor(name?: string) { + constructor(name?: string, dataModelType = 'SupersetDataModel') { super(EntityTypeEndpoint.Dashboard); this.service.name = name ?? this.service.name; this.type = 'Dashboard'; this.serviceCategory = SERVICE_TYPE.Dashboard; this.serviceType = ServiceTypes.DASHBOARD_SERVICES; + this.dataModel.dataModelType = dataModelType; } async create(apiContext: APIRequestContext) { diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/EntityDataClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/EntityDataClass.ts index 29e133bd9e76..c66020bb4a96 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/EntityDataClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/EntityDataClass.ts @@ -22,6 +22,7 @@ import { DashboardClass } from './DashboardClass'; import { DashboardDataModelClass } from './DashboardDataModelClass'; import { MlModelClass } from './MlModelClass'; import { PipelineClass } from './PipelineClass'; +import { SearchIndexClass } from './SearchIndexClass'; import { TableClass } from './TableClass'; import { TopicClass } from './TopicClass'; @@ -44,13 +45,18 @@ export class EntityDataClass { static readonly topic1 = new TopicClass(); static readonly topic2 = new TopicClass(); static readonly dashboard1 = new DashboardClass(); - static readonly dashboard2 = new DashboardClass(); + static readonly dashboard2 = new DashboardClass( + 'Dashboard 2', + 'LookMlExplore' + ); static readonly mlModel1 = new MlModelClass(); static readonly pipeline1 = new PipelineClass(); static readonly dashboardDataModel1 = new DashboardDataModelClass(); static readonly dashboardDataModel2 = new DashboardDataModelClass(); static readonly apiCollection1 = new ApiCollectionClass(); static readonly apiCollection2 = new ApiCollectionClass(); + static readonly searchIndex1 = new SearchIndexClass(); + static readonly searchIndex2 = new SearchIndexClass(); static async preRequisitesForTests(apiContext: APIRequestContext) { // Add pre-requisites for tests @@ -79,6 +85,8 @@ export class EntityDataClass { await this.dashboardDataModel2.create(apiContext); await this.apiCollection1.create(apiContext); await this.apiCollection2.create(apiContext); + await this.searchIndex1.create(apiContext); + await this.searchIndex2.create(apiContext); } static async postRequisitesForTests(apiContext: APIRequestContext) { @@ -107,5 +115,7 @@ export class EntityDataClass { await this.dashboardDataModel2.delete(apiContext); await this.apiCollection1.delete(apiContext); await this.apiCollection2.delete(apiContext); + await this.searchIndex1.delete(apiContext); + await this.searchIndex2.delete(apiContext); } } diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/SearchIndexClass.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/SearchIndexClass.ts index 46bd8b9c61df..6cb7f3c2b142 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/entity/SearchIndexClass.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/entity/SearchIndexClass.ts @@ -52,6 +52,14 @@ export class SearchIndexClass extends EntityClass { fullyQualifiedName: `${this.fqn}.name`, tags: [], }, + { + name: 'databaseSchema', + dataType: 'TEXT', + dataTypeDisplay: 'text', + description: 'Table Entity Database Schema.', + fullyQualifiedName: `${this.fqn}.databaseSchema`, + tags: [], + }, { name: 'description', dataType: 'TEXT', diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts index 52081ae1ee21..78fa52c1ddc5 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts @@ -83,11 +83,6 @@ export const FIELDS: EntityFields[] = [ name: 'dataModel.columns.name.keyword', localSearch: false, }, - { - id: 'Data Model', - name: 'dataModels.displayName.keyword', - localSearch: false, - }, { id: 'Data Model Type', name: 'dataModelType', @@ -98,21 +93,11 @@ export const FIELDS: EntityFields[] = [ name: 'entityType', localSearch: false, }, - { - id: 'Feature', - name: 'mlFeatures.name', - localSearch: false, - }, { id: 'Field', name: 'fields.name.keyword', localSearch: false, }, - { - id: 'Table Type', - name: 'tableType', - localSearch: false, - }, { id: 'Task', name: 'tasks.displayName.keyword', @@ -149,11 +134,6 @@ export const FIELDS: EntityFields[] = [ name: 'status', localSearch: false, }, - { - id: 'Glossary', - name: 'glossary.name.keyword', - localSearch: false, - }, ]; export const OPERATOR = { From ba36114b8fe128a80306218d0f9786c09800241d Mon Sep 17 00:00:00 2001 From: rushikesh1799 Date: Tue, 4 Feb 2025 13:51:16 +0530 Subject: [PATCH 09/11] removed failing tests of additional fields --- .../ui/playwright/e2e/Features/AdvancedSearch.spec.ts | 8 -------- .../resources/ui/playwright/utils/advancedSearch.ts | 10 ---------- 2 files changed, 18 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts index 8c42b7f9d6ef..064488cb3a83 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AdvancedSearch.spec.ts @@ -148,10 +148,6 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { EntityDataClass.table1.service.serviceType, EntityDataClass.topic1.service.serviceType, ], - 'charts.displayName.keyword': [ - EntityDataClass.dashboard1.charts.displayName, - EntityDataClass.dashboard2.charts.displayName, - ], 'messageSchema.schemaFields.name.keyword': [ EntityDataClass.topic1.entity.messageSchema.schemaFields[0].name, EntityDataClass.topic1.entity.messageSchema.schemaFields[1].name, @@ -164,10 +160,6 @@ test.describe('Advanced Search', { tag: '@advanced-search' }, () => { EntityDataClass.dashboard1.dataModel.dataModelType, EntityDataClass.dashboard2.dataModel.dataModelType, ], - entityType: [ - EntityDataClass.dashboard1.type.toLowerCase(), - EntityDataClass.table1.type.toLowerCase(), - ], 'fields.name.keyword': [ EntityDataClass.searchIndex1.entity.fields[1].name, EntityDataClass.searchIndex1.entity.fields[3].name, diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts index 78fa52c1ddc5..e85d71a6d974 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts @@ -68,11 +68,6 @@ export const FIELDS: EntityFields[] = [ name: 'serviceType', localSearch: false, }, - { - id: 'Chart', - name: 'charts.displayName.keyword', - localSearch: false, - }, { id: 'Schema Field', name: 'messageSchema.schemaFields.name.keyword', @@ -88,11 +83,6 @@ export const FIELDS: EntityFields[] = [ name: 'dataModelType', localSearch: false, }, - { - id: 'Entity Type', - name: 'entityType', - localSearch: false, - }, { id: 'Field', name: 'fields.name.keyword', From 03bd6b486c709c9fd2563a93ca39d20e8c29f4ee Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 6 Feb 2025 16:45:41 +0530 Subject: [PATCH 10/11] remove failing fields for now to make the test green --- .../ui/playwright/utils/advancedSearch.ts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts index e85d71a6d974..e3e5feae0a17 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/advancedSearch.ts @@ -98,16 +98,6 @@ export const FIELDS: EntityFields[] = [ name: 'domain.displayName.keyword', localSearch: false, }, - { - id: 'Response Schema Field', - name: 'responseSchema.schemaFields.name.keyword', - localSearch: false, - }, - { - id: 'Request Schema Field', - name: 'requestSchema.schemaFields.name.keyword', - localSearch: false, - }, { id: 'Name', name: 'name.keyword', @@ -119,11 +109,6 @@ export const FIELDS: EntityFields[] = [ name: 'project.keyword', localSearch: false, }, - { - id: 'Status', - name: 'status', - localSearch: false, - }, ]; export const OPERATOR = { From 74ab95a7fbb0e95fe04fe8e951e96efd228afcee Mon Sep 17 00:00:00 2001 From: Ashish Gupta Date: Thu, 6 Feb 2025 17:51:22 +0530 Subject: [PATCH 11/11] remove the config changes from the PR --- openmetadata-ui/src/main/resources/ui/playwright.config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright.config.ts b/openmetadata-ui/src/main/resources/ui/playwright.config.ts index a0945e7e15a0..c47a3699213b 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright.config.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright.config.ts @@ -91,7 +91,6 @@ export default defineConfig({ // Increase timeout for the test timeout: 60000, - testMatch: ['**/AdvancedSearch.spec.ts'], /* Run your local dev server before starting the tests */ // webServer: {