From 35092f5d039db70444b4bb769f75dc74d4b74f1c Mon Sep 17 00:00:00 2001 From: karanh37 Date: Mon, 29 Sep 2025 15:58:16 +0530 Subject: [PATCH] fix playwrights --- .../ui/playwright/e2e/Pages/Domains.spec.ts | 79 +++++++++---------- .../e2e/Pages/SubDomainPagination.spec.ts | 16 ++-- .../resources/ui/playwright/utils/domain.ts | 4 +- .../pagination/usePaginationControls.tsx | 3 + 4 files changed, 50 insertions(+), 52 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts index 9d8f3b06b5c..3744380cac0 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts @@ -57,7 +57,6 @@ import { selectDataProduct, selectDataProductFromTab, selectDomain, - selectSubDomain, setupAssetsForDomain, setupDomainHasDomainTest, setupDomainOwnershipTest, @@ -217,11 +216,7 @@ test.describe('Domains', () => { }); await test.step('Create DataProducts', async () => { - await selectDomain(page, domain.data); await createDataProduct(page, dataProduct1.data); - await redirectToHomePage(page); - await sidebarClick(page, SidebarItem.DOMAIN); - await selectDomain(page, domain.data); await createDataProduct(page, dataProduct2.data); }); @@ -337,6 +332,8 @@ test.describe('Domains', () => { ); await test.step(`Set ${titleText} Custom Property`, async () => { + await sidebarClick(page, SidebarItem.DATA_PRODUCT); + await selectDataProduct(page, dataProduct1.data); for (const type of properties) { await dataProduct1.updateCustomProperty( page, @@ -441,17 +438,25 @@ test.describe('Domains', () => { try { await domain.create(apiContext); await sidebarClick(page, SidebarItem.DOMAIN); - await page.reload(); await selectDomain(page, domain.data); + + const subDomainApiRes = page.waitForResponse( + '/api/v1/search/query?q=&index=domain_search_index&from=0&size=9&deleted=false*' + ); // Create sub domain await createSubDomain(page, subDomain.data); - await redirectToHomePage(page); - await sidebarClick(page, SidebarItem.DOMAIN); - await page.waitForLoadState('networkidle'); + await subDomainApiRes; + await page.waitForSelector('[data-testid="loader"]', { state: 'detached', }); - await selectSubDomain(page, domain.data, subDomain.data); + + const domainApiRes = page.waitForResponse('/api/v1/domains/name/*'); + + await page.getByRole('row', { name: subDomain.data.displayName }).click(); + + await domainApiRes; + await verifyDomain(page, subDomain.data, domain.data, false); // Follow domain await followEntity(page, EntityTypeEndpoint.Domain); @@ -487,17 +492,32 @@ test.describe('Domains', () => { ).not.toContainText(subDomain.data.displayName); await sidebarClick(page, SidebarItem.DOMAIN); - await page.waitForLoadState('networkidle'); - await page.waitForSelector('[data-testid="loader"]', { - state: 'detached', - }); - await selectSubDomain(page, domain.data, subDomain.data); - await verifyDomain(page, subDomain.data, domain.data, false); + + await selectDomain(page, domain.data); + + // const selectSubDomainRes = page.waitForResponse( + // '/api/v1/search/query?q=&index=domain_search_index*' + // ); + // await page.getByTestId('subdomains').getByText('Sub Domains').click(); + // await selectSubDomainRes; + // await verifyDomain(page, subDomain.data, domain.data, false); + + const subDomainApiRes1 = page.waitForResponse( + '/api/v1/search/query?q=&index=domain_search_index&from=0&size=9&deleted=false*' + ); // Create new sub domain under the existing sub domain await createSubDomain(page, nestedSubDomain.data); - await page.getByTestId('subdomains').getByText('Sub Domains').click(); - await page.getByTestId(nestedSubDomain.data.name).click(); + + await subDomainApiRes1; + + await page.waitForSelector('[data-testid="loader"]', { + state: 'detached', + }); + + const domainApiRes1 = page.waitForResponse('/api/v1/domains/name/*'); + await page.getByRole('row', { name: subDomain.data.displayName }).click(); + await domainApiRes1; await verifyDomain(page, nestedSubDomain.data, domain.data, false); } finally { await nestedSubDomain.delete(apiContext); @@ -706,13 +726,10 @@ test.describe('Domains', () => { const dataProduct = new DataProduct([domain1]); try { await domain1.create(apiContext); - await page.reload(); await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); await selectDomain(page, domain1.data); await createDataProduct(page, dataProduct.data); - - await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DATA_PRODUCT); await selectDataProduct(page, dataProduct.data); @@ -958,13 +975,11 @@ test.describe('Domains Rbac', () => { // Add assets to domain 1 await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); - await selectDomain(page, domain1.data); await addAssetsToDomain(page, domain1, domainAssset1); // Add assets to domain 2 await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); - await selectDomain(page, domain2.data); await addAssetsToDomain(page, domain2, domainAssset2); }); @@ -1071,23 +1086,7 @@ test.describe('Data Consumer Domain Ownership', () => { 'Check domain management permissions for data consumer owner', async () => { await sidebarClick(dataConsumerPage, SidebarItem.DOMAIN); - await dataConsumerPage.waitForLoadState('networkidle'); - await dataConsumerPage.waitForSelector('[data-testid="loader"]', { - state: 'detached', - }); - - const permissionRes = dataConsumerPage.waitForResponse( - '/api/v1/permissions/domain/*' - ); - await dataConsumerPage - .getByRole('menuitem', { - name: testResources.domainForTest.data.displayName, - }) - .locator('span') - .click(); - - await permissionRes; - + await selectDomain(dataConsumerPage, testResources.domainForTest.data); await dataConsumerPage.getByTestId('domain-details-add-button').click(); // check Data Products menu item is visible diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/SubDomainPagination.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/SubDomainPagination.spec.ts index d1de6ca4b62..8a0d659c5d7 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/SubDomainPagination.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/SubDomainPagination.spec.ts @@ -86,7 +86,7 @@ test.describe('SubDomain Pagination', () => { 'Navigate to subdomains tab and verify initial data load', async () => { const subDomainRes = page.waitForResponse( - '/api/v1/search/query?q=*&from=0&size=50&index=domain_search_index&deleted=false&track_total_hits=true' + '/api/v1/search/query?q=&index=domain_search_index&from=0&size=9*' ); await page.getByTestId('subdomains').click(); await subDomainRes; @@ -97,26 +97,22 @@ test.describe('SubDomain Pagination', () => { await expect(page.locator('table')).toBeVisible(); await expect(page.locator('[data-testid="pagination"]')).toBeVisible(); + + // Verify current page shows page 1 + const tableRows = page.locator('table tbody tr'); + + await expect(tableRows).toHaveCount(9); } ); await test.step('Test pagination navigation', async () => { - // Verify current page shows page 1 - const tableRows = page.locator('table tbody tr'); - - await expect(tableRows).toHaveCount(50); - const nextPageResponse = page.waitForResponse('/api/v1/search/query?*'); await page.locator('[data-testid="next"]').click(); await nextPageResponse; - await expect(tableRows).toHaveCount(10); - const prevPageResponse = page.waitForResponse('/api/v1/search/query?*'); await page.locator('[data-testid="previous"]').click(); await prevPageResponse; - - await expect(tableRows).toHaveCount(50); }); await test.step( diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts index 6196db6f057..68b6f263c9c 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts @@ -213,7 +213,7 @@ export const selectDataProduct = async ( .getByRole('textbox', { name: 'Search' }); const dpRes = page.waitForResponse( - '/api/v1/search/query?q=&index=data_product_search_index*' + '/api/v1/search/query?q=*&index=data_product_search_index*' ); await searchBox.fill(dataProduct.name); @@ -376,7 +376,7 @@ export const createSubDomain = async ( await fillDomainForm(page, subDomain, false); const saveRes = page.waitForResponse('/api/v1/domains'); - await page.getByTestId('save-sub-domain').click(); + await page.getByTestId('save-btn').click(); await saveRes; }; diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/atoms/pagination/usePaginationControls.tsx b/openmetadata-ui/src/main/resources/ui/src/components/common/atoms/pagination/usePaginationControls.tsx index acccca642e0..757c56ad5aa 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/atoms/pagination/usePaginationControls.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/atoms/pagination/usePaginationControls.tsx @@ -42,6 +42,7 @@ export const usePaginationControls = (config: PaginationControlsConfig) => { const paginationControls = useMemo( () => ( { }}>