Skip to content

test(e2e): 1.13 skip-list cleanup — re-enable 5 specs that pass, drop 4 that never ran - #30839

Merged
siddhant1 merged 8 commits into
1.13from
backport/e2e-unskips-to-1.13
Aug 4, 2026
Merged

test(e2e): 1.13 skip-list cleanup — re-enable 5 specs that pass, drop 4 that never ran#30839
siddhant1 merged 8 commits into
1.13from
backport/e2e-unskips-to-1.13

Conversation

@siddhant1

@siddhant1 siddhant1 commented Aug 3, 2026

Copy link
Copy Markdown
Member

Self-contained — do NOT cherry-pick #30843 onto 1.13 after it merges. This branch already carries all of #30843's content (the four removals, plus the change filter while expanded and Term should stay approved re-enables). A post-merge cherry-pick would conflict on work already applied here. Verified: after this PR, 1.13 matches 2.0's landed state item-for-item.

Single PR covering the whole 1.13 skip list. Every verdict is a measurement on a real 1.13 stack built from this branch (/api/v1/system/version reported revision 53adda644b, matching HEAD — not stale-image results).

Re-enabled — 5 specs, all measured green on 1.13

Test Result
EntityRenameConsolidation › Domain - rename then update description 8.4s
EntityRenameConsolidation › Domain - multiple rename + update cycles 13.4s
GlossaryNavigation › should show empty state when glossary has no terms 4.1s
EntityPermissions › EditTier, EditOwners, EditCertification allowed but EditAll denied 3.0s
GlossaryStatusFilter › change filter while expanded updates visible root terms 2.8s

These are the entire 1.13-only half of the nightly skip list — main and 2.0 have run the first four since end of July (#30451, #30699).

Two needed more than removing a marker:

  • GlossaryNavigation empty statemain asserts an EmptyPlaceholder testid that does not exist on 1.13. 1.13 still routes through ErrorPlaceHolder and picks NO_DATA over CREATE (glossaryTermStatus is null for a glossary, not Approved), so this asserts no-data-placeholder. Negative control: restoring main's assertion fails here with element(s) not found — waiting for getByTestId('create-error-placeholder-Glossary Term'). A straight cherry-pick would have shipped a red test.
  • selectActiveGlossary hardening (test(glossary): make selectActiveGlossary selector robust #27566) — a prerequisite, not cosmetics. 1.13's skip reason was literally "selectActiveGlossary not selecting the correct glossary", and that util bug was fixed on main in April and never backported. The old selector was page.getByRole('menuitem', { name }).first() — unscoped and non-exact, matching any menuitem merely containing the target and letting .first() pick whichever came first in the DOM. Now scoped to glossary-left-panel with an exact label match. Verified every selectActiveGlossary call site on 1.13 already passes a displayName, so the stricter match breaks nothing.

Regression sweep for that shared util: all 251 tests in the 24 spec files that touch the glossary utils — 242 passed, 8 failed. All 8 A/B tested against the same stack: they pass in isolation with the backport (10/10), and one of them also fails on pristine origin/1.13, so the failure mode predates this change. They are load-induced flakes at the test.slow() boundary under 251 tests / 3 workers on one local stack; five are in files that only import selectActiveGlossaryTerm, which this PR does not touch.

2. Glossary skip-list cleanup

Single PR covering the whole 1.13 skip list. Every verdict is a measurement on a real 1.13 stack built from this branch (/api/v1/system/version reported revision 53adda644b, matching HEAD — not stale-image results).

Re-enabled — 5 specs, all measured green on 1.13

Test Result
EntityRenameConsolidation › Domain - rename then update description 8.4s
EntityRenameConsolidation › Domain - multiple rename + update cycles 13.4s
GlossaryNavigation › should show empty state when glossary has no terms 4.1s
EntityPermissions › EditTier, EditOwners, EditCertification allowed but EditAll denied 3.0s
GlossaryStatusFilter › change filter while expanded updates visible root terms 2.8s

These are the entire 1.13-only half of the nightly skip list — main and 2.0 have run the first four since end of July (#30451, #30699).

Two needed more than removing a marker:

  • GlossaryNavigation empty statemain asserts an EmptyPlaceholder testid that does not exist on 1.13. 1.13 still routes through ErrorPlaceHolder and picks NO_DATA over CREATE (glossaryTermStatus is null for a glossary, not Approved), so this asserts no-data-placeholder. Negative control: restoring main's assertion fails here with element(s) not found — waiting for getByTestId(create-error-placeholder-Glossary Term). A straight cherry-pick would have shipped a red test.
  • selectActiveGlossary hardening (test(glossary): make selectActiveGlossary selector robust #27566) — a prerequisite, not cosmetics. 1.13s skip reason was literally "selectActiveGlossary not selecting the correct glossary", and that util bug was fixed on main in April and never backported. The old selector was page.getByRole(menuitem, { name }).first() — unscoped and non-exact, matching any menuitem merely containing the target and letting .first() pick whichever came first in the DOM. Now scoped to glossary-left-panel with an exact label match. Verified every selectActiveGlossary call site on 1.13 already passes a displayName, so the stricter match breaks nothing.

Regression sweep for that shared util: all 251 tests in the 24 spec files that touch the glossary utils — 242 passed, 8 failed. All 8 A/B tested against the same stack: they pass in isolation with the backport (10/10), and one of them also fails on pristine origin/1.13, so the failure mode predates this change. They are load-induced flakes at the test.slow() boundary under 251 tests / 3 workers on one local stack; five are in files that only import selectActiveGlossaryTerm, which this PR does not touch.

2. Glossary skip-list cleanup

The rule applied

A test is deleted only if it was skipped in the very commit that introduced it — it has never run and never protected anything. Anything that was once green stays, even if it is red today, because that redness records a regression rather than a test that never worked.

Every verdict below is a measurement on a real local stack, not inspection.

Removed — 4 tests, skipped at inception, never executed

GlossaryStatusFilterNestedTerms: filter by child status, filter by middle level status, filter by leaf level status, deeply nested term (5 levels).

All four arrived skipped in #25428 (12d85f310f, 2026-03-05) — the commit that created the file — each carrying "Requires backend to return nested terms as flat results when filtered". Five months, zero executions. The six later commits to this file never touched the skips.

They cannot pass, by construction. getFirstLevelGlossaryTermsPaginated sends the hierarchy and status filters on one request:

params: { directChildrenOf: parentFQN, entityStatus, ... }

and GlossaryTermResource ANDs them:

.addQueryParam("directChildrenOf", parentTermFQNParam)
.addQueryParam("entityStatus", entityStatus);

directChildrenOf means "first level/immediate children", so a nested term is eliminated before its status is considered. Measured: all four fail at ~17.5–17.9s (locator timeout — the term never renders) on both a 1.13 stack and a main stack, while every sibling asserting only root-level terms passes. glossaryAPI.ts and GlossaryTermResource.java are byte-identical across 1.13, main and 2.0.

Re-enabled — 2 tests that pass today

Test Why it was skipped Measured
Glossary › Term should stay approved when changes made by reviewer async approval workflow reverted a PATCHed entityStatus ✅ 3/3 — 1.0m, 58.6s, 58.3s
GlossaryStatusFilter › change filter while expanded updates visible root terms born skipped in #25428: "re-filtering expanded state isn't fully implemented" ✅ 2.8s

#29931 fixed the approval machinery in July (approve/reject condition scheme, duplicate edges, stuck resolves) — exactly the cause behind the first test. Re-run three times to guard against its known load-dependent race; green every time.

The second was born skipped like the four removed ones, but for a different reason, and unlike them it is green. It is re-enabled rather than deleted precisely because deleting a passing test loses coverage. It only appeared on the nightly skip list at all because the file is test.describe.configure({ mode: 'serial' }) — when filter by child status fails, Playwright reports every later test in the file as skipped without running it. With those four gone the cascade cannot occur.

Deliberately left skipped

The five DataMarketplace navigation tests. They were born active and green in #26255 and ran for ten days before #27377 removed the /data-marketplace/* sub-routes and skipped them with "re-enable when the standalone marketplace shell is reintroduced". They fail at 1.0m today on both main and 1.13, but under the rule above they are not deletion candidates — they record a withdrawn capability. The marketplace page itself is alive (11 components on every branch) and 8 sibling tests covering rendering, data-product/domain creation, search empty state and the admin-vs-consumer permission split all still pass, so the spec files stay.

CustomizeWidgets › KPI Widget and ActivityFeed › Mention notification also pass on main (30.3s / 9.4s) but are out of scope here and remain skipped.

Verification

  • No orphaned fixtures — basicChild, multiChild, deepTerms, multiChildrenParent all still used by surviving tests.
  • Stale eslint-disable playwright/no-skipped-test directives removed with their skips, otherwise they become unused-directive errors.
  • prettier --check clean; eslint 0 errors.

🤖 Generated with Claude Code


1.13-specific notes

siddhant1 and others added 2 commits August 3, 2026 11:34
Backport of dd73bd9 to 1.13. Prerequisite for re-enabling
GlossaryNavigation's empty-state test, which 1.13 skips with the note
"selectActiveGlossary not selecting the correct glossary".

The old selector was `page.getByRole('menuitem', { name }).first()` — unscoped
and non-exact, so it matched any menuitem on the page whose accessible name
merely *contained* the target, and `.first()` then silently picked whichever
came first in the DOM. With two glossaries sharing a name prefix the test drove
the wrong one. Scope it to the `glossary-left-panel` sidebar, require an exact
label match, and wait for the item rather than racing the panel's render.

The label the sidebar renders is displayName, so the UI create helper now fills
display-name and the call sites pass displayName. Verified every
selectActiveGlossary call site on 1.13 already passes a displayName, so the
stricter match has no other call site to break.

(cherry picked from commit dd73bd9)

Co-Authored-By: Claude <noreply@anthropic.com>
…ermission specs on 1.13

Backports the un-skips from #30451 (64c33fc) and #30699 (507caf7), which
main and 2.0 have both carried since end of July. These four tests are the whole
1.13-only half of the nightly skip list — every other entry is skipped on all
three branches.

- EntityRenameConsolidation "Domain - rename then update description" and
  "Domain - multiple rename + update cycles": pure un-skip, no body change, same
  as main.
- GlossaryNavigation "should show empty state when glossary has no terms": the
  assertion targeted the "No Glossary Term found" row, which only a non-matching
  status filter renders — an empty glossary renders a placeholder instead. main
  asserts its EmptyPlaceholder testid; 1.13 still routes through ErrorPlaceHolder
  and picks NO_DATA over CREATE (glossaryTermStatus is null for a glossary, not
  Approved), so assert no-data-placeholder here. Depends on the preceding
  selectActiveGlossary backport.
- EntityPermissions "EditTier, EditOwners, EditCertification allowed but EditAll
  denied": the body contradicted its own title, asserting the edit buttons were
  visible. getPrioritizedEditPermission is byte-identical on 1.13 and main, so
  the corrected not.toBeVisible() assertions hold here too.

Co-Authored-By: Claude <noreply@anthropic.com>
@siddhant1
siddhant1 requested a review from a team as a code owner August 3, 2026 06:57
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

❌ PR checklist incomplete

This PR cannot be merged until the following are addressed on its linked issue:

  • No GitHub issue is linked. Link an issue in the Development section of the PR (or add Fixes #12345 to the description). For a same-org cross-repo issue, add Fixes open-metadata/<repo>#123 to the description.

The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically.

Maintainers can bypass this check by adding the skip-pr-checks label.

@github-actions github-actions Bot added the UI UI specific issues label Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

siddhant1 and others added 4 commits August 3, 2026 12:50
…nted

These four arrived skipped in #25428 (`12d85f310f`), the same commit that created
the file, and have never executed once in five months. They are not regressions
and not flakes — they are a specification for behaviour the backend does not have.

Each carried its own reason inline from birth: "Requires backend to return nested
terms as flat results when filtered". That is accurate. The glossary term listing
sends `directChildrenOf` and `entityStatus` on the same request
(`glossaryAPI.ts` `getFirstLevelGlossaryTermsPaginated`), and the backend ANDs them
(`GlossaryTermResource` `.addQueryParam("directChildrenOf", …).addQueryParam("entityStatus", …)`),
so a nested term is eliminated by the hierarchy filter before its status is ever
considered. No status value can surface a grandchild as a flat result.

Confirmed by running them: on a real 1.13 stack all four fail at ~17.5s (the
locator timeout — the term genuinely never renders), while every sibling test that
asserts only root-level terms passes. `glossaryAPI.ts` and `GlossaryTermResource`
are byte-identical across 1.13, main and 2.0, so the outcome is the same everywhere.

Removed rather than left skipped: five bare `test.skip`s surface on every nightly
triage list as if they were failures, and cost review attention each time someone
asks why the glossary suite is red. If flat subtree filtering is built, these are
better rewritten against the real API than resurrected from a five-month-old skip.

No fixtures are orphaned — `basicChild`, `multiChild`, `deepTerms` and the rest are
still used by the surviving tests. Prettier and eslint clean.

Co-Authored-By: Claude <noreply@anthropic.com>
(cherry picked from commit 4a7aa34)
(cherry picked from commit f099c7c)
Verified passing at 2.8s on a real 1.13 stack built from this branch.

Born skipped in #25428 claiming "re-filtering expanded state isn't fully
implemented" — that shipped since and nobody revisited the marker. It is the one
stale skip in this file, as opposed to the four genuinely backend-blocked ones
removed in the preceding commit.

It only surfaced on the nightly skip list as a separate entry because the file is
`test.describe.configure({ mode: 'serial' })`: when `filter by child status` fails,
Playwright reports every later test in the file as skipped without executing it.
With those four gone the cascade cannot occur, so this test now actually runs.

Co-Authored-By: Claude <noreply@anthropic.com>
fb2837e landed `headerPermTest(` with five leading spaces instead of four,
which fails `prettier --check` and would block the UI Checkstyle job.

The assertion change in that commit is correct and identical to what this branch
already carried — verified passing on a real 1.13 stack (3.0s). Only the
indentation is corrected here.

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@siddhant1 siddhant1 changed the title Backport to 1.13: re-enable domain-rename, glossary empty-state and header-permission E2E specs test(e2e): 1.13 skip-list cleanup — re-enable 5 specs that pass, drop 4 that never ran Aug 3, 2026
Closes the last gap between this branch and #30843, so 1.13 lands the same
glossary state as main and 2.0 in a single merge — no post-merge cherry-pick of
#30843 onto 1.13 is needed, and none should be attempted: the other two pieces of
#30843 (the four removals and the change-filter re-enable) are already on this
branch and would conflict.

Measured passing on a real 1.13 stack (1.9m).

Caveat worth carrying into review: **#29931 is not on 1.13**. That PR fixed the
approve/reject condition scheme — duplicate edges and stuck resolves in the
approval workflow — which is the documented cause behind this test's original skip
("BE approval-workflow reverts it"). `APPROVE_CONDITION` and
`getExpectedResultForActiveTask` are both absent here, so 1.13 passes this test
without the root fix. On main it passed 3/3 (1.0m, 58.6s, 58.3s) with the fix; on
1.13 it has one measured pass without it, and the failure mode is a load-dependent
race that shows up under CI concurrency rather than on an idle machine.

If it flakes in nightlies, backport #29931 rather than re-skipping. Note that is
not a casual cherry-pick — it touches 21 files including
bootstrap/sql/migrations/native/2.0.0/{mysql,postgres}/schemaChanges.sql, and a
trial cherry-pick onto 1.13 conflicts in 14 of them.

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@@ -512,8 +464,7 @@ test.describe('Glossary Status Filter - Nested Terms', () => {
});

// Skip: Requires re-filtering expanded state which isn't fully implemented

@gitar-bot gitar-bot Bot Aug 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Quality: Stale "Skip:" comment left above re-enabled test

The comment // Skip: Requires re-filtering expanded state which isn't fully implemented still sits directly above the now-enabled change filter while expanded updates visible root terms test. It is now misleading — a reader would think the test is skipped/broken. Remove the stale comment along with the marker it described.

Delete the stale Skip comment on line 466.:

test('change filter while expanded updates visible root terms', async ({
  page,
}) => {

Was this helpful? React with 👍 / 👎

@@ -1904,8 +1904,7 @@ test.describe('Glossary tests', () => {
});

// Need to fix the workflow from BE end, as it constantly failing in the AUT's

@gitar-bot gitar-bot Bot Aug 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Quality: Stale skip-reason comment left above re-enabled approval test

The comment // Need to fix the workflow from BE end, as it constantly failing in the AUT's remains above the re-enabled Term should stay approved when changes made by reviewer test. Since the test.skip was removed, this comment now falsely implies the test is disabled/failing. Remove or update it; note the PR summary itself flags that the BE fix (#29931) is NOT on 1.13, so a brief note about the load-dependent flake risk would be more useful than the stale text.

Delete the stale backend-workflow skip comment on line 1906.:

test('Term should stay approved when changes made by reviewer', async ({
  browser,
}) => {

Was this helpful? React with 👍 / 👎

@siddhant1
siddhant1 merged commit d38bae5 into 1.13 Aug 4, 2026
55 of 59 checks passed
@siddhant1
siddhant1 deleted the backport/e2e-unskips-to-1.13 branch August 4, 2026 04:57
@gitar-bot

gitar-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown
Code Review 👍 Approved with suggestions 0 resolved / 2 findings

Re-enables five passing E2E specs and drops four unexecuted tests for the 1.13 skip-list cleanup. Consider removing the stale skip-reason comments left above the newly enabled tests.

💡 Quality: Stale "Skip:" comment left above re-enabled test

📄 openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/Glossary/GlossaryStatusFilterNestedTerms.spec.ts:466

The comment // Skip: Requires re-filtering expanded state which isn't fully implemented still sits directly above the now-enabled change filter while expanded updates visible root terms test. It is now misleading — a reader would think the test is skipped/broken. Remove the stale comment along with the marker it described.

Delete the stale Skip comment on line 466.
test('change filter while expanded updates visible root terms', async ({
  page,
}) => {
💡 Quality: Stale skip-reason comment left above re-enabled approval test

📄 openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Glossary.spec.ts:1906

The comment // Need to fix the workflow from BE end, as it constantly failing in the AUT's remains above the re-enabled Term should stay approved when changes made by reviewer test. Since the test.skip was removed, this comment now falsely implies the test is disabled/failing. Remove or update it; note the PR summary itself flags that the BE fix (#29931) is NOT on 1.13, so a brief note about the load-dependent flake risk would be more useful than the stale text.

Delete the stale backend-workflow skip comment on line 1906.
test('Term should stay approved when changes made by reviewer', async ({
  browser,
}) => {
🤖 Prompt for agents
Code Review: Re-enables five passing E2E specs and drops four unexecuted tests for the 1.13 skip-list cleanup. Consider removing the stale skip-reason comments left above the newly enabled tests.

1. 💡 Quality: Stale "Skip:" comment left above re-enabled test
   Files: openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/Glossary/GlossaryStatusFilterNestedTerms.spec.ts:466

   The comment `// Skip: Requires re-filtering expanded state which isn't fully implemented` still sits directly above the now-enabled `change filter while expanded updates visible root terms` test. It is now misleading — a reader would think the test is skipped/broken. Remove the stale comment along with the marker it described.

   Fix (Delete the stale Skip comment on line 466.):
   test('change filter while expanded updates visible root terms', async ({
     page,
   }) => {

2. 💡 Quality: Stale skip-reason comment left above re-enabled approval test
   Files: openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Glossary.spec.ts:1906

   The comment `// Need to fix the workflow from BE end, as it constantly failing in the AUT's` remains above the re-enabled `Term should stay approved when changes made by reviewer` test. Since the `test.skip` was removed, this comment now falsely implies the test is disabled/failing. Remove or update it; note the PR summary itself flags that the BE fix (#29931) is NOT on 1.13, so a brief note about the load-dependent flake risk would be more useful than the stale text.

   Fix (Delete the stale backend-workflow skip comment on line 1906.):
   test('Term should stay approved when changes made by reviewer', async ({
     browser,
   }) => {

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar | Powered by Gitar — free for open source

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant