Skip to content

Cherry-pick #30451 to 2.0: re-enable Domains, Data Product & domain-rename E2E suites - #30777

Merged
siddhant1 merged 1 commit into
2.0from
cherry-30451-to-2.0
Jul 31, 2026
Merged

Cherry-pick #30451 to 2.0: re-enable Domains, Data Product & domain-rename E2E suites#30777
siddhant1 merged 1 commit into
2.0from
cherry-30451-to-2.0

Conversation

@siddhant1

@siddhant1 siddhant1 commented Jul 31, 2026

Copy link
Copy Markdown
Member

Cherry-pick of #30451 onto 2.0.

Applied cleanly with no conflicts. See #30451 for the full write-up.

What it carries

Re-enables E2E coverage that was disabled on this branch — 10 test.describe.fixme suites turned back on and 3 test.skips removed across 5 spec files (+133/−166):

Spec Change
Pages/Domains.spec.ts Un-fixmes Domains, Domain Rename Comprehensive, Domains Rbac, Data Consumer Domain Ownership, hasDomain()/noDomain() Rule, Domain Tree View, asset dryRun
Pages/Glossary.spec.ts Un-skips the empty-state term case; selector hardening
Features/LandingPageWidgets/DomainDataProductsWidgets.spec.ts Un-fixmes Domain and Data Product Asset Counts
Features/EntityRenameConsolidation.spec.ts Un-skips the two domain rename + description cycles
Features/Glossary/GlossaryNavigation.spec.ts Selector hardening

The substantive selector fix it carries: CreatePlaceholder applies its action's data-assets-add-button as the button's DOM id, not a testid, so the CTA is selected with page.locator('#data-assets-add-button') instead of getByTestId(...).

Backport notes

The applied diff is byte-identical to main's except for one context lineDomains.spec.ts asserts the assets empty state differently on each branch:

  • main: page.getByTestId('empty-placeholder')
  • 2.0: page.getByText('No assets linked yet')

That divergence is pre-existing (main changed it in a later, unrelated commit) and untouched here. Verified valid on 2.0: the string resolves to no-assets-linked-yet in this branch's en-us.json.

Verification

  • Cherry-pick applied with no conflicts; -/+ lines identical to the original commit.
  • CreatePlaceholder.tsx and EmptyPlaceholder.utils.ts are identical between 2.0 and main, so the DOM-id selector change is valid here — resolveSingleAction's contract ("id, when provided, is applied to the generated button as its DOM id") holds on this branch.
  • Every selector the patch introduces resolves in 2.0 source: approve-button, asset-selection-modal, delete-all-button, request-description, viewer-container, table-data-card_, data-assets-add-button.
  • Prettier clean on all 5 files.

Runtime behaviour of the re-enabled suites on 2.0 is not verified locally — that is what this PR's Playwright run is for.

Greptile Summary

Re-enables domain, data-product, glossary, and rename Playwright coverage while updating selectors and stabilizing asynchronous asset-removal assertions.

  • Activates previously skipped domain and glossary suites.
  • Runs the landing-page widget tests serially and waits for asset cards before bulk removal.
  • Updates empty-state, dialog, tree-view, and description selectors for the current UI.

Confidence Score: 4/5

The shared-fixture lifecycle in the re-enabled Domains suite should be fixed before merging because parallel tests can lose their domain or user while still running.

Activating the Domains describe block exposes an individual test that deletes resources owned by the suite-level setup, allowing fully parallel tests to observe missing shared state.

Files Needing Attention: openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts

Important Files Changed

Filename Overview
openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts Re-enables several domain suites and updates selectors, but exposes unsafe deletion of fixtures shared by the fully parallel Domains suite.
openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/LandingPageWidgets/DomainDataProductsWidgets.spec.ts Re-enables widget count coverage serially and makes the two-asset bulk-removal flow wait for rendered cards.
openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/EntityRenameConsolidation.spec.ts Re-enables two independently provisioned domain rename and description-update tests.
openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/Glossary/GlossaryNavigation.spec.ts Re-enables the empty-glossary case and targets the placeholder representing the actual zero-term state.
openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Glossary.spec.ts Re-enables glossary-term description task coverage and replaces a one-shot text read with a web-first assertion.

Reviews (1): Last reviewed commit: "test(ui): re-enable Domains, Data Produc..." | Re-trigger Greptile

Greptile also left 1 inline comment on this PR.

…30451)

* test(ui): re-enable Domains, Data Product & domain-rename E2E suites

Re-enables E2E coverage that was disabled by the mass-skip #29909 and a
few one-off skips, fixing the tests that had broken from UI migrations.

Fixed:
- Domains (9 suites): 47/49 already passed once run; fixed the 2 real
  failures, both migration selector drifts — "Add Assets" moved to the
  core-ui `asset-selection-modal` Dialog (old `form-heading` testid
  gone), and the tree toggle is now a `radio`, not a `button`.
- DomainDataProductsWidgets: marked `test.describe.serial` (the suite is
  one sequential scenario: assign widgets -> add assets -> verify ->
  remove), and fixed the data-product asset-removal count-timing bug —
  wait for the asset card to render before counting, otherwise count()
  reads 0 and removes nothing.
- GlossaryNavigation empty-state: assert the empty-glossary placeholder
  (message.no-glossary-term) instead of the "No Glossary Term found" row
  that only a non-matching status filter shows.

Unskipped as-is (passed without changes):
- Glossary "Request description task for Glossary Term"
- EntityRenameConsolidation domain rename (x2)

Left skipped (blocked on product/BE work, still documented):
- DataMarketplace x3 (routes removed in #27377)
- GlossaryStatusFilterNestedTerms x5 (flat nested status-filter results
  not implemented; status-only queries route through directChildrenOf)
- Glossary "Term should stay approved" (BE approval-workflow reverts it)

BulkImport is untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(e2e): repair three specs that broke against current main

Domains "Create DataProducts and add remove assets": the assets empty-state
CTA lost its data-testid in #30489 — CreatePlaceholder maps the action's id
onto the button's DOM id — so select it by id instead.

GlossaryNavigation empty state: #30057 replaced the ErrorPlaceHolder text
("...there are no Glossary Terms defined...") with an EmptyPlaceholder, and
message.no-glossary-term is now unused. Assert the placeholder testid, matching
CustomizeDetailPage.spec.ts.

Glossary "Request description task for Glossary Term": restore
{ navigate: true } so performAdminLogin returns an authenticated page rather
than taking the API-only path, and replace the one-shot textContent read with a
web-first assertion — it read an empty container before the description
rendered, mirroring the sibling glossary-level test.

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

* ci(playwright): track the 25m shard wrapper in the perf gate

#30689 raised the shard step's `timeout ... 21m` wrapper to 25m and the job
`timeout-minutes` 30 -> 35, but left the blocking performance target at
`maxExecutionSeconds <= 1260`. That opened a 21-25 minute band where a shard
completes well inside its timeout and every test passes, yet
evaluate_playwright_performance.py fails the run and playwright-summary
reports it as a CI/reporting failure with zero test failures.

Merge-queue run 30590319979 for #30451 landed in exactly that band: all 34
shards green, slowest execution 1396s, blocked solely by this target.

Move the target to 1500s so it tracks the wrapper, and rename it to match.

* ci(playwright): give shards 30m and keep the gates tracking the wrapper

chromium-18 was killed by the 25m timeout wrapper on merge-queue run
30603720876 (exit 124, PW_EXECUTION_SECONDS=1500): 244 tests planned, 236
finished, 8 never ran. The shard genuinely needs more than 25 minutes, so
raising the gate alone is not enough — the wrapper has to move too.

- shard wrapper 25m -> 30m
- job timeout-minutes 35 -> 40; the killed job's wall was 28m46s against a
  25m wrapper, so overhead is ~4m and 35 would leave almost none. Keeping the
  job clock a clear 10m above the wrapper means the wrapper always trips
  first, which fails the shard cleanly instead of cancelling mid-upload.
- executionAtMostTwentyFiveMinutes (1500) -> executionAtMostThirtyMinutes (1800)
- shardsAtMostThirtyMinutesBeforeUpload (1800) ->
  shardsAtMostThirtyFiveMinutesBeforeUpload (2100); elapsed runs ~200s above
  execution, so a 30m wrapper would otherwise breach the old 1800s cap.

This does not reduce the underlying skew: the same run had 35.67% common
shard skew, so one shard runs ~30m while others finish in 3m. That stays a
convergence warning and wants a planner fix, not a bigger timeout.

* ci(playwright): restore real weights for re-enabled specs in the timing baseline

The planner weights every test from timing-baseline.json. load_history pins a
recorded `skipped` entry to 0:

    elif test_id and test.get("outcome") == "skipped":
        durations[test_id].append(0)

and build_playwright_shards.py reads it as

    test_weights.get(test_id, identity_weights.get(..., FALLBACK_TEST_MS))

so an explicit 0 wins over the 20 s fallback. Once a PR re-enables those specs
the planner still costs them at zero, packs them onto one shard, and the shard
overruns its wrapper with no warning: on merge-queue run 30603720876 chromium-18
was predicted at 18.8 min (predictedExecutionMs 1128075) and was killed at the
25 min wrapper with 8 of 244 tests unrun. Domains.spec.ts alone ran 1157 s there
against a recorded weight of 0.

Refresh the 76 entries that were recorded `skipped` with 0 ms and have real
durations in the timing history of run 30590319979 (mode=full, all 34 shards
green): +1500 s of weight the planner could not previously see. Entries still
skipped in that run keep their zero, and the two genuinely instant `expected`
0 ms entries are left alone — they already fall through to FALLBACK_TEST_MS,
and test_versioned_baseline_only_uses_zero_weight_for_skipped_ids asserts it.

Replanned locally against the real `playwright test --list` for this branch:

    workers  Domains.spec.ts spread   max tests/shard   chromium shards
    3        2 -> 9 shards            243 -> 213        22 -> 23
    4        2 -> 7 shards            343 -> 280        17 -> 17

Predicted execution stays ~18.5-18.8 min, but it is now honest: the weight the
shard actually carries is visible to the planner instead of arriving as ~7.5 min
of unbudgeted work at 3 workers.

* Revert "ci(playwright): restore real weights for re-enabled specs in the timing baseline"

Drops the timing-baseline.json change from this PR so it carries only the
re-enabled specs. The zero-weight planner blind spot it addressed is real —
Domains.spec.ts is recorded at 0 ms against ~1073 s of actual work, which is
what let chromium-18 be planned at 18.8 min and killed by the 25 min wrapper —
but it will be handled by splitting the spec instead: moving the tests to new
files changes their Playwright ids (the id prefix is a per-file hash), so the
stale zero-weight entries no longer match and the tests fall through to
FALLBACK_TEST_MS.

Note this also gives up the restored weights for the other files the baseline
patch covered, ~468 s in total, notably DomainDataProductsWidgets.spec.ts
(186.5 s) and EntityRenameConsolidation.spec.ts (26.6 s), both re-enabled by
this PR and now back at zero.

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 64c33fc)
@siddhant1
siddhant1 requested a review from a team as a code owner July 31, 2026 19:23
@siddhant1 siddhant1 added UI UI specific issues safe to test Add this label to run secure Github workflows on PRs labels Jul 31, 2026
@github-actions

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.

@gitar-bot

gitar-bot Bot commented Jul 31, 2026

Copy link
Copy Markdown
Code Review ✅ Approved

Cherry-picks the commit to re-enable Domains, Data Product, and domain-rename E2E suites by removing skip and fixme markers across five spec files. No issues found.

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

});

test.describe.fixme('Domains', () => {
test.describe('Domains', () => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 Shared fixtures deleted during suite

When the re-enabled Domains suite runs fully parallel, the domain-owner test deletes the module-level domain and user created by beforeAll, causing concurrent or later tests that use those shared fixtures to fail with missing-entity or authentication errors.

@github-actions

Copy link
Copy Markdown
Contributor

❌ UI Checkstyle Failed

❌ Antd + Less Deprecation Guard

A new antd import or new .less file was added. Use UntitledUI + Tailwind for new work.

Affected files

at Function._resolveFilename (node:internal/modules/cjs/loader:1401:15)
at defaultResolveImpl (node:internal/modules/cjs/loader:1057:19)
at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1062:22)
at Function._load (node:internal/modules/cjs/loader:1211:37)
at TracingChannel.traceSync (node:diagnostics_channel:322:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:235:24)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:171:5)
at node:internal/main/run_main_module:36:49 {


Fix locally (fast - only checks files changed in this branch):

make ui-checkstyle-changed

@siddhant1
siddhant1 merged commit 3584b4c into 2.0 Jul 31, 2026
59 of 116 checks passed
@siddhant1
siddhant1 deleted the cherry-30451-to-2.0 branch July 31, 2026 19:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to test Add this label to run secure Github workflows on PRs UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant