mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-08-02 14:18:40 +00:00
add test for explore tree (#22466)
This commit is contained in:
parent
e3e248ef0a
commit
d9d7092942
@ -28,7 +28,10 @@ import { Glossary } from '../../support/glossary/Glossary';
|
|||||||
import { GlossaryTerm } from '../../support/glossary/GlossaryTerm';
|
import { GlossaryTerm } from '../../support/glossary/GlossaryTerm';
|
||||||
import { getApiContext, redirectToHomePage } from '../../utils/common';
|
import { getApiContext, redirectToHomePage } from '../../utils/common';
|
||||||
import { updateDisplayNameForEntity } from '../../utils/entity';
|
import { updateDisplayNameForEntity } from '../../utils/entity';
|
||||||
import { validateBucketsForIndex } from '../../utils/explore';
|
import {
|
||||||
|
validateBucketsForIndex,
|
||||||
|
verifyDatabaseAndSchemaInExploreTree,
|
||||||
|
} from '../../utils/explore';
|
||||||
import { sidebarClick } from '../../utils/sidebar';
|
import { sidebarClick } from '../../utils/sidebar';
|
||||||
|
|
||||||
// use the admin user to login
|
// use the admin user to login
|
||||||
@ -129,6 +132,54 @@ test.describe('Explore Tree scenarios ', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Verify Database and Database Schema available in explore tree', async ({
|
||||||
|
page,
|
||||||
|
}) => {
|
||||||
|
const { apiContext, afterAction } = await getApiContext(page);
|
||||||
|
const table1 = new TableClass();
|
||||||
|
const table2 = new TableClass();
|
||||||
|
|
||||||
|
try {
|
||||||
|
await table1.create(apiContext);
|
||||||
|
await table2.create(apiContext);
|
||||||
|
|
||||||
|
const schemaName1 = get(table1.schemaResponseData, 'name', '');
|
||||||
|
const dbName1 = get(table1.databaseResponseData, 'name', '');
|
||||||
|
const serviceName1 = get(table1.serviceResponseData, 'name', '');
|
||||||
|
const schemaName2 = get(table2.schemaResponseData, 'name', '');
|
||||||
|
const dbName2 = get(table2.databaseResponseData, 'name', '');
|
||||||
|
const serviceName2 = get(table2.serviceResponseData, 'name', '');
|
||||||
|
|
||||||
|
await sidebarClick(page, SidebarItem.EXPLORE);
|
||||||
|
await page.waitForLoadState('networkidle');
|
||||||
|
|
||||||
|
// Verify first table's database and schema
|
||||||
|
await test.step('Verify first table database and schema', async () => {
|
||||||
|
await verifyDatabaseAndSchemaInExploreTree(
|
||||||
|
page,
|
||||||
|
serviceName1,
|
||||||
|
dbName1,
|
||||||
|
schemaName1
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Verify second table's database and schema
|
||||||
|
await test.step('Verify second table database and schema', async () => {
|
||||||
|
await verifyDatabaseAndSchemaInExploreTree(
|
||||||
|
page,
|
||||||
|
serviceName2,
|
||||||
|
dbName2,
|
||||||
|
schemaName2,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
await table1.delete(apiContext);
|
||||||
|
await table2.delete(apiContext);
|
||||||
|
await afterAction();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
test('Verify Database and Database schema after rename', async ({ page }) => {
|
test('Verify Database and Database schema after rename', async ({ page }) => {
|
||||||
const { apiContext, afterAction } = await getApiContext(page);
|
const { apiContext, afterAction } = await getApiContext(page);
|
||||||
const table = new TableClass();
|
const table = new TableClass();
|
||||||
@ -140,6 +191,28 @@ test.describe('Explore Tree scenarios ', () => {
|
|||||||
const updatedSchemaName = `Test ${schemaName} updated`;
|
const updatedSchemaName = `Test ${schemaName} updated`;
|
||||||
const updatedDbName = `Test ${dbName} updated`;
|
const updatedDbName = `Test ${dbName} updated`;
|
||||||
|
|
||||||
|
// Step 1: Visit explore page and check existing values before rename
|
||||||
|
await test.step(
|
||||||
|
'Visit explore page and verify existing values',
|
||||||
|
async () => {
|
||||||
|
await sidebarClick(page, SidebarItem.EXPLORE);
|
||||||
|
await page.waitForLoadState('networkidle');
|
||||||
|
|
||||||
|
// Verify original database and schema names using utility function
|
||||||
|
await verifyDatabaseAndSchemaInExploreTree(
|
||||||
|
page,
|
||||||
|
serviceName,
|
||||||
|
dbName,
|
||||||
|
schemaName
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Step 2: Perform rename operations
|
||||||
|
await test.step('Rename schema and database', async () => {
|
||||||
|
// Navigate back to the table page for renaming
|
||||||
|
await table.visitEntityPage(page);
|
||||||
|
|
||||||
const schemaRes = page.waitForResponse('/api/v1/databaseSchemas/name/*');
|
const schemaRes = page.waitForResponse('/api/v1/databaseSchemas/name/*');
|
||||||
await page.getByRole('link', { name: schemaName }).click();
|
await page.getByRole('link', { name: schemaName }).click();
|
||||||
// Rename Schema Page
|
// Rename Schema Page
|
||||||
@ -159,49 +232,21 @@ test.describe('Explore Tree scenarios ', () => {
|
|||||||
updatedDbName,
|
updatedDbName,
|
||||||
EntityTypeEndpoint.Database
|
EntityTypeEndpoint.Database
|
||||||
);
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Step 3: Verify the changes are reflected in explore page
|
||||||
|
await test.step('Verify renamed values in explore page', async () => {
|
||||||
await sidebarClick(page, SidebarItem.EXPLORE);
|
await sidebarClick(page, SidebarItem.EXPLORE);
|
||||||
await page.waitForLoadState('networkidle');
|
await page.waitForLoadState('networkidle');
|
||||||
const serviceNameRes = page.waitForResponse(
|
|
||||||
'/api/v1/search/query?q=&index=database_search_index&from=0&size=0*mysql*'
|
// Verify updated database and schema names using utility function
|
||||||
|
await verifyDatabaseAndSchemaInExploreTree(
|
||||||
|
page,
|
||||||
|
serviceName,
|
||||||
|
updatedDbName,
|
||||||
|
updatedSchemaName
|
||||||
);
|
);
|
||||||
await page
|
});
|
||||||
.locator('div')
|
|
||||||
.filter({ hasText: /^mysql$/ })
|
|
||||||
.locator('svg')
|
|
||||||
.first()
|
|
||||||
.click();
|
|
||||||
await serviceNameRes;
|
|
||||||
|
|
||||||
const databaseRes = page.waitForResponse(
|
|
||||||
'/api/v1/search/query?q=&index=dataAsset*serviceType*'
|
|
||||||
);
|
|
||||||
|
|
||||||
await page
|
|
||||||
.locator('.ant-tree-treenode')
|
|
||||||
.filter({ hasText: serviceName })
|
|
||||||
.locator('.ant-tree-switcher svg')
|
|
||||||
.click();
|
|
||||||
await databaseRes;
|
|
||||||
|
|
||||||
await expect(
|
|
||||||
page.getByTestId(`explore-tree-title-${updatedDbName}`)
|
|
||||||
).toBeVisible();
|
|
||||||
|
|
||||||
const databaseSchemaRes = page.waitForResponse(
|
|
||||||
'/api/v1/search/query?q=&index=dataAsset*database.displayName*'
|
|
||||||
);
|
|
||||||
|
|
||||||
await page
|
|
||||||
.locator('.ant-tree-treenode')
|
|
||||||
.filter({ hasText: updatedDbName })
|
|
||||||
.locator('.ant-tree-switcher svg')
|
|
||||||
.click();
|
|
||||||
await databaseSchemaRes;
|
|
||||||
|
|
||||||
await expect(
|
|
||||||
page.getByTestId(`explore-tree-title-${updatedSchemaName}`)
|
|
||||||
).toBeVisible();
|
|
||||||
|
|
||||||
await table.delete(apiContext);
|
await table.delete(apiContext);
|
||||||
await afterAction();
|
await afterAction();
|
||||||
|
@ -154,3 +154,70 @@ export const validateBucketsForIndex = async (page: Page, index: string) => {
|
|||||||
).toBeGreaterThan(0);
|
).toBeGreaterThan(0);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const expandServiceInExploreTree = async (
|
||||||
|
page: Page,
|
||||||
|
serviceName: string,
|
||||||
|
serviceExpanded = false
|
||||||
|
) => {
|
||||||
|
if (!serviceExpanded) {
|
||||||
|
// Check that the service exists in the explore tree
|
||||||
|
const serviceNameRes = page.waitForResponse(
|
||||||
|
'/api/v1/search/query?q=&index=database_search_index&from=0&size=0*mysql*'
|
||||||
|
);
|
||||||
|
await page
|
||||||
|
.locator('div')
|
||||||
|
.filter({ hasText: /^mysql$/ })
|
||||||
|
.locator('svg')
|
||||||
|
.first()
|
||||||
|
.click();
|
||||||
|
await serviceNameRes;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expand the service to see databases
|
||||||
|
const databaseRes = page.waitForResponse(
|
||||||
|
'/api/v1/search/query?q=&index=dataAsset*serviceType*'
|
||||||
|
);
|
||||||
|
await page
|
||||||
|
.locator('.ant-tree-treenode')
|
||||||
|
.filter({ hasText: serviceName })
|
||||||
|
.locator('.ant-tree-switcher svg')
|
||||||
|
.click();
|
||||||
|
await databaseRes;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const expandDatabaseInExploreTree = async (
|
||||||
|
page: Page,
|
||||||
|
dbName: string
|
||||||
|
) => {
|
||||||
|
// Expand the database to see schemas
|
||||||
|
const databaseSchemaRes = page.waitForResponse(
|
||||||
|
'/api/v1/search/query?q=&index=dataAsset*database.displayName*'
|
||||||
|
);
|
||||||
|
await page
|
||||||
|
.locator('.ant-tree-treenode')
|
||||||
|
.filter({ hasText: dbName })
|
||||||
|
.locator('.ant-tree-switcher svg')
|
||||||
|
.click();
|
||||||
|
await databaseSchemaRes;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const verifyDatabaseAndSchemaInExploreTree = async (
|
||||||
|
page: Page,
|
||||||
|
serviceName: string,
|
||||||
|
dbName: string,
|
||||||
|
schemaName: string,
|
||||||
|
serviceExpanded = false
|
||||||
|
) => {
|
||||||
|
await expandServiceInExploreTree(page, serviceName, serviceExpanded);
|
||||||
|
|
||||||
|
// Verify the database name is visible
|
||||||
|
await expect(page.getByTestId(`explore-tree-title-${dbName}`)).toBeVisible();
|
||||||
|
|
||||||
|
await expandDatabaseInExploreTree(page, dbName);
|
||||||
|
|
||||||
|
// Verify the schema name is visible
|
||||||
|
await expect(
|
||||||
|
page.getByTestId(`explore-tree-title-${schemaName}`)
|
||||||
|
).toBeVisible();
|
||||||
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user