Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat persona table page #18550

Merged
merged 89 commits into from
Feb 27, 2025
Merged
Show file tree
Hide file tree
Changes from 86 commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
bab9d35
support table details customization page
chirag-madlani Nov 7, 2024
d99febf
update widget preview
chirag-madlani Nov 7, 2024
af65b3d
fix schema tab
chirag-madlani Nov 7, 2024
a4b5f74
Merge branch 'main' into feat-persona-table-page
chirag-madlani Nov 14, 2024
fb1a1d9
fix issue around save layout across tabs
chirag-madlani Nov 14, 2024
1195d3c
fix unit tests
chirag-madlani Nov 14, 2024
b4215b9
fix tab label with customized one
chirag-madlani Nov 14, 2024
8b89010
Merge branch 'main' into feat-persona-table-page
chirag-madlani Nov 14, 2024
97d573c
Merge branch 'main' into feat-persona-table-page
chirag-madlani Jan 28, 2025
b699cfa
misc fixes for persona edit
chirag-madlani Jan 28, 2025
0b64256
update
chirag-madlani Jan 30, 2025
5eaff9a
update topic with persona changes
chirag-madlani Jan 31, 2025
4a2f847
Merge branch 'main' into feat-persona-table-page
chirag-madlani Jan 31, 2025
4be2471
support dashboard data model
chirag-madlani Feb 3, 2025
abc2c55
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 3, 2025
fd45499
support data assets with customization
chirag-madlani Feb 4, 2025
0b6c326
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 4, 2025
196b78d
support pipeline with customize page
chirag-madlani Feb 4, 2025
a8684b4
fix console errors
chirag-madlani Feb 5, 2025
5c40353
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 5, 2025
1cc5ab1
fix tests
chirag-madlani Feb 5, 2025
5a6147c
fix sonar cloud issues
chirag-madlani Feb 5, 2025
823ab1b
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 5, 2025
547864a
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 6, 2025
d5e7973
update code for data assets
chirag-madlani Feb 7, 2025
cdb3c7c
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 7, 2025
47e0592
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 8, 2025
7675449
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 12, 2025
4580e6f
remove fqn prop as
chirag-madlani Feb 12, 2025
93c660f
create generic tabs
chirag-madlani Feb 13, 2025
ecacf66
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 13, 2025
581d706
update
chirag-madlani Feb 13, 2025
ea6df66
support customization for domain page
chirag-madlani Feb 13, 2025
dbc4866
update
chirag-madlani Feb 14, 2025
7203ffa
fix errors
chirag-madlani Feb 14, 2025
38fc61f
fix tests
chirag-madlani Feb 14, 2025
7a65be2
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 14, 2025
3627fb3
update
chirag-madlani Feb 14, 2025
33e35df
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 14, 2025
0cefc8e
fix detail pages
chirag-madlani Feb 14, 2025
e5b5560
fix playwright tests
chirag-madlani Feb 14, 2025
c2a915d
fix unit tests
chirag-madlani Feb 14, 2025
5bd40ec
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 14, 2025
51d7104
fix unit tests
chirag-madlani Feb 17, 2025
783e1a8
update generic tab
chirag-madlani Feb 17, 2025
dc32378
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 17, 2025
5ea86fe
update
chirag-madlani Feb 18, 2025
bb8082e
fix tests
chirag-madlani Feb 19, 2025
b915001
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 19, 2025
2d2af29
fix tests
chirag-madlani Feb 19, 2025
3588c1b
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 19, 2025
9da8664
fix data test id for tags and glossary terms
chirag-madlani Feb 19, 2025
466e5cf
fix version pages
chirag-madlani Feb 19, 2025
223a05a
fix unit test
chirag-madlani Feb 19, 2025
cf0b7fc
update page enum with api collection
chirag-madlani Feb 20, 2025
d262992
update custom property to use generic provider
chirag-madlani Feb 20, 2025
238e1fb
fix api collection & endpoint
chirag-madlani Feb 20, 2025
c1349fd
fix apiCollection and apiEndpoint customization
chirag-madlani Feb 20, 2025
a846f96
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 20, 2025
41c0da3
fix container test and fix sonar
chirag-madlani Feb 20, 2025
4b34f88
fix tests
chirag-madlani Feb 20, 2025
25f68cd
fix delete playwright
chirag-madlani Feb 20, 2025
cc992a2
support metric entity
chirag-madlani Feb 21, 2025
f228a79
add metric as page type to customization
chirag-madlani Feb 21, 2025
419bac6
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 21, 2025
c89d3a0
fix container unit tests
chirag-madlani Feb 22, 2025
d3ff47e
fix metric tests
chirag-madlani Feb 22, 2025
32f6583
fix ml model customization
chirag-madlani Feb 22, 2025
4bdbcbe
fix test for mlmodel page
chirag-madlani Feb 22, 2025
4ba3ca4
fix Metric details tests
chirag-madlani Feb 22, 2025
6ebc687
fix tests
chirag-madlani Feb 22, 2025
3d0b9a6
fix test for database schema version page
chirag-madlani Feb 22, 2025
0a9d3c2
reset max failure for playwright
chirag-madlani Feb 23, 2025
3751be7
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 23, 2025
ee5f4f5
improve icons
chirag-madlani Feb 24, 2025
f4d9a3d
address comments
chirag-madlani Feb 24, 2025
7e58151
update translation
chirag-madlani Feb 24, 2025
ab3b971
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 24, 2025
50bff72
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 25, 2025
25516b2
update as per comments
chirag-madlani Feb 25, 2025
23774fd
update localization
chirag-madlani Feb 25, 2025
6676e24
update function signature
chirag-madlani Feb 26, 2025
0084844
update file names and fix imports
chirag-madlani Feb 26, 2025
14674ca
address comments
chirag-madlani Feb 26, 2025
7bb585b
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 26, 2025
96d7fd9
support tags and glossary to domain
chirag-madlani Feb 26, 2025
9680a4f
fix failing tests
chirag-madlani Feb 27, 2025
d0e6f3e
option to show hide task handlers
chirag-madlani Feb 27, 2025
aa914c5
Merge branch 'main' into feat-persona-table-page
chirag-madlani Feb 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,6 @@
}
}
},
"required": ["name", "database", "service"],
"required": ["id", "name", "database", "service"],
"additionalProperties": false
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@
"SearchIndex",
"Glossary",
"GlossaryTerm",
"Domain"
"Domain",
"APICollection",
"APIEndpoint",
"Metric",
"MlModel"
]
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ export const LIST_OF_FIELDS_TO_EDIT_NOT_TO_BE_PRESENT = [
},
{
containerSelector:
'[data-testid="entity-right-panel"] [data-testid="tags-container"]',
'[data-testid="KnowledgePanel.Tags"] [data-testid="tags-container"]',
elementSelector: '[data-testid="add-tag"]',
},
{
containerSelector:
'[data-testid="entity-right-panel"] [data-testid="glossary-container"]',
'[data-testid="KnowledgePanel.GlossaryTerms"] [data-testid="glossary-container"]',
elementSelector: '[data-testid="add-tag"]',
},
];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ test.describe('Glossary tests', () => {

// Dashboard Entity Right Panel
await page.click(
'[data-testid="entity-right-panel"] [data-testid="glossary-container"] [data-testid="add-tag"]'
'[data-testid="KnowledgePanel.GlossaryTerms"] [data-testid="glossary-container"] [data-testid="add-tag"]'
);

// Select 1st term
Expand Down Expand Up @@ -472,7 +472,7 @@ test.describe('Glossary tests', () => {

// Add non mutually exclusive tags
await page.click(
'[data-testid="entity-right-panel"] [data-testid="glossary-container"] [data-testid="add-tag"]'
'[data-testid="KnowledgePanel.GlossaryTerms"] [data-testid="glossary-container"] [data-testid="add-tag"]'
);

// Select 1st term
Expand Down Expand Up @@ -523,7 +523,7 @@ test.describe('Glossary tests', () => {

// Check if the terms are present
const glossaryContainer = page.locator(
'[data-testid="entity-right-panel"] [data-testid="glossary-container"]'
'[data-testid="KnowledgePanel.GlossaryTerms"] [data-testid="glossary-container"]'
);
const glossaryContainerText = await glossaryContainer.innerText();

Expand All @@ -533,7 +533,7 @@ test.describe('Glossary tests', () => {
// Check if the icons are present

const icons = page.locator(
'[data-testid="entity-right-panel"] [data-testid="glossary-container"] [data-testid="glossary-icon"]'
'[data-testid="KnowledgePanel.GlossaryTerms"] [data-testid="glossary-container"] [data-testid="glossary-icon"]'
);

expect(await icons.count()).toBe(2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ export class EntityClass {
await removeTag(page, [tag1]);

await page
.getByTestId('entity-right-panel')
.getByTestId('KnowledgePanel.Tags')
.getByTestId('tags-container')
.getByTestId('Add')
.isVisible();
Expand Down Expand Up @@ -265,7 +265,7 @@ export class EntityClass {
await removeGlossaryTerm(page, [glossaryTerm1, glossaryTerm2]);

await page
.getByTestId('entity-right-panel')
.getByTestId('KnowledgePanel.GlossaryTerms')
.getByTestId('glossary-container')
.getByTestId('Add')
.isVisible();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,187 +92,197 @@ export class EntityDataClass {
creationConfig?: EntityDataClassCreationConfig
) {
// Add pre-requisites for tests
await this.domain1.create(apiContext);
await this.domain2.create(apiContext);
await this.glossary1.create(apiContext);
await this.glossary2.create(apiContext);
await this.glossaryTerm1.create(apiContext);
await this.glossaryTerm2.create(apiContext);
await this.user1.create(apiContext);
await this.user2.create(apiContext);
await this.user3.create(apiContext);
await this.team1.create(apiContext);
await this.team2.create(apiContext);
await this.tierTag1.create(apiContext);
await this.tierTag2.create(apiContext);
const promises = [
this.domain1.create(apiContext),
this.domain2.create(apiContext),
this.glossary1.create(apiContext),
this.glossary2.create(apiContext),

this.user1.create(apiContext),
this.user2.create(apiContext),
this.user3.create(apiContext),
this.team1.create(apiContext),
this.team2.create(apiContext),
this.tierTag1.create(apiContext),
this.tierTag2.create(apiContext),
];

if (creationConfig?.all || creationConfig?.table) {
await this.table1.create(apiContext);
await this.table2.create(apiContext);
promises.push(this.table1.create(apiContext));
promises.push(this.table2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.topic) {
await this.topic1.create(apiContext);
await this.topic2.create(apiContext);
promises.push(this.topic1.create(apiContext));
promises.push(this.topic2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.dashboard) {
await this.dashboard1.create(apiContext);
await this.dashboard2.create(apiContext);
promises.push(this.dashboard1.create(apiContext));
promises.push(this.dashboard2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.mlModel) {
await this.mlModel1.create(apiContext);
await this.mlModel2.create(apiContext);
promises.push(this.mlModel1.create(apiContext));
promises.push(this.mlModel2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.pipeline) {
await this.pipeline1.create(apiContext);
await this.pipeline2.create(apiContext);
promises.push(this.pipeline1.create(apiContext));
promises.push(this.pipeline2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.dashboardDataModel) {
await this.dashboardDataModel1.create(apiContext);
await this.dashboardDataModel2.create(apiContext);
promises.push(this.dashboardDataModel1.create(apiContext));
promises.push(this.dashboardDataModel2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.apiCollection) {
await this.apiCollection1.create(apiContext);
await this.apiCollection2.create(apiContext);
promises.push(this.apiCollection1.create(apiContext));
promises.push(this.apiCollection2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.apiEndpoint) {
await this.apiEndpoint1.create(apiContext);
await this.apiEndpoint2.create(apiContext);
promises.push(this.apiEndpoint1.create(apiContext));
promises.push(this.apiEndpoint2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.storedProcedure) {
await this.storedProcedure1.create(apiContext);
await this.storedProcedure2.create(apiContext);
promises.push(this.storedProcedure1.create(apiContext));
promises.push(this.storedProcedure2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.searchIndex) {
await this.searchIndex1.create(apiContext);
await this.searchIndex2.create(apiContext);
promises.push(this.searchIndex1.create(apiContext));
promises.push(this.searchIndex2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.container) {
await this.container1.create(apiContext);
await this.container2.create(apiContext);
promises.push(this.container1.create(apiContext));
promises.push(this.container2.create(apiContext));
}
if (creationConfig?.all || creationConfig?.databaseService) {
await this.databaseService.create(apiContext);
promises.push(this.databaseService.create(apiContext));
}
if (creationConfig?.all || creationConfig?.database) {
await this.database.create(apiContext);
promises.push(this.database.create(apiContext));
}
if (creationConfig?.all || creationConfig?.databaseSchema) {
await this.databaseSchema.create(apiContext);
promises.push(this.databaseSchema.create(apiContext));
}
if (creationConfig?.all || creationConfig?.apiService) {
await this.apiService.create(apiContext);
promises.push(this.apiService.create(apiContext));
}
if (creationConfig?.all || creationConfig?.dashboardService) {
await this.dashboardService.create(apiContext);
promises.push(this.dashboardService.create(apiContext));
}
if (creationConfig?.all || creationConfig?.messagingService) {
await this.messagingService.create(apiContext);
promises.push(this.messagingService.create(apiContext));
}
if (creationConfig?.all || creationConfig?.mlmodelService) {
await this.mlmodelService.create(apiContext);
promises.push(this.mlmodelService.create(apiContext));
}
if (creationConfig?.all || creationConfig?.pipelineService) {
await this.pipelineService.create(apiContext);
promises.push(this.pipelineService.create(apiContext));
}
if (creationConfig?.all || creationConfig?.searchIndexService) {
await this.searchIndexService.create(apiContext);
promises.push(this.searchIndexService.create(apiContext));
}
if (creationConfig?.all || creationConfig?.storageService) {
await this.storageService.create(apiContext);
promises.push(this.storageService.create(apiContext));
}

await Promise.allSettled(promises);
await Promise.allSettled([
this.glossaryTerm1.create(apiContext),
this.glossaryTerm2.create(apiContext),
]);
}

static async postRequisitesForTests(
apiContext: APIRequestContext,
creationConfig?: EntityDataClassCreationConfig
) {
// Add post-requisites for tests
await this.domain1.delete(apiContext);
await this.domain2.delete(apiContext);
// deleting glossary will also delete the glossary terms
await this.glossary1.delete(apiContext);
await this.glossary2.delete(apiContext);
await this.user1.delete(apiContext);
await this.user2.delete(apiContext);
await this.user3.delete(apiContext);
await this.team1.delete(apiContext);
await this.team2.delete(apiContext);
await this.tierTag1.delete(apiContext);
await this.tierTag2.delete(apiContext);
const promises = [
this.domain1.delete(apiContext),
this.domain2.delete(apiContext),
// deleting glossary will also delete the glossary terms
this.glossary1.delete(apiContext),
this.glossary2.delete(apiContext),
this.user1.delete(apiContext),
this.user2.delete(apiContext),
this.user3.delete(apiContext),
this.team1.delete(apiContext),
this.team2.delete(apiContext),
this.tierTag1.delete(apiContext),
this.tierTag2.delete(apiContext),
];

if (creationConfig?.all || creationConfig?.table) {
await this.table1.delete(apiContext);
await this.table2.delete(apiContext);
promises.push(this.table1.delete(apiContext));
promises.push(this.table2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.topic) {
await this.topic1.delete(apiContext);
await this.topic2.delete(apiContext);
promises.push(this.topic1.delete(apiContext));
promises.push(this.topic2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.dashboard) {
await this.dashboard1.delete(apiContext);
await this.dashboard2.delete(apiContext);
promises.push(this.dashboard1.delete(apiContext));
promises.push(this.dashboard2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.mlModel) {
await this.mlModel1.delete(apiContext);
await this.mlModel2.delete(apiContext);
promises.push(this.mlModel1.delete(apiContext));
promises.push(this.mlModel2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.pipeline) {
await this.pipeline1.delete(apiContext);
await this.pipeline2.delete(apiContext);
promises.push(this.pipeline1.delete(apiContext));
promises.push(this.pipeline2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.dashboardDataModel) {
await this.dashboardDataModel1.delete(apiContext);
await this.dashboardDataModel2.delete(apiContext);
promises.push(this.dashboardDataModel1.delete(apiContext));
promises.push(this.dashboardDataModel2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.apiCollection) {
await this.apiCollection1.delete(apiContext);
await this.apiCollection2.delete(apiContext);
promises.push(this.apiCollection1.delete(apiContext));
promises.push(this.apiCollection2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.apiEndpoint) {
await this.apiEndpoint1.delete(apiContext);
await this.apiEndpoint2.delete(apiContext);
promises.push(this.apiEndpoint1.delete(apiContext));
promises.push(this.apiEndpoint2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.storedProcedure) {
await this.storedProcedure1.delete(apiContext);
await this.storedProcedure2.delete(apiContext);
promises.push(this.storedProcedure1.delete(apiContext));
promises.push(this.storedProcedure2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.searchIndex) {
await this.searchIndex1.delete(apiContext);
await this.searchIndex2.delete(apiContext);
promises.push(this.searchIndex1.delete(apiContext));
promises.push(this.searchIndex2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.container) {
await this.container1.delete(apiContext);
await this.container2.delete(apiContext);
promises.push(this.container1.delete(apiContext));
promises.push(this.container2.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.databaseService) {
await this.databaseService.delete(apiContext);
promises.push(this.databaseService.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.database) {
await this.database.delete(apiContext);
promises.push(this.database.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.databaseSchema) {
await this.databaseSchema.delete(apiContext);
promises.push(this.databaseSchema.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.apiService) {
await this.apiService.delete(apiContext);
promises.push(this.apiService.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.dashboardService) {
await this.dashboardService.delete(apiContext);
promises.push(this.dashboardService.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.messagingService) {
await this.messagingService.delete(apiContext);
promises.push(this.messagingService.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.mlmodelService) {
await this.mlmodelService.delete(apiContext);
promises.push(this.mlmodelService.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.pipelineService) {
await this.pipelineService.delete(apiContext);
promises.push(this.pipelineService.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.searchIndexService) {
await this.searchIndexService.delete(apiContext);
promises.push(this.searchIndexService.delete(apiContext));
}
if (creationConfig?.all || creationConfig?.storageService) {
await this.storageService.delete(apiContext);
promises.push(this.storageService.delete(apiContext));
}

return await Promise.allSettled(promises);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ class RedshiftWithDBTIngestionClass extends ServiceBaseClass {

await expect(
page
.getByTestId('entity-right-panel')
.getByTestId('KnowledgePanel.Tags')
.getByTestId('tags-container')
.getByTestId('entity-tags')
).toContainText(DBT.tagName);
Expand Down
Loading
Loading