diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/ExploreSortOrderFilter.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/ExploreSortOrderFilter.spec.ts index 7ace63bc3e6..f4f62a16ed5 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/ExploreSortOrderFilter.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/ExploreSortOrderFilter.spec.ts @@ -94,7 +94,6 @@ test.describe('Explore Sort Order Filter', () => { await page.getByTestId('update-btn').click(); await selectSortOrder(page, 'Name'); - await page.waitForLoadState('networkidle'); await verifyEntitiesAreSorted(page); const clearFilters = page.getByTestId('clear-filters'); diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/explore.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/explore.ts index 0188fc9fe12..67a52e60723 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/explore.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/explore.ts @@ -257,31 +257,42 @@ export const selectSortOrder = async (page: Page, sortOrder: string) => { await page.waitForSelector(`role=menuitem[name="${sortOrder}"]`, { state: 'visible', }); + const nameFilter = page.waitForResponse( + `/api/v1/search/query?q=&index=dataAsset&*sort_field=displayName.keyword&sort_order=desc*` + ); await page.getByRole('menuitem', { name: sortOrder }).click(); + await nameFilter; await expect(page.getByTestId('sorting-dropdown-label')).toHaveText( sortOrder ); + const ascSortOrder = page.waitForResponse( + `/api/v1/search/query?q=&index=dataAsset&*sort_field=displayName.keyword&sort_order=asc*` + ); await page.getByTestId('sort-order-button').click(); + await ascSortOrder; await page.waitForSelector('[data-testid="loader"]', { state: 'detached' }); }; export const verifyEntitiesAreSorted = async (page: Page) => { + // Wait for search results to be stable after sort + await page.waitForSelector('[data-testid="search-results"]', { + state: 'visible', + }); + await page.waitForLoadState('networkidle'); + const entityNames = await page.$$eval( '[data-testid="search-results"] .explore-search-card [data-testid="entity-link"]', (elements) => elements.map((el) => el.textContent?.trim() ?? '') ); - // Normalize for case insensitivity, but retain punctuation - const normalize = (str: string) => str.toLowerCase().trim(); - - // Sort using ASCII-based string comparison (ES behavior) + // Elasticsearch keyword field with case-insensitive sorting const sortedEntityNames = [...entityNames].sort((a, b) => { - const normA = normalize(a); - const normB = normalize(b); + const aLower = a.toLowerCase(); + const bLower = b.toLowerCase(); - return normA < normB ? -1 : normA > normB ? 1 : 0; + return aLower < bLower ? -1 : aLower > bLower ? 1 : 0; }); expect(entityNames).toEqual(sortedEntityNames);