Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

300 lines
9.5 KiB
TypeScript
Raw Normal View History

/*
* Copyright 2024 Collate.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import test from '@playwright/test';
import { SidebarItem } from '../../constant/sidebar';
import { EntityDataClass } from '../../support/entity/EntityDataClass';
import { EntityDataClassCreationConfig } from '../../support/entity/EntityDataClass.interface';
import { TableClass } from '../../support/entity/TableClass';
import { Glossary } from '../../support/glossary/Glossary';
import { GlossaryTerm } from '../../support/glossary/GlossaryTerm';
import { UserClass } from '../../support/user/UserClass';
import {
FIELDS,
OPERATOR,
runRuleGroupTests,
runRuleGroupTestsWithNonExistingValue,
verifyAllConditions,
} from '../../utils/advancedSearch';
import { createNewPage, redirectToHomePage } from '../../utils/common';
import { assignTier } from '../../utils/entity';
import { sidebarClick } from '../../utils/sidebar';
const creationConfig: EntityDataClassCreationConfig = {
table: true,
topic: true,
dashboard: true,
mlModel: true,
pipeline: true,
dashboardDataModel: true,
apiCollection: true,
searchIndex: true,
container: true,
entityDetails: true,
};
const user = new UserClass();
const table = new TableClass(undefined, 'Regular');
let glossaryEntity: Glossary;
test.describe('Advanced Search', { tag: '@advanced-search' }, () => {
// use the admin user to login
test.use({ storageState: 'playwright/.auth/admin.json' });
let searchCriteria: Record<string, any> = {};
test.beforeAll('Setup pre-requests', async ({ browser }) => {
test.slow(true);
const { page, apiContext, afterAction } = await createNewPage(browser);
await EntityDataClass.preRequisitesForTests(apiContext, creationConfig);
await user.create(apiContext);
glossaryEntity = new Glossary(undefined, [
{
id: user.responseData.id,
type: 'user',
name: user.responseData.name,
displayName: user.responseData.displayName,
},
]);
const glossaryTermEntity = new GlossaryTerm(glossaryEntity);
await glossaryEntity.create(apiContext);
await glossaryTermEntity.create(apiContext);
await table.create(apiContext);
// Add Owner & Tag to the table
feat(ui): revamp landing page (#21691) * fix: minor style for customisation pages * feat(ui): customisation of landing page (#21692) * add customise header section * fix react grid layout for widgets * fix widget height and refactor code * fix tests * address pr comments and added unit test * fix unit test * fix spacing issues and addressed pr comments * feat(ui): customise home page banner (#21793) * add structure for customise home modal * feat: customise banner background color * refactor css * add unit tests * fix color change functionality * minor fix * refactor code * minor refector * feat(ui): new layout for home page (#21901) * update new layout for home page * add unit tests * feat(ui): widgets selection modal (#21974) * add selection widgets to modal * implement add widgets functionality * fix placeholderWidgetKey for addWidget * fix handleApply call * fix erros after merging to main for react upgrade * add tests * refactor css for widget card * fix tests * add images for widgets * add localisation * fix test * Add json files for new landing page (#22116) * chore(ci): improve e2e runners with conditions (#22084) * MINOR: Fix pytest 3.9 (#22085) * feat: add support for DBX system metrics (#22044) * feat: add support for DBX system metrics * feat: add support for DBX system metrics * fix: added WRITE back * fix: failing test cases * fix: failing test * Doc: Meta Description Updation (#22074) * Doc: 404 Images Fixing (#22083) * Doc: Version change along with 404 Error Fixing (#22053) Co-authored-by: “Rounak <“rounakpreet.d@deuexsolutions.com”> * Minor: Fix the token expiry options order (#22049) * Fix the token expiry options order * Improve the logic and fix playwright tests * fix sonar cloud issue * Fix the type error * Feature #20137 Move Glossary Terms to any level including other glossaries (#21867) * allow changing of glossary term * Draft ES Index Update for Glossary term move * ES Upates in a more faster one shot bulk update * Remove validations on Parent Glossary Hierarchy and Include Circular Glossary Term Validations * Introduced a new PUT api for glossaryTerms move operation * Optimised moveGlossaryTerm * Added Transaction Scope in moveAndStore in updater * Remove Consolidate and revert changes for move operation * Improved Change Description and Versioning for move operation * Improvise request payload to have only parent and optimise the flow * Implement async functionality of Glossary Terms move * mvn spotless:apply * MoveGlossaryTermChannel, Get only the required fields * Fix: Update Parent for Glossary Term during Bulk Import * allow glossary term to be moved across glossaries * update locales * move socket listening to hierarchy dialog * Added fqn to move message for the websocket response * fix tests * add glossary tests * cleanup * fix tests * Refactor code: Resolve Conflicts * fix tests * fix permissions * cleanup * Update generated TypeScript types * Abstraction Logic in place of instanceOf logic for bulkImportExportGlossary to update the parent * Update generated TypeScript types --------- Co-authored-by: karanh37 <karanh37@gmail.com> Co-authored-by: Karan Hotchandani <33024356+karanh37@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Aniket Katkar <aniketkatkar97@gmail.com> * update the snapshots url for ossrh migration (#22090) * Update README and Ingestion Framework Documentation (#22080) * Add my task json for new landing page * update description * add domain.json * fix test --------- Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> Co-authored-by: Mayur Singal <39544459+ulixius9@users.noreply.github.com> Co-authored-by: Teddy <teddy.crepineau@gmail.com> Co-authored-by: Rounak Dhillon <162090200+RounakDhillon@users.noreply.github.com> Co-authored-by: “Rounak <“rounakpreet.d@deuexsolutions.com”> Co-authored-by: Aniket Katkar <aniketkatkar97@gmail.com> Co-authored-by: Ram Narayan Balaji <81347100+yan-3005@users.noreply.github.com> Co-authored-by: karanh37 <karanh37@gmail.com> Co-authored-by: Karan Hotchandani <33024356+karanh37@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: sonika-shah <58761340+sonika-shah@users.noreply.github.com> Co-authored-by: Ayush Shah <ayush@getcollate.io> * feat(ui): Add support to create curated assets widget (#21870) * feat(ui): Add support to create curated assets widget * revert settings.json * fix: minor style for customisation pages * feat(ui): customisation of landing page (#21692) * add customise header section * fix react grid layout for widgets * fix widget height and refactor code * fix tests * address pr comments and added unit test * fix unit test * fix spacing issues and addressed pr comments * fix locale * update icons and styles * fix view more * fix footer * add unit tests and minor fixes * add curatedAssets.json * format json file * address comments * address comments * remove unnecessary indentation and fix locale * minor fix * address comments * update json * remove unnecessary changes * update imports * add sort and size options * add unit test * fix test * revert test changes * fix unit tests * Fix failing test * fix sonar nullish operator issue * address feedback --------- Co-authored-by: Pranita <pfulsundar8@gmail.com> Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> * feat(ui): create widgets with new layout having sizes small and medium (#22082) * fix customise home modal for home page * redesign widget * fix following widget * data assets widget * fix conflicting styles --------- Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> * Remove global search bar and add functionality to new search bar (#22156) * Remove global search bar and add functionality to new search bar * add unit tests * Add support for My Task widget (#22161) * Add support for My Task widget * address comments * minor fix * fix failing tests * Hide non configured curated asset from my data page (#22209) * Hide non configured curated asset from my data page * address comments --------- Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> * Disable save button and fix UI discrepencies (#22152) * Disable save button and miscellaneous changes * fix ui * Fix failing test * address comments --------- Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> * add persona preference to uiCustomisation * Add support to update persona preferences for the user (#22235) * Add support to update persona preferences for the user * add loader * add success toast * Fix failing unit test * Update generated TypeScript types * Support background update by admin for customized landing page (#22301) * Fix failing e2e tests (#22248) * Fix failing e2e tests * fix activity feed tests * fix failing e2e tests * fix EntityDataSteward and Entity tests * fix failing tests * Fix metric tests * Fix lineage and my data page * update uuid * Add support for domains widget (#22318) * Add support for domains widget * code cleanup * minor fix * fix failing test * address comments * update .less file * import t from utils --------- Co-authored-by: Sriharsha Chintalapani <harshach@users.noreply.github.com> * Update curated assets widget for full size (#22343) * Fix customize search functionality (#22349) * Fix customize search functionality * update-my-task-icon * fix failing tests * Redesign Data Assets widget (#22353) * Redesign Data Assets widget * remove comments * add footer and its unit tests * Add new announcement widget (#22373) * Add new announcement widget * fix badge color * fix styles * address comments * fix failing test * minor fix * fix css * fix color variable * Fix KPI and Total Data Assets widgets (#22359) * fix dropdown styles * fix minor styles * remove recently viewed widget * fix kpi widget and added tests * fix total data assets widget and add tests * minor style fix * remove kpi filters * fix total data assets chart colors * add filters for total data assets * fix kpi widget styles * minor style fix * addressed pr comments * Feat(UI): Added Feed , Assets Following and My data widget (#22375) * added feeds widget * addressed comments * fixed padding * addressed comments and added new tests * addressed comments and added new tests * removed unncessary slice condition * added sorting for follwing and my data widget * fixed truncate and overflow edge condtions * fixed sonar test * remove unwanted options * Fix UI cosmetic issues (#22439) * fix: failing e2e tests (#22427) * fix Entity.spec * fix metric tests from Entity.spec * minor fix * minor fix * Fix CSS for data assets, KPI and total data assets widget (#22458) * Fix failing e2e tests (#22396) * Fix failing e2e tests * Fix tour and data quality tests * Fix description suggestion * fix customMetric tests * fix tests * fix tests * fix navbar and bulk import tests * Fix entity service tests * Fix ExploreQuickFilters.spec.ts * fix metric tests * update config * minor fix * Fix domain rbac * Fix test * fix unit test --------- Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> * fix tests * Fix failing E2E tests (#22462) * Fix failing E2E tests * Fix service entity tests * fix tests * fix kpi widget test id * fix schema definition and frequently joined tests * fix domains.spec * fix tests * fix tests and address ui feedbacks * fix unit tests --------- Co-authored-by: Chirag Madlani <12962843+chirag-madlani@users.noreply.github.com> Co-authored-by: Harshit Shah <dinkushah169@gmail.com> Co-authored-by: Mayur Singal <39544459+ulixius9@users.noreply.github.com> Co-authored-by: Teddy <teddy.crepineau@gmail.com> Co-authored-by: Rounak Dhillon <162090200+RounakDhillon@users.noreply.github.com> Co-authored-by: “Rounak <“rounakpreet.d@deuexsolutions.com”> Co-authored-by: Aniket Katkar <aniketkatkar97@gmail.com> Co-authored-by: Ram Narayan Balaji <81347100+yan-3005@users.noreply.github.com> Co-authored-by: karanh37 <karanh37@gmail.com> Co-authored-by: Karan Hotchandani <33024356+karanh37@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: sonika-shah <58761340+sonika-shah@users.noreply.github.com> Co-authored-by: Ayush Shah <ayush@getcollate.io> Co-authored-by: Sriharsha Chintalapani <harshach@users.noreply.github.com> Co-authored-by: Dhruv Parmar <83108871+dhruvjsx@users.noreply.github.com>
2025-07-19 17:59:14 +05:30
await EntityDataClass.table1.visitEntityPageWithCustomSearchBox(page);
await EntityDataClass.table1.patch({
apiContext,
patchData: [
{
op: 'add',
value: {
type: 'user',
id: EntityDataClass.user1.responseData.id,
},
path: '/owners/0',
},
{
op: 'add',
value: {
tagFQN: 'PersonalData.Personal',
},
path: '/tags/0',
},
{
op: 'add',
path: '/domain',
value: {
id: EntityDataClass.domain1.responseData.id,
type: 'domain',
name: EntityDataClass.domain1.responseData.name,
displayName: EntityDataClass.domain1.responseData.displayName,
},
},
],
});
await EntityDataClass.table2.visitEntityPage(page);
await EntityDataClass.table2.patch({
apiContext,
patchData: [
{
op: 'add',
value: {
type: 'user',
id: EntityDataClass.user2.responseData.id,
},
path: '/owners/0',
},
{
op: 'add',
value: {
tagFQN: 'PII.None',
},
path: '/tags/0',
},
{
op: 'add',
path: '/domain',
value: {
id: EntityDataClass.domain2.responseData.id,
type: 'domain',
name: EntityDataClass.domain2.responseData.name,
displayName: EntityDataClass.domain2.responseData.displayName,
},
},
],
});
// Add Tier To the topic 1
await EntityDataClass.topic1.visitEntityPage(page);
await assignTier(
page,
EntityDataClass.tierTag1.data.displayName,
EntityDataClass.topic1.endpoint
);
// Add Tier To the topic 2
await EntityDataClass.topic2.visitEntityPage(page);
await assignTier(
page,
EntityDataClass.tierTag2.data.displayName,
EntityDataClass.topic2.endpoint
);
// Update Search Criteria here
searchCriteria = {
'owners.displayName.keyword': [
EntityDataClass.user1.getUserName(),
EntityDataClass.user2.getUserName(),
],
'tags.tagFQN': ['PersonalData.Personal', 'PII.None'],
'tier.tagFQN': [
EntityDataClass.tierTag1.responseData.fullyQualifiedName,
EntityDataClass.tierTag2.responseData.fullyQualifiedName,
],
'service.displayName.keyword': [
EntityDataClass.table1.service.name,
EntityDataClass.table2.service.name,
],
'database.displayName.keyword': [
EntityDataClass.table1.database.name,
EntityDataClass.table2.database.name,
],
'databaseSchema.displayName.keyword': [
EntityDataClass.table1.schema.name,
EntityDataClass.table2.schema.name,
],
'columns.name.keyword': [
EntityDataClass.table1.entity.columns[2].name,
EntityDataClass.table2.entity.columns[3].name,
],
'displayName.keyword': [
EntityDataClass.table1.entity.displayName,
EntityDataClass.table2.entity.displayName,
],
serviceType: [
EntityDataClass.table1.service.serviceType,
EntityDataClass.topic1.service.serviceType,
],
'messageSchema.schemaFields.name.keyword': [
EntityDataClass.topic1.entity.messageSchema.schemaFields[0].name,
EntityDataClass.topic2.entity.messageSchema.schemaFields[1].name,
],
'dataModel.columns.name.keyword': [
EntityDataClass.container1.entity.dataModel.columns[0].name,
EntityDataClass.container2.entity.dataModel.columns[1].name,
],
dataModelType: [
EntityDataClass.dashboard1.dataModel.dataModelType,
EntityDataClass.dashboard2.dataModel.dataModelType,
],
'fields.name.keyword': [
EntityDataClass.searchIndex1.entity.fields[1].name,
EntityDataClass.searchIndex2.entity.fields[3].name,
],
'tasks.displayName.keyword': [
EntityDataClass.pipeline1.entity.tasks[0].displayName,
EntityDataClass.pipeline2.entity.tasks[1].displayName,
],
'domain.displayName.keyword': [
EntityDataClass.domain1.data.displayName,
EntityDataClass.domain2.data.displayName,
],
'responseSchema.schemaFields.name.keyword': [
EntityDataClass.apiCollection1.apiEndpoint.responseSchema
.schemaFields[0].name,
EntityDataClass.apiCollection2.apiEndpoint.responseSchema
.schemaFields[1].name,
],
'requestSchema.schemaFields.name.keyword': [
EntityDataClass.apiCollection1.apiEndpoint.requestSchema.schemaFields[0]
.name,
EntityDataClass.apiCollection2.apiEndpoint.requestSchema.schemaFields[1]
.name,
],
'name.keyword': [
EntityDataClass.table1.entity.name,
EntityDataClass.table2.entity.name,
],
'project.keyword': [
EntityDataClass.dashboardDataModel1.entity.project,
EntityDataClass.dashboardDataModel2.entity.project,
],
status: ['Approved', 'In Review'],
tableType: [table.entity.tableType, 'MaterializedView'],
'charts.displayName.keyword': [
EntityDataClass.dashboard1.charts.displayName,
EntityDataClass.dashboard2.charts.displayName,
],
};
await afterAction();
});
test.afterAll('Cleanup', async ({ browser }) => {
test.slow(true);
const { apiContext, afterAction } = await createNewPage(browser);
await EntityDataClass.postRequisitesForTests(apiContext, creationConfig);
await glossaryEntity.delete(apiContext);
await user.delete(apiContext);
await table.delete(apiContext);
await afterAction();
});
test.beforeEach(async ({ page }) => {
await redirectToHomePage(page);
await sidebarClick(page, SidebarItem.EXPLORE);
});
FIELDS.forEach((field) => {
test(`Verify All conditions for ${field.id} field`, async ({ page }) => {
test.slow(true);
await verifyAllConditions(page, field, searchCriteria[field.name][0]);
});
});
Object.values(OPERATOR).forEach(({ name: operator }) => {
FIELDS.forEach((field) => {
// Rule based search
test(`Verify Rule functionality for field ${field.id} with ${operator} operator`, async ({
page,
}) => {
test.slow(true);
await runRuleGroupTests(page, field, operator, false, searchCriteria);
});
// Group based search
test(`Verify Group functionality for field ${field.id} with ${operator} operator`, async ({
page,
}) => {
test.slow(true);
await runRuleGroupTests(page, field, operator, true, searchCriteria);
});
});
});
test('Verify search with non existing value do not result in infinite search', async ({
page,
}) => {
test.slow(true);
await runRuleGroupTestsWithNonExistingValue(page);
});
});