Commit Graph
61 Commits
Author SHA1 Message Date
3906bdc296 test: stabilize alpha1 Alerts shard on cloud (fix auto_playwright_stream being-deleted race + concurrency hardening) (#13209)
## What

Stabilizes the **Alerts** shard of the alpha1 cloud E2E suite to green,
running **fully
parallel** (`workers:3`, `fullyParallel:true`) — no serialization.
Test-infra +
page-object changes only; **no product code**. The one product-side
defect surfaced (the
prebuilt destination form unmounts its fields on template auto-load) is
worked around in
the test layer and written up separately for a frontend fix.

## Approach change since the first revision

The first version serialized the contended tests (`@serialAlpha1` + a
dedicated
`chromium-serial` project). Per review feedback ("solve it in
parallel"), that was
**removed** — the shard now runs **fully parallel**, and the flakiness
is fixed at the
source (fixture / registration / render races) instead of by
serializing.

## Root causes & fixes

### Streams / fixtures
- **`auto_playwright_stream` "being deleted" race** — the 3
`alerts-ui-operations` tests
now use the shared, always-protected **`e2e_automate`** stream
(pre-ingested by
global-setup, never deleted by cleanup), eliminating the shared
fixed-name delete race
entirely. `cleanup.spec.js` no longer deletes `auto_playwright_stream`;
`commonActions.ingestTestData` checks `response.ok()`, retries the "is
being deleted"
race, and polls the streams API until the stream is registered before
the wizard opens.

### Alert wizard
- **Dedup alert blocked at save** —
`createScheduledAlertWithDeduplication` typed its SQL
into the Monaco editor without clearing the default `SELECT * FROM
"<stream>"`, producing
malformed SQL → "Please fix the SQL error before saving." Now clears the
editor first.
- **Stream-select ordering + registration poll** — drive the stream
dropdown only after its
list fetch resolves; poll registration; page-reload recovery when the
cached list is stale.

### Prebuilt destinations (the deep one)
- **App defect:** on a *reused* form (2nd+ destination), selecting a
prebuilt type
intermittently **unmounts the credential/name fields ~0.5 s later**
(template auto-load
re-render) and they stay gone. Confirmed via DOM timeline (`count:0` for
25 s+). Since a
wait can't recover an unmounted element, `selectDestinationType` clicks
the card once,
waits for the template network to settle, confirms the fields are
**stable** (not just
present), and — if they unmount — **remounts the form** (cancel+reopen →
full page reload)
  and re-selects. Written up separately for a frontend fix.
- **List verifications raced the OTable loading skeleton** —
`expectDestinationInList` / `verifyDestinationExists` /
`verifyAlertCreated` now wait for
`o2-table-skeleton-body` to clear and poll the **list** endpoint the UI
actually reads
  (not just the single-GET) before asserting the row.

### Form-validation specs
- `alerts-form-validation` + `anomaly-detection-form-validation` flipped
serial→parallel and
made self-sufficient: `beforeAll` seeds a worker-scoped
template+destination via API (the
"Add Alert" button is hard-disabled with zero destinations), `afterAll`
removes them,
  cleanup patterns registered.

### Misc
- Cloud-correct (https) ingestion agent; alert search-input +
`updateAlert` edit-form wait
  hardening for shared-org load.

## Cloud environment gates (legitimate — not coverage drops)

`test.skip(isCloudEnvironment())` (dedup validation), `if
(!isCloudEnvironment())` (import
trigger round-trip), and external destination URLs — all because cloud's
**SSRF guard**
blocks self-referencing destinations by design. All still run fully on
OSS/self-hosted.

## Scope / safety

- 15 files: Alerts page-objects, alpha1 config + global-setup, Alerts
specs, cleanup. **No product code.**
- **No tests deleted, no `.only`, no unconditional skips, no assertions
removed.**
- The temporary Alerts-only playwright matrix (added for faster
iteration) has been
  **reverted** — the full OSS e2e matrix is restored.

## Validation

- Prebuilt P1 validated locally on cloud alpha (repeated clean passes;
every field-unmount
  recovered by the remount).
- alpha1 Alerts CI:
https://github.com/openobserve/o2-enterprise/actions/runs/29391293698


🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2026-07-17 07:04:48 +00:00
Vamsi Karthik RandClaude Opus 4.8 38e944529d test: unblock alpha1 cloud E2E suite — shared setup fixes + Functions (#13155)
## What

Repairs the shared setup + ingestion path that was failing **every**
module of the alpha1 cloud E2E suite (`playwright_alpha1.yml`) after the
UX revamp, **and stabilizes the first full test shard — Functions — to
green** (validated in CI, run link below). No changes to the test
matrix.

Per-module fixes for the remaining shards land in separate follow-up
PRs.

## Root cause — shared setup (blocked all 13 modules)

1. **Automation login user routes through Okta.** After the revamp,
`@openobserve.ai` logins on alpha redirect to Okta SSO and 404 —
automation can't complete login. The local-auth `e2etest@o2-qa.com` user
still uses the Dex password flow.

2. **Org-switch selectors changed** (`global-setup-alpha1.js`). The org
dropdown now opens via a dedicated trigger button; the old inline
`arrow_drop_down` text is an SVG icon, the search box's `data-test`
moved to the `OSearchInput` wrapper `<div>`, and rows carry a
`data-test-org-identifier`.

3. **Ingestion helper rejected https.** `ingestionPage.js` hardcoded an
`http.Agent` for node-fetch — throws `Protocol "https:" not supported`
against alpha's https ingestion URL (killed ~27 tests/run across
modules).

## Root cause — Functions shard

4. **Tests created enrichment tables in the wrong org.**
`navigateToBase` passes `?org_identifier=` on the root URL; the redirect
to `/web/` **drops the query param**, so the app fell back to the user's
default org and enrichment tables were created there. Fixed by
deep-navigating to the enrichment page with the org param and asserting
the active org stuck (same pattern js-transform tests already use).

5. **Backend bug (reported separately): enrichment URL-jobs fail for
table names starting with `schema`.** 100% reproducible,
org/session/timing-independent: the job's save step fails with `Failed
to save batch 1: not an ingester` (`schema_probe1` ❌ / `view_probe1` ✅,
same request otherwise). Test tables renamed `schema_view_*` →
`view_schema_*` and `schema_mismatch_*` → `mismatch_schema_*`; cleanup
patterns cover both prefixes. The product bug itself still needs a
backend fix — it affects any user naming a table `schema…`.

Plus hardening while there: URL-job completion is now decided from the
backend status API instead of inferring from row-button counts (which
misread a failed job as success), the job's `error_message` is logged on
failure, and the create form verifies field values + Save enabled +
create-API response before proceeding.

## Validation

- **CI (this PR's branch): [run
#168](https://github.com/openobserve/o2-enterprise/actions/runs/29315765982)
— Cloud ✅ (3m31s) + Functions ✅ (13m14s), `playwright_summary` ✅**
- Local (alpha, CI conditions): previously-failing schema-view +
schema-mismatch tests 2/2 green; earlier full-shard run 24/25 with the
same single failure now fixed.

## Notes

- `ALPHA1_USER_*` secrets: CI already uses a working non-Okta user
(Cloud job green).
- Follow-ups: backend `schema`-prefix bug (separate report), per-module
PRs for remaining shards.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 06:58:55 +00:00
ktx-akshay 39c1d8ae83 test: reduce Logs-Builder-Basic e2e runtime by removing dead waits and duplicate setup (#13080)
## Reduce `Logs-Builder-Basic` e2e shard runtime — ~10 min → ~5 min

### 🎯 Result (measured on CI)

| Metric | Before | After | Saved |
|--------|--------|-------|-------|
| **`Logs-Builder-Basic` shard** | **10m 05s** | **5m 12s** | **~4m 53s
(≈48% faster)** |

The shard runtime is cut roughly in half. Most of the old time was fixed
sleeps, waits that always ran their full timeout, and duplicated
per-test setup — not actual test logic. **No test cases, steps, or
assertions were removed.**

### What we changed

| # | Area | Before | After | Saving |
|---|------|--------|-------|--------|
| 1 | `initQueryBuilderTest` setup | Logs page loaded twice (helper
`goto` + `selectStream` navigates again) | Navigate once | 1 page load ×
~41 tests |
| 2 | `waitForBuildTabLoaded` | Always waited up to 10s for editor to
fill, even when it's meant to be empty | Skip when SQL mode is off |
~10s dead wait on many tests |
| 3 | `enableSqlModeIfNeeded` | 2s watcher wait + 500ms sleep, even
where the watcher never fires | Gated to Build tab; waits on real signal
| ~2.5s × ~35 tests |
| 4 | `disableSqlModeIfNeeded` | Fixed 500–600ms sleeps | Deterministic
wait on editor update | Blind sleeps removed |
| 5 | `applyQueryButton` | Clicked Run blindly | Waits for button ready
first | Fewer early-click retries |
| 6 | `pagination.spec` | Fresh stream ingest + index-wait per test (9×)
| One ingest per worker, reused | 8 redundant ingests + waits |
| 7 | `pagination.spec` | Dead `waitForTimeout(2000)` per streaming test
| Removed | ~2s × 5 tests |
| 8 | `unflattened.spec` | Search run twice with 3s + 1s sleeps | Single
run | ~5s × ~8 calls |
| 9 | `unflattened` row scan | Fixed 3s sleep per row | Wait for content
to render | 15-row scan: ~97s → seconds |
| 10 | `unflattened.spec` | Blind sleep after ingest | Poll until stream
queryable | No over-waiting |

### Bonus

Items 2–5 live in the shared `logsPage` page object, so
`Logs-Builder-Advanced`, `Logs-Core`, and `Logs-Features` shards get
faster for free too.

### Notes

| Item | Detail |
|------|--------|
| `playwright.yml` | Unchanged — shard layout stays as-is |
| Assertions | Preserved everywhere (e.g. pagination still checks the
same record counts) |
| Validation | All 52 tests still discovered by `playwright --list`;
shard confirmed green on CI at 5m 12s |
2026-07-08 09:47:08 +00:00
BhargavandClaude Opus 4.8 2a3416ee35 fix: Rum automation (#13064)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 10:09:16 +00:00
Shrinath RaoandClaude Opus 4.8 cd634bae43 test: heal flaky logs field-values-cache regression test (readiness gate) (#12956)
## What

Heals the flaky **\`should fetch fresh field values when switching
streams\`** (`@fieldValuesCache @P1 @regression`) test in
`RegressionSet/Logs/logs-bugs.spec.js`, which failed the
`Logs-Regression` job in [o2-enterprise run
28454057830](https://github.com/openobserve/o2-enterprise/actions/runs/28454057830/job/84328391696).

## Root cause

The test ingests a unique `service_name=svc-automate-<runId>` into the
**shared** `e2e_automate` stream, then immediately drives the UI
field-values panel — with **no readiness gate** confirming that value is
searchable yet. Freshly-ingested data isn't queryable instantly (WAL →
index lag), so the `_values` call returns `svc-automate-*` values from
earlier runs/retries but misses the just-ingested one:

```
Error: Expected stream1 values to contain svc-automate-1782832273253, got: svc-automate-17828322504262
```

Playwright retries amplify it — each retry adds another `svc-automate`
value to the shared stream while still missing the current run's value,
so all retries fail.

> Note: the CI job's attempt-2 then crashed on a `jq: Cannot iterate
over null` error in the rerun-detection step. That is a **separate,
already-fixed** issue — current `main` already has `actions: read` on
the job + jq guards; the failing run executed a stale pre-fix workflow
snapshot (GitHub re-runs reuse the original attempt's YAML). No workflow
change is needed here.

## Fix

- Add `waitForFieldValueSearchable()` to `utils/data-ingestion.js` —
polls `_search` until the exact field value is returned (the proven
readiness-gate pattern, value-level rather than row-count level).
- Gate both the stream1 and stream2 ingested values before the UI
assertions.

## Verification

Run locally against a local OpenObserve with `--repeat-each=3`:

```
Stream1 field values: ["svc-automate-...0702","svc-automate-...4762"]              # accumulates (reproduces CI pollution)
✓ Stream1 shows correct value: svc-automate-1782833946762                          # current value always present now
...
3 passed (1.0m)
```

The accumulating `svc-automate-*` values across repeats reproduce
exactly the shared-stream pollution seen in CI, and the gate ensures the
current run's value is always present.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 16:26:30 +00:00
Neha PandClaude Opus 4.7 b9846cf42e test: add metrics alert notification E2E test with self-contained ingestion (#12672)
## Summary
- Adds `alerts-metrics-notification.spec.js` — a 3-test UI suite
verifying the full metrics alert chain
- Test 1 (P1): PromQL alert triggers via scheduler, verified in history
UI — self-contained using `ensureMetricsIngested()`
- Test 2 (P2): Template body contains required alert variables
(`{alert_url}`, `{alert_name}`, `{stream_name}`)
- Test 3 (P1): Manual trigger from alert list more-options menu sends
notification
- Includes `alert-metrics-notification-findings.md` documenting manual
testing results (API schema, PromQL vs SQL, trigger indicators)

## Test plan
- [ ] Test 1: Alert triggers on freshly ingested `cpu_usage` metrics and
history rows appear in UI
- [ ] Test 2: Template editor (Monaco) shows expected variables
- [ ] Test 3: Manual trigger menu option calls PATCH /trigger and
succeeds

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-15 17:41:45 +00:00
a749599898 fix: update e2e selectors for O2 component migration (#12346)
Replace Quasar-based selectors with O2 component equivalents across
alerts, dashboard, logs, and streams page objects. Key changes:
- OSwitch: target -btn suffix on inner button
- OSelect: use -trigger/-popover/-option suffixes, fallback to
[role="option"][data-test-value] when parent has no data-test
- OCombobox: use placeholder-based locators where no data-test exists
- OInput: descendant input selectors, pagination text format handling
- OTable: custom bottom slot pagination format ("N Stream(s)")

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2026-05-29 17:07:42 +00:00
98d1d1c378 test: fix Chromium CI stability and disable ENT-only tests (runner resize, timeouts, cache, no-sandbox) (#12330)
## Summary

- **`--no-sandbox` / `--disable-setuid-sandbox`** added to
`chromium.launch()` in `globalSetup.js` and `launchOptions` in
`playwright.config.js` (CI-only) — prevents silent Chromium hangs on
restricted runner environments
- **`globalTimeout: 110 min`** added to `playwright.config.js` — caps
the entire suite at 110 min (10 min under the job timeout) so hung runs
fail with a clear Playwright error instead of a silent CI kill
- **`restore-keys` fallback** added to the browser cache step — a
`package-lock.json` change no longer forces a full 163 MB re-download on
every shard simultaneously
- **Runner right-sizing**: `ui_integration_tests` →
`repo-openobserve-standard-16`; `merge_and_upload_reports` +
`playwright_summary` → `repo-openobserve-standard-4`

## Test plan

- [ ] Confirm `ui_integration_tests` shards start without Chromium
launch hangs
- [ ] Confirm cache hit on second run (restore-keys fallback working)
- [ ] Confirm `merge_and_upload_reports` and `playwright_summary`
succeed on 4 GB runners

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-05-28 19:23:41 +05:30
+5 ae22a74e62 feat: ux improvement main (#11838)
#11720

Design at:

https://github.com/openobserve/designs/blob/main/dashboards/ux-improvement-dialog/design.md

---------

---------

Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com>
Co-authored-by: Abhay Padamani <141122205+ktx-abhay@users.noreply.github.com>
Co-authored-by: Sai Nikhil <nikhil@openobserve.ai>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
Co-authored-by: ktx-mihir <mihir.patel@kiara.tech>
Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Omkar Kesarkhane <127078473+omkarK06@users.noreply.github.com>
Co-authored-by: omkark06 <omkar@zinclabs.io>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
2026-05-28 11:00:49 +00:00
Shrinath RaoandClaude Opus 4.7 916cc79c5c fix: restore search priming in QB lite init, fix SQL OFF filter parsing (#11823)
## Summary
- Restores `applyQueryButton` call in `initQueryBuilderTestLite` — the
initial match_all search serves as a UI priming step that ensures the
auto-search from stream selection has completed before the test runs its
own query
- Adds `runQueryAndWaitForResults` before `clickBuildToggle` in SQL OFF
mode tests — matching the flow in `setupQueryAndSwitchToBuild` so the
builder has query results to parse into filters

## Root Cause
PR #11797 moved ingestion from `beforeEach` to `beforeAll` and
introduced `initQueryBuilderTestLite` which skipped the initial
match_all search. Two issues emerged:

1. **No UI priming**: After `selectStream`, an auto-search fires
automatically. Without waiting for it to complete, the test's own query
could run while the UI was in an intermediate state, causing the builder
to parse zero filter conditions.

2. **SQL OFF tests skipped query execution**: These tests set search bar
content and clicked build toggle without running the query first. The
builder had no executed query results to parse into filters.

## Changes
| File | Change |
|------|--------|
| `queryBuilder-helpers.js` | Add `applyQueryButton(pm)` to
`initQueryBuilderTestLite` (same as full init) |
| `logsQueryBuilder-filters-advanced.spec.js` | Add
`runQueryAndWaitForResults()` before `clickBuildToggle()` in 2 SQL OFF
tests |

## Test Results
- Local (5 workers, 77 tests): **74 passed**, 3 pre-existing
intermittent failures (CTE chart type, auto-mode chart type, NOT LIKE
filter parsing)
- The 8 CI flaky tests from #11797 are all in the passing set

## Test plan
- [ ] CI: Logs-Builder-Basic and Logs-Builder-Advanced shards pass with
0 flaky tests
- [ ] All 77 QB tests pass

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 10:38:31 +00:00
Shrinath RaoandClaude Opus 4.7 4211cf37cf test: move QB ingestion to beforeAll, skip redundant initial queries (#11797)
## Summary
- Moves `ingestTestData` from `beforeEach` to `beforeAll` across all QB
describe blocks (one ingestion per describe instead of per test)
- For describe blocks where ALL tests call `setupQueryAndSwitchToBuild`
(run their own query), uses a lite `beforeEach` that skips the initial
`match_all` `/_search` call
- Adds `ingestForQueryBuilderTest` helper that works with Playwright's
`request` fixture (no page needed in `beforeAll`)
- Adds `initQueryBuilderTestLite` helper for describe blocks that don't
need the initial query

**Impact:** ~74 fewer redundant ingestions and ~41 fewer redundant
`/_search` calls per shard run. Estimated reduction: Logs-Builder from
~19 min to ~10-12 min.

## Files changed
| File | Change |
|------|--------|
| `queryBuilder-helpers.js` | Add `ingestForQueryBuilderTest` +
`initQueryBuilderTestLite`, remove ingestion from `initQueryBuilderTest`
|
| `logsQueryBuilder-filters.spec.js` | Split SQL OFF tests into separate
describe, add `beforeAll`, use lite init for main block |
| `logsQueryBuilder-chart.spec.js` | Add `beforeAll` to 5 describe
blocks, use lite init for Chart Type + Chart Auto-Selection blocks |
| `logsQueryBuilder-editor.spec.js` | Add `beforeAll` to 7 describe
blocks, use lite init for Bare Field Select + FieldList visibility
blocks |

## Test plan
- [ ] CI: Logs-Builder shard completes in < 13 minutes (currently ~19
min)
- [ ] All 77 QB tests pass (no regressions)
- [ ] No changes to test assertions or coverage

## Fallback
If this doesn't bring Logs-Builder below ~13 min, Plan B (4-shard split)
is documented in `tests/ui-testing/MD_Files/Logs Shard
Split/4-shard-strategy.md`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 07:18:37 +00:00
Shrinath RaoandClaude Sonnet 4.6 22b23bfb9b test: split logsQueryBuilder into 3 files and rebalance Logs CI shards (#11752)
## Summary

- Splits the monolithic `logsQueryBuilder.spec.js` (82 tests, 1,968
lines) into 3 parallel-friendly files by describe-block grouping:
- `logsQueryBuilder-chart.spec.js` — 28 tests (P0 critical, tab
navigation, chart types, entry conditions, chart auto-selection)
- `logsQueryBuilder-filters.spec.js` — 26 tests (all filter operator
tests)
- `logsQueryBuilder-editor.spec.js` — 23 tests (builder tab
improvements, edge cases, mode toggles, bare field select, field list
visibility)
- Replaces the 2 uneven Logs shards (`Logs-Core` 175 tests /
`Logs-Queries` 57 tests) with 3 balanced shards:
- `Logs-Builder` (~102 tests) — the 3 split files + logsquickmode,
logshistogram, pagination, unflattened
- `Logs-Core` (~92 tests) — logspage, logstable, logsqueries, join,
shareLink, logsAnalyzeDimensions, monaco-query-prefill,
logsqueries.matchall
- `Logs-Features` (~77 tests) — autocomplete, searchJobInspector,
searchPatterns, jobSearch, sql-autocomplete, CTE, downloads,
secondsPrecision, searchpartition, indexquery, region

## Why

The old `Logs-Core` shard took **28 minutes** because
`logsQueryBuilder.spec.js` (82 serial tests in one file) pinned a single
worker while 4 others sat idle. With the split, all 5 workers can
process files in parallel, bringing estimated shard time to **~10-12
minutes each**.

## Test plan

- [x] All 3 new files verified with `--list` (77 tests parsed correctly)
- [x] Shard 1 (Logs-Builder): 65 passed, 5 failed — all 5 failures are
pre-existing timing/flake issues, confirmed against CI run
[#25556422716](https://github.com/openobserve/openobserve/actions/runs/25556422716/job/75017482996)
- [x] Shard 2 (Logs-Core): 88 passed, 4 failed — all 4 failures
pre-existing in untouched files
- [x] Shard 3 (Logs-Features): 62 passed, 15 failed — 11 are
`@enterprise` tests expected to fail on OSS, 4 pre-existing flakes
- [x] Zero import errors, zero missing utility function errors across
all 3 files
- [x] ENT `playwright.yml` updated in companion PR:
openobserve/o2-enterprise

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 15:42:19 +00:00
Shrinath RaoandClaude Opus 4.7 e2813291ce test: stabilise alpha1 e2e tests via UI org-switch (#11528)
## Summary

Stabilises alpha1 cloud E2E tests across the Logs-Core shard. Fixes a
UI/API org mismatch root cause, adds env-aware query execution helpers,
and brings all 10 changed spec files into POM compliance.

## Root cause (original)

After Dex login, the Pinia store binds all API calls to the user's
*default* org. The URL `?org_identifier=...` alone does not update the
store. Ingestion went to the `.env` org while UI searches went to the
user's default org → empty results → cascading test failures.

## Changes

### Alpha1 environment / authentication
- **`global-setup-alpha1.js`** — switches active org via the navbar
dropdown after Dex login so the Pinia store adopts the correct org;
`context.storageState` captures the result for all test contexts
- **`playwright-alpha1.config.js`** — `ORGNAME` sourced purely from
`.env`; cloud-config override removed
- **`loginPage.login()` / `unflattened.spec.js`** — include
`?org_identifier=${ORGNAME}` in SPA navigation to prevent defaulting to
`_meta`
- **`unflattened.js openStreamDetail()`** — replaced broken
stream-name-text click with `Stream Detail` action button + Schema-tab
visibility wait

### Auto-run query handling (`auto_query_enabled` flag)
- **`logsPage.js`** — added `runQueryAfterModeChange()`: on alpha1
(`auto_query_enabled=true`) waits for the in-flight auto-query to
complete; on local triggers a fresh query. Fixes
`@interestingFieldsCRUD` and `@quickModeResults` tests that were passing
on alpha1 but failing locally because the old fix clicked Refresh
mid-auto-run (hitting Cancel)
- **`logsQueryPage.js`** — null-guard `textContent()` return in
`_toggleAutoRun()` (`|| ''`) to satisfy Playwright's `string | null`
type contract

### Merge conflict resolution
- **`logsPage.js enableQuickModeIfDisabled()`** — kept HEAD's version
that defines `quickModeIndicator` at the top of the function (used in
the retry loop); discarded main's version that opened the utilities menu
before the variable was defined

### POM compliance (Sentinel audit)
Added three new POM methods to **`logsPage.js`**:
- `watchForNotification(timeout)` — returns a promise for pre-action
race-condition-safe notification watching
- `expectNotificationContainsText(text)` — notification text assertion
- `waitForNotificationWithText(text, timeout)` — notification waiter
with text filter

Removed raw locators from spec files:
- **`logspage.spec.js`** — notification race pattern →
`watchForNotification()` + `expectNotificationContainsText()`; 5-line
raw histogram toggle block → `ensureHistogramState(true)` (POM method
already existed)
- **`logsqueries.spec.js`** —
`pm.logsPage.page.waitForSelector('.q-notification__message:has-text(...)')`
→ `waitForNotificationWithText()`
- **`jobSearch.spec.js`** — added `testLogger` import; replaced 14×
`console.log` with `testLogger.info`; raw Monaco editor locators (lines
158–168) → `logsPage.waitForQueryEditorVisible()` +
`logsPage.getQueryEditorText()` (both already in POM)

### Tags
- **`jobSearch.spec.js`** — all 8 tests now tagged: `@jobSearch,
@P0/@P1` with functional sub-tags (`@smoke`, `@crud`, `@validation`)
- **`logshistogram.spec.js`** — all 5 tests now include `@P1`

## Results

- All `logsquickmode.spec.js` tests pass on both local and alpha1
- Zero Sentinel critical issues remaining across all 10 changed spec
files
- Remaining warnings (old-style auth in `jobSearch.spec.js` /
`pagination.spec.js`, `pm.logsPage.page.reload()` in
`logsquickmode.spec.js`) are pre-existing tech debt deferred to a
separate PR

## Test plan

- [ ] Run `logsquickmode.spec.js` locally and on alpha1 — both should
pass
- [ ] Run full Logs-Core shard on alpha1: `npx playwright test --config
playwright-alpha1.config.js
playwright-tests/Logs/{join,logspage,logsquickmode,pagination,unflattened,logshistogram,jobSearch,logsqueries,logsAnalyzeDimensions}.spec.js`
- [ ] Verify global setup logs: `Switching active org to: <ORGNAME>` →
`Org switch complete`
- [ ] Confirm no `console.log` output in `jobSearch.spec.js` test run
(all replaced by `testLogger`)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 16:19:54 +00:00
87da57db50 feat: ux improvement tabs and buttons (#11595)
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/ux-improvement-tabs-buttons/design.md

---------

Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech>
Co-authored-by: ktx-mihir <mihir.patel@kiara.tech>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech>
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2026-05-06 15:00:37 +00:00
Abhay Padamani 511eccf363 fix: correct field access order for CSV download in TableRenderer (#11591)
- #11574
2026-05-04 12:22:01 +00:00
Neha PandClaude 4c6282bb19 test: fix alert-v3 tests (#11570)
- API-first methods in alertTemplatesPage.js (_findTemplateViaApi,
createTemplateViaApi, deleteTemplateViaApi) to bypass fragile UI
pagination
- API-first destination lookup in alertDestinationsPage.js
(findDestinationViaApi) resolves cascade failure
- v3-compatible locators for alert type dropdown, condition operators,
deduplication flow in alertCreationWizard.js
- Self-contained test pattern with per-test random suffixes and no
shared state
- URL-based navigation with menu fallback for templates and destinations
pages
- q-portal cleanup before click interactions to prevent interception
- Conditional enterprise feature guards at runtime

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-04 11:40:58 +00:00
Shrinath RaoandClaude Sonnet 4.6 cb4c799476 ci: make merge-reports-to-TestDino non-blocking for playwright_summary (#11457)
## Summary

- In `playwright_summary`, `merge_and_upload_reports` result of
`failure` is now treated as non-blocking (same as `success`/`skipped`)
- The Playwright summary check will pass even if the TestDino
merge/upload job fails (e.g. network issues, bad token, API outage)
- Actual test results (`build_binary`, `ui_integration_tests`) still
gate the summary as before

## Why

The TestDino upload is observability/reporting infrastructure — it
should never cause a PR's required check to fail when the tests
themselves passed. Previously a transient TestDino failure would block
merges.

## Test plan

- [ ] Verify `playwright_summary` passes when `merge_and_upload_reports`
succeeds (existing behavior)
- [ ] Verify `playwright_summary` passes when `merge_and_upload_reports`
fails (new behavior)
- [ ] Verify `playwright_summary` still fails when
`ui_integration_tests` fails (unchanged)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 12:22:27 +00:00
6f35d34585 test: fix Dex submit button click interception on alpha AKS environment (#11275)
## Summary
- The alpha AKS environment (`alpha.o2aks1.internal.zinclabs.dev`) has a
transparent overlay on the Dex login page that intercepts the submit
button click in `global-setup-alpha1.js`
- This caused all 13 CI shards to fail — global setup timed out on the
30s click wait, preventing any tests from running
- Root cause: `submitButton.click()` found the button visible and stable
but the click was intercepted, so it hung for the full 30000ms timeout
- Fix: add `{ force: true }` to bypass the overlay, with an `Enter` key
fallback if force-click is also blocked
- Verified locally: login completes successfully, 2 cloudLogin tests
pass

## Test plan
- [x] Run `cloudLogin.spec.js` locally against alpha — 2/2 passed
- [ ] Trigger full alpha1 CI run to confirm all 13 shards pass

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Shrinath Rao <undefined@users.noreply.github.com>
2026-04-23 06:13:40 +00:00
Neha P 9cfc813c98 test: Add e2e for anomalies feature (#11358) 2026-04-23 08:29:18 +08:00
4ca1e3005d fix: corelation adaptive sampling (#11346)
Co-authored-by: Neha P <neha@openobserve.ai>
Co-authored-by: Claude <noreply@anthropic.com>
2026-04-21 09:12:29 +00:00
Shrinath RaoandClaude Sonnet 4.6 b308e83568 test: migrate GeneralTests and RegressionSet specs for alpha1 cloud (Set 12) (#11227)
## Summary
- Migrate `landingPage.spec.js` and `languageTranslation.spec.js`
(GeneralTests) for alpha1 cloud compatibility
- Migrate `alerts-regression.spec.js` and `logs-9754.spec.js`
(RegressionSet) for alpha1 cloud compatibility
- Replace all `process.env["ORGNAME"]` / `process.env.ORGNAME` with
`getOrgIdentifier()` from `cloud-auth.js`
- Add `waitForStreamAvailable` to `logs-9754.spec.js` for cloud indexing
delays
- Fix `playwright-alpha1.config.js` to override `INGESTION_URL` when
`.env` sets it to localhost

## Test plan
- [x] All 4 spec files run against alpha1 cloud — 21/22 passed
- [x] 1 flaky failure in alerts-regression (PromQL alert list visibility
timeout — not migration-related)
- [ ] CI run on `playwright_alpha1.yml` workflow with both branches

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 10:34:32 +00:00
4f8d50a474 test: migrate RegressionSet specs for alpha1 cloud (Set 11) (#10924)
## Summary
- Migrate 6 RegressionSet spec files for alpha1 cloud compatibility
- Replace `process.env["ORGNAME"]` with `getOrgIdentifier()` from
`cloud-auth.js` across all files
- Full framework migration of `pipeline-regression.spec.js`: ESM → CJS
imports, `LoginPage` login → `navigateToBase` + `PageManager` pattern
- Add `cloud-auth.js` imports to all 6 files

## Files Changed
- `logs-regression.spec.js` — 3 ORGNAME replacements + import
- `logs-regression-bugs.spec.js` — 6 ORGNAME replacements + import
- `streams-regression.spec.js` — 1 ORGNAME replacement + import
- `ui-regression.spec.js` — 2 ORGNAME replacements + import
- `enrichment-regression.spec.js` — 1 ORGNAME replacement + import
- `pipeline-regression.spec.js` — full rewrite (ESM→CJS,
LoginPage→navigateToBase, ORGNAME→getOrgIdentifier)

## Test plan
- [x] Run RegressionSet against alpha1 cloud locally: 37 passed, 1
skipped, 3 pre-existing failures (not migration-related)
- [ ] CI run on alpha1 cloud workflow

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Shrinath Rao <undefined@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-08 17:21:14 +00:00
b1fe77871a test: add E2E tests for RUM sourcemap feature (#11014)
## Summary
- Add comprehensive E2E test coverage for RUM sourcemap functionality
(26 total tests)
- API tests: 20 pytest tests (upload/list/delete/resolve operations +
RBAC)
- UI tests: 6 Playwright tests for error tracking UI
- Helper scripts for RUM data ingestion

## Implementation Details

### API Tests (pytest)
- **test_sourcemap_api.py**: 15 tests covering:
  - Sourcemap upload (multipart/form-data)
  - List sourcemaps
  - Delete sourcemaps
  - Stacktrace resolution with sourcemaps
- **test_sourcemap_rbac.py**: 5 tests for role-based access control
- **ingest_rum_errors.py**: Helper to inject synthetic RUM error data
for UI tests
- **ingest_rum_performance.py**: Helper to enable RUM feature in UI

### UI Tests (Playwright)
- **sourcemap-ui.spec.js**: 6 tests validating:
  - Error tracking page loads
  - Query execution
  - Error list display
  - Error detail navigation
  - Metadata display
  - Stack trace display
- **rumPage.js**: Updated page object with API response interception
- Workaround for Vue 3 @click handlers not responding to Playwright
clicks
  - Navigate via URL using error IDs extracted from API responses
- Tests run in **parallel mode** with proper assertions (no graceful
skips)

## Test Execution
```bash
# API tests (pytest)
cd tests/api-testing
pytest tests/test_sourcemap_api.py -v        # 15 tests
pytest tests/test_sourcemap_rbac.py -v       # 5 tests

# UI tests (Playwright)
cd tests/ui-testing
npx playwright test playwright-tests/RUM/sourcemap-ui.spec.js --workers=3  # 6 tests
```

## Technical Notes
- Vue 3 production builds don't respond to Playwright's synthetic click
events on @click handlers
- Solution: Intercept API responses to extract error IDs, then navigate
directly via URL
- All tests use hard assertions - tests fail if data doesn't exist (no
graceful skips)

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Shrinath Rao <undefined@users.noreply.github.com>
2026-03-28 20:57:48 +05:30
258eecd447 test: add E2E tests for autocomplete value suggestions feature (#11027)
Add Playwright E2E tests for the new autocomplete value suggestions
feature that persists field values in IndexedDB and shows them when
typing `field =`.

Tests cover:
- IndexedDB capture from field expansion (Values API)
- IndexedDB capture from search results (marked as expected-to-fail due
to bug)
- Autocomplete suggestions for operators: =, !=, <>, >=, <=, IN, NOT IN,
LIKE
- Numeric value quoting (no quotes for numbers)
- TTL expiry filtering
- Stream/org isolation
- Traces page autocomplete

Note: One test marked as expected-to-fail due to BLOCKER BUG where
captureFromSearchHits() doesn't write to IndexedDB (schemaFields
filtering issue)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Neha P <undefined@users.noreply.github.com>
2026-03-27 12:02:07 +05:30
Shrinath RaoandClaude Opus 4.6 39c386de6b test(general): migrate GeneralTests specs for alpha1 cloud (Set9) (#10902)
## Summary
- Migrate 6 GeneralTests spec files (sanity, schema, schemaload,
ingestion-config, enrichment, theme-management) for alpha1 cloud
compatibility
- Fix global-setup-alpha1.js ingestion skip detection — only skip when
cleanup is the sole test file
- Add 60s cloud navigation timeout in enhanced-baseFixtures.js for
parallel worker resilience
- Replace `networkidle` waits with `waitForResponse('/_search')` in
sanityPage.js for reliable cloud search waits
- Add 5-minute timeout for doc links validation test and skip unreliable
`short.openobserve.ai` URLs

## Test plan
- [x] All 6 specs pass individually against alpha1 cloud
- [x] Combined run with cleanup + 5 workers: **33 passed, 0 failed, 4
skipped**
- [ ] CI shard run via playwright_alpha1.yml (ENT PR)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 16:45:52 +05:30
Shrinath RaoandClaude Opus 4.6 a28e996b92 test: Traces + Metrics cloud compatibility for alpha1 E2E (Set5) (#10854)
## Summary
- Add Traces (7 specs, 44 passing, 9 skipped) and Metrics (9 specs, 49
passing, 6 skipped) cloud compatibility for alpha1
- Add `networkidle` wait in `enhanced-baseFixtures.js`
`navigateToBase()` to prevent Dex redirect on sidebar clicks before Vue
app fully hydrates
- Skip 9 tracesAnalyzeDimensions tests — RED metrics dashboard selector
mismatch (`ensureMetricsDashboardVisible()` returns false on alpha1;
needs DevTools investigation)
- Skip 4 metrics-promql-query-persistence tests — multi-tab
`enterQueryViaKeyboard()` doesn't persist on cloud (timing/state issue)
- Skip 2 metrics.spec.js tests — field list collapse/search selectors
not found on alpha1

## Test Results (local against alpha1, 5 workers)
- **93 passed, 15 skipped, 0 failed** (9 min)

### Traces Shard (7 specs)
| Spec File | Passed | Skipped |
|---|---|---|
| tracesSearch.spec.js | 8/8 | 0 |
| traceDetails.spec.js | 3/3 | 0 |
| traceQueryEditor.spec.js | 11/11 | 0 |
| traceErrorFilter.spec.js | 5/5 | 0 |
| traceAdvancedFiltering.spec.js | 8/8 | 0 |
| tracesAnalyzeDimensions.spec.js | 0/9 | 9 |
| service-graph.spec.js | 9/9 | 0 |

### Metrics Shard (9 specs)
| Spec File | Passed | Skipped |
|---|---|---|
| metrics.spec.js | 7/9 | 2 |
| metrics-queries.spec.js | 6/6 | 0 |
| metrics-aggregations.spec.js | 5/5 | 0 |
| metrics-visualizations.spec.js | 5/5 | 0 |
| metrics-config.spec.js | 7/7 | 0 |
| metrics-config-tabs.spec.js | 4/4 | 0 |
| metrics-advanced.spec.js | 7/7 | 0 |
| metrics-promql-query-persistence.spec.js | 4/8 | 4 |
| metrics-table-column-order.spec.js | 4/4 | 0 |

## Test plan
- [ ] Trigger alpha1 CI with Set5 branch (Traces + Metrics shards)
- [ ] Verify 93 pass, 15 skip, 0 fail
- [ ] After merge: uncomment all shards for full regression

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 17:53:28 +05:30
79b86199a4 test: Alerts cloud compatibility for alpha1 E2E (Set2) (#10813)
## Summary
- Make all 8 Alerts spec files cloud-compatible for alpha1 environment
- Replace `process.env.ORGNAME` with `getOrgIdentifier()` from
cloud-auth.js
- Replace `getAuthToken()` (email:password) with `getAuthHeaders()` for
cloud passcode-based auth in 3 files with API calls
(alerts-scheduled-features, alerts-incident-correlation,
alerts-vrl-encoding)

## Test plan
- [ ] All existing self-hosted E2E tests still pass
- [ ] Alpha1 cloud E2E Alerts shard passes

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Shrinath Rao <undefined@users.noreply.github.com>
2026-03-10 18:33:58 +05:30
befa1883a0 test: add alpha1 cloud compatibility for E2E logs tests (#10763)
## Summary
- Add cloud auth infrastructure (`cloud-env.js`, `cloud-auth.js`) for
cloud/self-hosted switching
- Centralize ingestion auth via `getAuthHeaders()` across all ingestion
utilities (data, trace, service-graph, metrics)
- Refactor `commonActions.js` from `exec(curl)` to `page.request.post()`
for cloud cookie compatibility
- Enhance `cloudLoginPage.js` + `page-manager.js` for conditional cloud
page objects
- Update `global-setup-alpha1.js` to fetch org identifier and passcode
from cloud session
- Fix `global-teardown.js` race condition with proper error handling
- Replace `console.log` with `testLogger` in `commonActions.js`,
`ingest-service-graph.spec.js`, `scripts/ingest-service-graph.js`
- Replace raw selectors with POM methods (`applyQueryButton`, VRL
editor, pagination, time range)
- Add missing test tags to `searchpartition`, `unflattened`,
`ingest-service-graph` specs
- Fix `networkidle` → `domcontentloaded` across multiple spec files

## Companion PR
- Enterprise: sets `IS_CLOUD=true` in alpha1 E2E workflow

## Test plan
- [ ] Self-hosted E2E tests pass (no behavioral changes — only routing
through POM + testLogger)
- [ ] Alpha1 cloud E2E tests pass with cloud auth enabled
- [ ] Verify no credential leaks in logs (passcode/password values never
logged)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Shrinath Rao <undefined@users.noreply.github.com>
2026-03-07 07:00:07 +05:30
ktx-akshay 016a1b150b test: stabilize dashboard variable flaky test case (#10717) 2026-03-03 14:56:55 +05:30
5b9ffc112c test: add alpha1 cloud login E2E tests and Dex auth setup (#10675)
## Summary
POC for running Playwright E2E tests against the alpha1 cloud
environment.

- Add Playwright config (`playwright-alpha1.config.js`) for alpha1 cloud
environment
- Add Dex "Continue with Email" global setup (`global-setup-alpha1.js`)
for automated login
- Add `CloudLoginPage` page object for POM compliance
- Add `cloudLogin.spec.js` with 2 login + sanity tests (all passing)

## Test plan
- [x] All 2 tests pass locally against alpha1
- [x] Verify tests pass in CI when triggered from enterprise workflow
- [ ] Add `ALPHA1_USER_EMAIL` and `ALPHA1_USER_PASSWORD` GitHub secrets

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Shrinath Rao <undefined@users.noreply.github.com>
2026-03-02 22:05:35 +08:00
Shrinath Rao 06f095a628 test: add E2E Playwright tests for Service Graph feature (#10653) 2026-02-26 22:36:21 +08:00
0ee7535da7 feat: dashboard time range available at panel level (#10288)
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/panel-level-time-range/design.md

### **PR Type**
Enhancement, Documentation


___

### **Description**
- Add defaults for panel-level time settings in front-end

- Extend backend PanelConfig with time range fields

- Provide a comprehensive implementation guide document


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>useDashboardPanel.ts</strong><dd><code>Add default
panel time settings fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/composables/useDashboardPanel.ts

<ul><li>Added <code>allow_panel_time</code> default (false)<br> <li>
Introduced <code>panel_time_mode</code> default ("individual")<br> <li>
Initialized <code>panel_time_range</code> to null</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10288/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Extend PanelConfig with time
fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/meta/dashboards/v8/mod.rs

<ul><li>Added <code>allow_panel_time: Option<bool></code> to
PanelConfig<br> <li> Added <code>panel_time_mode: Option<String></code>
field<br> <li> Added <code>panel_time_range:
Option<DateTimeOptions></code> field</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10288/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>

<summary><strong>PANEL_TIME_RANGE_IMPLEMENTATION.md</strong><dd><code>Add
panel time range implementation guide</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/PANEL_TIME_RANGE_IMPLEMENTATION.md

<ul><li>Added detailed implementation guide (v3.0)<br> <li> Outlined
requirements, UI, URL sync, testing<br> <li> Documented data flow, edge
cases, and timeline</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10288/files#diff-39b68cc51ce3089b41061b75e18c45448659cab57702dd39b01a9aad63598345">+2718/-0</a></td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2026-02-26 00:58:02 +05:30
ktx-vaidehiandYashodhan Joshi ae6d73e815 feat: dashboard stream and field support from variables (#10454)
Design at:
https://github.com/openobserve/designs/blob/main/dashboards/variables-stream-field-support/design.md
### **PR Type**
Enhancement, Tests


___

### **Description**
- Add stream/field variable dependency parsing

- Deduplicate and validate dependency graph edges

- Resolve stream/field variables at runtime

- Update variable UI with autocomplete


___

### Diagram Walkthrough


```mermaid
flowchart LR
  ui["AddSettingVariable.vue (configure stream/field)"]
  runtime["VariablesValueSelector.vue (resolve & query)"]
  deps["variablesDependencyUtils.ts (dependency graphs)"]
  tests["variablesDependencyUtils.spec.ts (new coverage)"]

  ui -- "allows $var in stream/field" --> runtime
  ui -- "cycle detection messaging" --> deps
  runtime -- "uses resolved stream/field" --> deps
  tests -- "asserts stream/field deps & cycles" --> deps
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>variablesDependencyUtils.spec.ts</strong><dd><code>Add
tests for stream/field dependencies</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/utils/dashboard/variables/variablesDependencyUtils.spec.ts

<ul><li>Add cases for <code>query_data.stream</code> dependencies<br>
<li> Add cases for <code>query_data.field</code> dependencies<br> <li>
Validate deduping and embedded variables<br> <li> Add cycle detection
scenarios via stream/field</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-1a8fd83eb7a8b0c906e668e7e4120a40f7b9853d5bfb485a7c569ff980e4a780">+313/-0</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>variablesDependencyUtils.ts</strong><dd><code>Expand
dependency detection to stream/field</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/src/utils/dashboard/variables/variablesDependencyUtils.ts

<ul><li>Collect deps from stream, field, filters<br> <li> Use
<code>Set</code> to prevent duplicate parents<br> <li> Extend
<code>query_data</code> typing with
<code>stream</code>/<code>field</code><br> <li> Update scoped graph with
deduped edges</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-58a77094b6971705fb63bde853a79e17b4e2e85240694c4017aada1d01cf1fb4">+78/-31</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>VariablesValueSelector.vue</strong><dd><code>Resolve
stream/field variables before querying</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/VariablesValueSelector.vue

<ul><li>Add <code>resolveVariableValue()</code> for <code>$var</code>
substitution<br> <li> Resolve
<code>stream_name</code>/<code>fields</code> in request payload<br> <li>
Match response hits using resolved field name<br> <li> Add debug/error
console logging for resolution</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-5c6e3bcb87cb64f25bf8157a541604b7a4904c1282acf662cab5d76a5be6bd56">+55/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>AddSettingVariable.vue</strong><dd><code>Allow
variable-based stream and field selection</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/src/components/dashboards/settings/AddSettingVariable.vue

<ul><li>Replace stream/field <code>q-select</code> with
<code>CommonAutoComplete</code><br> <li> Merge variable options into
stream/field option lists<br> <li> Skip schema fetch when stream
contains <code>$</code><br> <li> Improve cycle error message and
styling</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10454/files#diff-e622f54c1f7629ee67d29ed2fc87008d07eb9246767a05435cc42c3c17ce459a">+208/-52</a></td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2026-02-25 23:49:40 +05:30
Neha PandClaude 5ee7aff96d test: add search patterns E2E tests and pipeline cron display assertion (#10544)
## Summary
- Add E2E tests for the Search Patterns feature (Enterprise feature)
- Add assertion to verify pipeline cron expression displays correctly in
the pipeline list after import
- Add page object methods for Search Patterns feature to logsPage.js

## Test Details

### Search Patterns Tests (`@enterprise` tag)
10 new tests covering:
- **P0 Smoke Tests**: Toggle visibility, switching to patterns view,
patterns loading, statistics display
- **P1 Functional Tests**: Pattern card display, include/exclude
buttons, details dialog, navigation
- **P2 Edge Cases**: Anomaly badge display, navigation button states

### Pipeline Cron Display
- Adds `expectScheduledPipelineCronDisplayed()` method to verify cron
expression is visible in the Frequency column
- Applied to both scheduled pipeline import tests

## Files Changed
- `tests/ui-testing/pages/logsPages/logsPage.js` - Added 20+ Search
Patterns selectors and methods
- `tests/ui-testing/pages/pipelinesPages/pipelinesEP.js` - Added cron
display verification method
- `tests/ui-testing/playwright-tests/Logs/searchPatterns.spec.js` - New
spec file with 10 tests
- `tests/ui-testing/playwright-tests/Pipelines/pipelineImport.spec.js` -
Added cron assertion

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 14:54:31 +05:30
Shrinath RaoandClaude Opus 4.6 d573d01a62 fix(test): eliminate bare networkidle timeouts across entire test suite (#10494)
## Summary

- Replaced every bare `waitForLoadState('networkidle')` with `{ timeout:
10000 }.catch(() => {})` across **56 files** (35 spec files, 21 page
objects)
- OpenObserve pages maintain persistent RUM/replay/WebSocket connections
that prevent `networkidle` from ever resolving, causing 90s timeout
crashes
- Added `fetchWithRetry` helper for transient 502/proxy errors in SDR
multi-pattern `beforeAll`
- Bumped SDR multi-pattern test timeout from 300s to 420s for CI

## Files changed

**Page objects (21 files):** alertsPage, alertManagement,
alertCreationWizard, alertTemplatesPage, alertBulkOperations, logsPage,
streamsPage, streamAssociationPage, sdrPatternsPage,
sdrVerificationPage, dashboardPage, functionsPage, pipelinesPage,
enrichmentPage, sanityPage, schemaPage, loginPage, commonActions, and
more

**Spec files (35 files):** All SDR specs, all Traces specs, all Logs
specs, all RegressionSet specs, Alerts specs, Pipelines specs,
Dashboards specs, Functions specs, GeneralTests specs, wait-helpers
utility

## Test plan

- [x] Verify zero bare `networkidle` calls remain in `tests/ui-testing/`
- [ ] CI passes for SDR, Streams, Logs Regression, and other test suites

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 14:42:32 +05:30
Shrinath Rao e066619e09 test: overhaul dashboard variables E2E tests with Page Object Model and parallel execution stability (#10393)
### **User description**
## Summary

Comprehensive rework of Dashboard Variables E2E test suite to improve
stability for parallel execution and consolidate redundant tests.

### Test Stability Improvements
- Add centralized selectors in `dashboard-selectors.js` for consistent
element targeting
- Implement enhanced retry mechanisms with exponential backoff in
`wait-helpers.js`
- Add proper `waitForDashboardUIStable()` and `waitForDataLoad()`
patterns across page objects
- Fix race conditions in parallel test execution with network idle waits

### Test Consolidation
- Merge `dashboard-variables-null-handling.spec.js` into
`dashboard-variables-dependency.spec.js` (single test moved)
- Remove 2 redundant tests from `dashboard-variables-global.spec.js`
(duplicate coverage with setting.spec.js)
- **Result: 71 → 69 tests** while maintaining full coverage

### CI/CD Improvements  
- Consolidate **5 dashboard variables shards into 1**
"Dashboards-Variables" shard in `playwright.yml`
- Group all dashboard variable specs in single workflow job for
efficiency

### Files Modified
| Change | File |
|--------|------|
| ✅ Add | `dashboard-selectors.js` (centralized selectors) |
| ❌ Delete | `dashboard-variables-null-handling.spec.js` (merged) |
| ✏️ Modify | All dashboard variable spec files for stability |
| ✏️ Modify | `playwright.yml` workflow for shard consolidation |
| ✏️ Modify | `dashboard-create.js`, `dashCreation.js` (retry patterns)
|
| ✏️ Modify | `wait-helpers.js` (enhanced wait utilities) |

## Test plan
- [ ] Run Dashboard Variables tests locally with `npx playwright test
--grep "Dashboard Variables"`
- [ ] Verify all 69 tests pass in parallel execution mode
- [ ] Verify CI workflow runs correctly with consolidated shard


___

### **PR Type**
Tests, Enhancement


___

### **Description**
- Centralize dashboard selectors for E2E.

- Add safe wait helpers everywhere.

- Add dependency null-handling regression test.

- Improve page-object retries for stability.


___

### Diagram Walkthrough


```mermaid
flowchart LR
  specs["Dashboard variables specs"] 
  selectors["`dashboard-selectors.js` selector registry"]
  waits["Safe wait helpers"]
  pageobjs["Page objects retries"]
  ci["Playwright CI shard/workflow"]
  specs -- "replace raw selectors" --> selectors
  specs -- "replace waitForLoadState" --> waits
  waits -- "reduce flake in parallel" --> specs
  pageobjs -- "retry editor/inspector opens" --> specs
  specs -- "run reliably in CI" --> ci
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>8
files</summary><table>
<tr>

<td><strong>dashboard-variables-creation-scopes.spec.js</strong><dd><code>Adopt
centralized selectors and safe waits</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-878775b83972fb1f04f1d4df7bc0bbec364fbcbacda6fbd081423673e4ea4b05">+207/-201</a></td>

</tr>

<tr>

<td><strong>dashboard-variables-dependency.spec.js</strong><dd><code>Stabilize
dependency tests and add null-case</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-ad5a7685fbf4477a81657949b7dd4aa4ada6e66a4576d0c61bacb388095d0b52">+247/-123</a></td>

</tr>

<tr>

<td><strong>dashboard-variables-tab-level.spec.js</strong><dd><code>Refactor
spec to shared selectors/waits</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-b1f20469fa2e12dc68ede8ae381f60e2717489947ca693dd8a519fc03f195d48">+150/-148</a></td>

</tr>

<tr>

<td><strong>dashboard-variables-panel-level.spec.js</strong><dd><code>Refactor
spec to shared selectors/waits</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-a4f3068a8d69478dafa0bc1bfb7f51cf98a6980ecc62ae78ba46a617f8e227fd">+129/-120</a></td>

</tr>

<tr>

<td><strong>dashboard-variables-url-sync.spec.js</strong><dd><code>Refactor
spec to shared selectors/waits</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-709abba02dfd42b1be6d3838b162b544a2b97ba204dd179c37d462f0921ff14b">+126/-182</a></td>

</tr>

<tr>

<td><strong>dashboard-variables-refresh.spec.js</strong><dd><code>Refactor
spec to shared selectors/waits</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-8e82d40d2eda995a2915569d16456a9fd7d605017ed5868a28ee409e53646027">+130/-141</a></td>

</tr>

<tr>
<td><strong>dashboard-variables-global.spec.js</strong><dd><code>Remove
redundancy and stabilize global flows</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-f3750bde6fb0d471ec65d81b9d5a5a5b15d79ca900782959a0ff856a5156f5be">+106/-219</a></td>

</tr>

<tr>
<td><strong>dashboard-variables-setting.spec.js</strong><dd><code>Align
settings tests with new POM</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-1c6dd312b59d03b6cef1e15784451e5a5ffb3ed4682dec017e9834de8094fbdd">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>8
files</summary><table>
<tr>
<td><strong>dashboard-selectors.js</strong><dd><code>Add shared
dashboard selector registry</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-b7a318c5d62df2558c0afaa7b21dbaae415d2f43506209da80544992a0f0d19d">+283/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>dashboard-chart.js</strong><dd><code>Add panel editor
readiness waits</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-573a312576fce62d8e14f2bbb5f9b7d9a552d746304dce3d79862edddd24de76">+17/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboard-panel-edit.js</strong><dd><code>Retry query
inspector open for flake</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-ea18ab21ebeaac575078abcbc4f986502578ec39e2c9cb86437c821d0dabc9b5">+16/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboard-variables-scoped.js</strong><dd><code>Add helper
waits and selector utilities</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-86abb9f90fabd982dedfdd9a21a052a47b6984edc7bd29a51ee104c8c473aec4">+366/-13</a></td>

</tr>

<tr>
<td><strong>dashboard-settings.js</strong><dd><code>Harden settings
open/close and variable tab</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-1a07f3f14dacb06180bc02437804d175886aeacda98f5b0ef507a274e5ddd485">+132/-32</a></td>

</tr>

<tr>
<td><strong>dashboard-create.js</strong><dd><code>Improve dashboard
creation waits for parallel</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-c3c5add2b934580a91a79bb580634b70e2376b0452113008a0911102db3863e2">+83/-11</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>wait-helpers.js</strong><dd><code>Add safe wait wrappers and
retries</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-fdf1e3fd5f38875694acd5e3f0a140ed89326ce8a2910f07b18d1004fd5d2165">+101/-4</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>dashCreation.js</strong><dd><code>Add setup/cleanup helpers
for dashboards</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-0f865c438e06691b660a9d4a2448c7c94e6f5172c6a0615eb2a905fa276db575">+91/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>playwright.yml</strong><dd><code>Consolidate dashboard
variable shards in CI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+3/-24</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>package.json</strong><dd><code>Update UI-testing
scripts/dependencies for E2E</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-a41ba7975823b7b2dc071285391f835fbefd33bfffeb5aa2fba3ae15425cc64f">+7/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>1 files</summary><table>
<tr>
  <td><strong>dashboard-variables-null-handling.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10393/files#diff-e42ab503059a687ceb4fa2edeed0888a47591e0a61680c10448eaf68b4e6bbd8">+0/-152</a>&nbsp;
</td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2026-02-09 10:48:24 +05:30
Shrinath Rao d1d643814e test: enhance cleanup patterns for orphaned test data (#10232)
### **User description**
## Summary

- Add URL enrichment tables cleanup support via new
`/api/{org}/enrichment_tables/status` endpoint
- Add cleanup patterns for orphaned streams, functions, pipelines, and
enrichment tables
- Skip data ingestion when running cleanup.spec.js alone (optimization
for cleanup-only runs)

## Changes

### URL Enrichment Tables (apiCleanup.js)
- `fetchUrlEnrichmentTables()` - Fetches URL-based tables from status
API
- `cleanupUrlEnrichmentTables(patterns)` - Cleans up tables showing "NaN
MB" in UI

### New Cleanup Patterns (cleanup.spec.js)

**Streams:**
- `e2e_apostrophe_*` - Bug #9475 apostrophe test streams
- `e2e_traces_pipeline_test`
- `e2e_traces_<timestamp>_<suffix>`

**Functions:**
- `vrl_func_*` - Pipeline VRL function tests
- `vrl_traces_func_*` - Traces VRL function tests
- `vrl_metrics_func_*` - Metrics VRL function tests

**Pipelines:**
- `metrics-pipeline-*`
- `traces-pipeline-*`
- `condition-pipeline-*`
- `metrics-condition-pipeline-*`

**URL Enrichment Tables:**
- `schema_mismatch_*`, `schema_view_*`, `url_404_*`, `url_lifecycle_*`
- `invalid_url_*`, `cancel_test_*`, `toggle_test_*`, `edit_form_*`

### Global Setup Optimization (global-setup.js)
- Auto-detect cleanup-only runs via `process.argv`
- Skip logs, metrics, and traces ingestion for cleanup runs

## Test plan
- [ ] Run cleanup.spec.js standalone and verify no data ingestion occurs
- [ ] Verify orphaned test data is cleaned up correctly


___

### **PR Type**
Enhancement, Tests


___

### **Description**
- Add URL enrichment tables cleanup methods

- Extend cleanup.spec.js with new regex patterns

- Invoke cleanupUrlEnrichmentTables in tests

- Skip data ingestion on cleanup-only runs


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>apiCleanup.js</strong><dd><code>Add URL enrichment
tables cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/apiCleanup.js

<ul><li>Added fetchUrlEnrichmentTables method<br> <li> Added
cleanupUrlEnrichmentTables method<br> <li> Handled fetch and delete
errors</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10232/files#diff-537fe76c0d8e26e81c5f77c83bd0ee35daaa973822105c809bf83171a26b33c5">+79/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>global-setup.js</strong><dd><code>Skip ingestion in
cleanup-only runs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/utils/global-setup.js

<ul><li>Introduced isCleanupOnly flag<br> <li> Skipped data ingestion
for cleanup-only runs<br> <li> Retained conditional ingestion logic</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10232/files#diff-06323dad7214f86b41b62e121e716eeea0054bc4d950c6bcf4a0efe53894acc8">+20/-14</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>cleanup.spec.js</strong><dd><code>Extend cleanup test
patterns and URL tables</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/cleanup.spec.js

<ul><li>Updated pipeline cleanup regex patterns<br> <li> Extended
function cleanup patterns<br> <li> Modified enrichment tables
patterns<br> <li> Added cleanupUrlEnrichmentTables invocation</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10232/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+27/-4</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2026-01-29 12:21:35 +05:30
ktx-akshay e145c355b9 test: add variable dependency test cases (#10200)
### **PR Type**
Enhancement, Tests


___

### **Description**
- Add helper to change variable and monitor dependencies

- Refactor dependency tests to use helper function

- Migrate variable-helpers.js to ES module exports

- Enable dependency tests in CI workflow


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>dashboard-variables-scoped.js</strong><dd><code>Add
changeVariableValueAndMonitorDependencies helper</code>&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/dashboardPages/dashboard-variables-scoped.js

<ul><li>Added <code>changeVariableValueAndMonitorDependencies</code>
method<br> <li> Dynamically import and use
<code>monitorVariableAPICalls</code><br> <li> Sequence dropdown
interaction and API monitoring<br> <li> Error handling for missing
options and load failures</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10200/files#diff-86abb9f90fabd982dedfdd9a21a052a47b6984edc7bd29a51ee104c8c473aec4">+101/-0</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>

<summary><strong>dashboard-variables-dependency.spec.js</strong><dd><code>Refactor
tests to use new dependency helper</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>


tests/ui-testing/playwright-tests/Dashboards/dashboard-variables-dependency.spec.js

<ul><li>Replaced manual API monitor and dropdown logic with helper<br>
<li> Updated <code>expectedAPICalls</code> and assertion on
<code>result.success</code><br> <li> Skipped unstable error state test
(<code>test.skip</code>)<br> <li> Extended timeouts and stabilized
selectors</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10200/files#diff-ad5a7685fbf4477a81657949b7dd4aa4ada6e66a4576d0c61bacb388095d0b52">+53/-157</a></td>

</tr>
</table></td></tr><tr><td><strong>Refactoring</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>variable-helpers.js</strong><dd><code>Migrate
variable-helpers to ES module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/utils/variable-helpers.js

<ul><li>Converted CommonJS require to ES <code>import</code><br> <li>
Removed <code>module.exports</code> in favor of named exports</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10200/files#diff-2e2771d2582ab60dfcbaeef480226887677e58b881edbb244e0ffa4396ffbb5c">+1/-15</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>playwright.yml</strong><dd><code>Enable dependency
tests in CI workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/playwright.yml

<ul><li>Uncommented <code>Dashboards-Variables-Dependency</code>
testfolder<br> <li> Enabled dependency spec in CI Chrome job</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/10200/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+6/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2026-01-28 18:53:38 +05:30
ktx-vaidehiandktx-akshay 1390c6ace4 test: dashboard variables test case (#9973)
### **PR Type**
Tests, Enhancement


___

### **Description**
- Simplify `handleSaveVariable` in VariableSettings.vue

- Extend scoped variable API with `dependsOnField`

- Enhance dependency loading tests with explicit waits

- Refactor refresh, URL-sync and null-handling tests


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>VariableSettings.vue</strong><dd><code>Simplify and document
variable save flow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-3d55b5c7a758c836df096cb320a0ac3ba4586bc025d9e69c180e6a0b668ed940">+11/-11</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>dashboard-variables-scoped.js</strong><dd><code>Add
`dependsOnField` and multi-dependency field map support</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-86abb9f90fabd982dedfdd9a21a052a47b6984edc7bd29a51ee104c8c473aec4">+20/-5</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>5
files</summary><table>
<tr>

<td><strong>dashboard-variables-dependency.spec.js</strong><dd><code>Add
waits and `dependsOnField` to dependency tests</code>&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-ad5a7685fbf4477a81657949b7dd4aa4ada6e66a4576d0c61bacb388095d0b52">+492/-59</a></td>

</tr>

<tr>

<td><strong>dashboard-variables-refresh.spec.js</strong><dd><code>Introduce
`changeVariableValue` helper and refactor refresh tests</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-8e82d40d2eda995a2915569d16456a9fd7d605017ed5868a28ee409e53646027">+283/-127</a></td>

</tr>

<tr>

<td><strong>dashboard-variables-url-sync.spec.js</strong><dd><code>Rename
tests to `var-` prefix and add stability waits</code>&nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-709abba02dfd42b1be6d3838b162b544a2b97ba204dd179c37d462f0921ff14b">+178/-72</a></td>

</tr>

<tr>

<td><strong>dashboard-variables-null-handling.spec.js</strong><dd><code>Rewrite
null-handling test with simplified dependency logic</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-e42ab503059a687ceb4fa2edeed0888a47591e0a61680c10448eaf68b4e6bbd8">+143/-124</a></td>

</tr>

<tr>
<td><strong>variable-helpers.js</strong><dd><code>Import and use
`monitorVariableAPICalls` in refresh tests</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-2e2771d2582ab60dfcbaeef480226887677e58b881edbb244e0ffa4396ffbb5c">+25/-7</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>11 files</summary><table>
<tr>
  <td><strong>playwright.yml</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+185/-165</a></td>

</tr>

<tr>
  <td><strong>dashboard-list.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-59cd31661ce4f41cef3fe0c42068784ea636a62817982cb3c5e1aed16880c980">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-settings.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-1a07f3f14dacb06180bc02437804d175886aeacda98f5b0ef507a274e5ddd485">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>DATA-TEST-IMPLEMENTATION-STATUS.md</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-6d3e802eb6998d51e3c2b06fd4812937f6c0a8b00ba0b751c34256be97af4179">+225/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>REQUIRED-DATA-TEST-ATTRIBUTES.md</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-0be35bf150e6b5a82dd319ced586af5655ab9e11d14e8232aadd9d81618b1e80">+607/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>TEST-EXECUTION-REPORT.md</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-7dccae95f65fa4b86695c0d4b916def1fefe05a771064ada2b68df85781baae5">+373/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>TEST-EXECUTION-SUMMARY.md</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-10955400873e51c4ffa1f95dcaf45775b503c67dd4accfca4ab309946687eb1f">+321/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>VARIABLES-TEST-GUIDE.md</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-80d83f3dca90fda9b2c1015c538b97642bfaf1f966fb58bd633d7d8d51ea3307">+545/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>VARIABLES-VALIDATION-CHECKLIST.md</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-c91da9d64610d003b0b6ff76cff5b8bb808d53af4c2f769956eace235ec11387">+416/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-creation-scopes.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-878775b83972fb1f04f1d4df7bc0bbec364fbcbacda6fbd081423673e4ea4b05">+19/-49</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-panel-level.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9973/files#diff-a4f3068a8d69478dafa0bc1bfb7f51cf98a6980ecc62ae78ba46a617f8e227fd">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2026-01-26 13:35:38 +05:30
priyabrata-stackandgithub-actions[bot] 195fb4e419 test: traces tests (#9650)
### **User description**
Trace data ingestion utility (trace-ingestion.js) that generates
OTLP-compliant distributed traces with various scenarios (success,
database errors, auth errors, 404s)
Reusable test helper utilities following DRY principles from logs tests
6 test spec files with P0/P1/P2 prioritization covering critical paths,
core functionality, and edge cases
Enhanced page object with 50+ new selectors and methods for trace
interactions
Global setup integration to ingest 20 test traces before test execution


___

### **PR Type**
Tests


___

### **Description**
- Extend `TracesPage` with selectors and helper methods  

- Add global setup trace ingestion utility  

- Introduce Playwright test suites for Traces:  
  - Service Maps, Advanced Filtering, Trace Details  
  - Error Filtering, Query Editor, Search


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>tracesPage.js</strong><dd><code>Extend TracesPage with
selectors and helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-b21e724124188921fea3b88d62aef68acd31e385e1b04d3f23565f3f9e059bb3">+253/-6</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>trace-ingestion.js</strong><dd><code>Implement trace
ingestion utility</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-83e4c6bffd71f42bc78f33487b04cd1613e94c6375b706274e6841efffd8dd52">+331/-0</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>7
files</summary><table>
<tr>
<td><strong>serviceMaps.spec.js</strong><dd><code>Add service maps view
tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-b16eddc62227ec356faceb5c640413311d5b569747084b138bacf08427d022ca">+182/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>traceAdvancedFiltering.spec.js</strong><dd><code>Add
advanced filtering test scenarios</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-3bbb700e0ea018647160af79231dc606f176fcb7e0be1164b69aeed91fc9026a">+360/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>traceDetails.spec.js</strong><dd><code>Add trace details
functionality tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-b01297d7b1f713590213d42937b05c25621d12d30dd0e4144fb861db15b15810">+198/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>traceErrorFilter.spec.js</strong><dd><code>Add error
filtering test suite</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-7ed3a7e2fbc68ea2786a3fee2f83d3ee33ce2ac45830e9253aeebd94d63441c2">+284/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>traceQueryEditor.spec.js</strong><dd><code>Add query editor
interaction tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-0f3a8bffbd91aabd267920147a03425566a8a7c2dd74795ff15aed23a87dcead">+263/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>tracesSearch.spec.js</strong><dd><code>Add basic traces
search and navigation tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-75c29494bb340e63aa8cf76bdcff572d9e860c9b4a7fa8ba3510ebc86ccdda60">+298/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>trace-test-helpers.js</strong><dd><code>Add trace test
helper utilities</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-12fffc3c28d1b21cd02f87065767fcb9655ef22e2210093daaf6a67ad01f406f">+328/-0</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>global-setup.js</strong><dd><code>Integrate trace ingestion
in global setup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9650/files#diff-06323dad7214f86b41b62e121e716eeea0054bc4d950c6bcf4a0efe53894acc8">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-16 20:18:52 +05:30
priyabrata-stack 9dbbe99417 metrics test 2026-01-16 18:48:25 +05:30
priyabrata-stack 694da3fd38 metrics tests 2026-01-16 18:48:25 +05:30
priyabrata-stackandClaude Sonnet 4.5 b1718061cf fix(security): address code review security issues in metrics-ingestion.js
Fixed 3 security/quality issues identified in code review:

1. **High Priority - Hardcoded Credentials Removed:**
   - Removed hardcoded password fallback 'Complexpass#123'
   - Now requires ZO_ROOT_USER_EMAIL and ZO_ROOT_USER_PASSWORD env vars
   - Throws explicit error if credentials not provided
   - Prevents accidental credential exposure

2. **High Priority - External Endpoint Exposure Fixed:**
   - Removed hardcoded external API endpoint
   - Removed hardcoded email address
   - All external config now requires environment variables:
     - METRICS_EXTERNAL_ENDPOINT
     - METRICS_EXTERNAL_USERNAME
     - METRICS_EXTERNAL_PASSWORD
     - METRICS_EXTERNAL_ORG_ID
     - METRICS_EXTERNAL_STREAM

3. **Medium Priority - Async setInterval Fixed:**
   - Replaced setInterval with async callback with while loop
   - Prevents overlapping executions in ingestContinuously()
   - Uses explicit await between iterations
   - Cleaner control flow and error handling

All changes maintain backward compatibility for tests that properly
use environment variables.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-16 18:48:25 +05:30
priyabrata-stack 0ef423c4e2 test metrics 2026-01-16 18:48:25 +05:30
priyabrata-stack 703af6eb0e metrics test 2026-01-16 18:48:25 +05:30
Hengfei Yang 3589c78667 fix: migration cors issue (#10048) 2026-01-15 20:52:19 +08:00
b3f79b6727 test: add bug regression tests to RegressionSet suite (#9899)
### **User description**
Added automated tests for 4 verified bug fixes to the regression test
suite:

Bug Tests Added:
- Bug #8349 (P1): SQL _timestamp alias rejection validation
- Bug #7468 (P1): Multi-stream ellipsis with tooltip display
- Bug #9475 (P1): Apostrophes/special characters without truncation
- Bug #9877 (P0): Auto refresh time range updates

Changes:
- Added 3 bug tests to logs-regression.spec.js (#8349, #9475, #9877)
- Added 1 bug test to streams-regression.spec.js (#7468)
- Added 7 new POM methods to logsPage.js for stream display and tooltip
handling
- Removed duplicate tests from original locations (logspage.spec.js,
logsqueries.spec.js)

Test Results:
- All 4 tests passing in sequential execution (3.4m total)
- Bug #8349: 26s | Bug #7468: 56s | Bug #9475: 53s | Bug #9877: 40s

POM Improvements:
- getStreamDisplayElement(), expectStreamDisplayVisible()
- getStreamDisplayText(), getStreamDisplayStyles()
- hoverStreamDisplay(), isTooltipVisible(), getTooltipText()
- Increased getLogsTableContent() timeout to 30s

GitHub Issues:
- https://github.com/openobserve/openobserve/issues/8349
- https://github.com/openobserve/openobserve/issues/7468
- https://github.com/openobserve/openobserve/issues/9475
- https://github.com/openobserve/openobserve/issues/9877

🤖 Generated with Claude Code


___

### **PR Type**
Tests


___

### **Description**
- Added regression tests for four bug fixes

- Enhanced logsPage.js with stream POM methods

- Cleaned up whitespace in log spec files

- Increased table locator timeout in logsPage.js


___

### Diagram Walkthrough


```mermaid
flowchart LR
  POM["logsPage.js POM enhancements"]
  LogsReg["logs-regression.spec.js tests"]
  StreamsReg["streams-regression.spec.js tests"]
  POM -- "used in tests" --> LogsReg
  POM -- "used in tests" --> StreamsReg
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>logsPage.js</strong><dd><code>Add multi-stream POM and
tooltip methods</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

tests/ui-testing/pages/logsPages/logsPage.js

<ul><li>Increased <code>getLogsTableContent</code> timeout to 30s<br>
<li> Added stream display methods for multi-stream tests<br> <li>
Implemented tooltip helper methods</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9899/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+46/-1</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Formatting</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>logspage.spec.js</strong><dd><code>Whitespace cleanup
in logspage spec</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/Logs/logspage.spec.js

- Removed extraneous whitespace


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9899/files#diff-b1a64252adae01c5e8f7e758e3c820f5476260f60c44a4a57b4f15a05a59a85a">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>logsqueries.spec.js</strong><dd><code>Whitespace
cleanup in logsqueries spec</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/Logs/logsqueries.spec.js

- Removed extraneous whitespace


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9899/files#diff-c2055f6cef1580b15c5f94f5c8c2e496a6e921332b48bad943bb7c0630846a65">+16/-16</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>logs-regression.spec.js</strong><dd><code>Add logs
regression tests for bugs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/RegressionSet/logs-regression.spec.js

<ul><li>Added test for SQL <code>_timestamp</code> alias rejection<br>
<li> Added apostrophes display regression tests<br> <li> Added
auto-refresh time range regression test</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9899/files#diff-99da86ede55fa5f2e3d3fbef897ba7aaa5a7db702a0135f66ac4c888fc7311b6">+355/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>streams-regression.spec.js</strong><dd><code>Add
multi-stream ellipsis tooltip tests</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


tests/ui-testing/playwright-tests/RegressionSet/streams-regression.spec.js

<ul><li>Added regression test for multi-stream ellipsis tooltip (Bug
#7468)<br> <li> Implemented helper functions for stream ingestion</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9899/files#diff-1c2aad49737186272645ea4cf0f7e3080e28d0c4d8585b3d07edc1889368591d">+166/-0</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-09 12:09:54 +05:30
296a2bc992 feat: dashboard variable handling for tabs and panels (#9693)
### **User description**
- https://github.com/openobserve/openobserve/issues/6505
- https://github.com/openobserve/openobserve/issues/9196

Design at:
https://github.com/openobserve/designs/blob/main/dashboards/variable-scoping/variable-scoping-design.md

___

### **PR Type**
Enhancement, Tests


___

### **Description**
- Introduce `useVariablesManager` for scoped variables
  - Manages global, tab, panel scopes with lazy loading
  - Builds and validates dependency graph, detects cycles
  - Commits live changes on refresh, syncs with URL

- Extend `variablesDependencyUtils.ts` with scoped graph
  - Export `buildScopedDependencyGraph`, `detectCyclesInScopedGraph`
  - Make `extractVariableNames` optional filter

- Update PanelContainer tests
  - Mock services, test refresh/delete/move/duplicate logic
  - Cover view-only, theme, error, emission scenarios

- Enhance VariablesValueSelector tests
  - Wait for async init, test multi-select, search, streaming handlers
  - Add manager mode, add-button, edge-case scenarios


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Variable Config"] --> B["expandVariablesForScopes"]
  B --> C["buildScopedDependencyGraph"]
  C --> D["initialize state (global/tabs/panels)"]
  D --> E["lazy load on visibility & dependency"]
  E --> F["commitAll on Refresh"]
  F --> G["Panels consume committed state"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>useVariablesManager.ts</strong><dd><code>Add variables
manager composable for scoped loading</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-95f6bdeb96f8454bdff53bb60cafe6851b0cda450591813dd4dfb2038c4f3d50">+1124/-0</a></td>

</tr>

<tr>
<td><strong>variablesDependencyUtils.ts</strong><dd><code>Implement
scoped dependency graph & cycle detection</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-58a77094b6971705fb63bde853a79e17b4e2e85240694c4017aada1d01cf1fb4">+280/-4</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>3
files</summary><table>
<tr>
<td><strong>PanelContainer.spec.ts</strong><dd><code>Extend
PanelContainer tests for panel actions</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-d74ba5293a041ca029d5e9b8fec08d187e51a099451ab0372747d3ec175559a9">+925/-10</a></td>

</tr>

<tr>
<td><strong>VariablesValueSelector.spec.ts</strong><dd><code>Enhance
VariablesValueSelector async & streaming tests</code>&nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-9f234d5a15777d62cf8cd6cc9f0d68fbc0419a87ef58fbdb11de8c46ed6d17cb">+716/-26</a></td>

</tr>

<tr>
<td><strong>usePanelDataLoader.spec.ts</strong><dd><code>Ensure variable
readiness in panel data loader tests</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-f8306bde2ca2b3902674ef12091f2867c7e8b13d4d59d39d4d4152704326c09a">+53/-3</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>68 files</summary><table>
<tr>
  <td><strong>playwright.yml</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+15/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>mod.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-cbf3fe971525ba58892400391dfd7dac7e43d6049d6b4f5a9840ad104ebc5e08">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-panel-actions.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-d29713fdcc11cbc93bda29da5261da389226cd718e4292a1c2cd96629f573a80">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-settings.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1a07f3f14dacb06180bc02437804d175886aeacda98f5b0ef507a274e5ddd485">+51/-11</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-scoped.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-86abb9f90fabd982dedfdd9a21a052a47b6984edc7bd29a51ee104c8c473aec4">+682/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-67d38d39bb67f4a0cbfa473ee81ad50b1fffebc40c635417e58905f3c865a6e2">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>page-manager.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-565eab8b3c767ae50c9d05e591621d14f66b81af84d6b5ea6efe136c1c3933df">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>custom-charts.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e67e40336061645d2e29d009538f198c4afb5d674a63ed0bff66530caa3eae95">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashbaord-tableJson</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-fe87bf86d1d91df383be2c8c118169e2a18b976ddb4bbff5fb2cc70c76381662">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-chartJson.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-187b68c3a07b9fe52b36379098172a4a8445f46a2da054af62c8c2deb372b590">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-filter.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-0b36e0f7bb97e53ba43466ae6666f04e2b3015f5760243493a058ad3df6fbef9">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-folder.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-808be84f3e76f1a69eb26e1acfc7c0bbc504445dc2dcf83475d474d0cad47ff2">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-general-setting.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-60a678bb3767da174e18e3453190d5b526687094a1c34144c59b5b3797edde56">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-geoMap.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-37446976600456902ad3287acddef8dd8cb0e6819606a423b6711145d08cded0">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-html-chart.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-5b258fd2098659bd4445a432b9aaca79b1e1295bc45f20e82408498cf2b4696a">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-import.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-19a69660b4842f0e2872aaefcb2a539ed25761b42daa804cfb8426d5a7cda567">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-maps.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-18dc153e8132b3c446cdbf5bac7140ecb7629029d021f006d5d76a0e966eacfe">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-multi-y-axis.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-2c0ab4d43c3e915a4e00f2a729234e7c1c975a7a8bc9483fff2ba0a4660f0f83">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-streaming.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-7181101483e2bb5a3d086f87546287e47debe10a4b4343707c3feaf95bbb255d">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-tabs-setting.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-188e3e1e0adfb6431a70ca6f26e6a5db58be330d3de15b9c559e390cbf601147">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-transpose.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-6b7619b9de4f7daa67bd35028c25f13ad3620635538a7203f1095b35ddf013d1">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-variables-creation-scopes.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-878775b83972fb1f04f1d4df7bc0bbec364fbcbacda6fbd081423673e4ea4b05">+958/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-dependency.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-ad5a7685fbf4477a81657949b7dd4aa4ada6e66a4576d0c61bacb388095d0b52">+590/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-global.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-f3750bde6fb0d471ec65d81b9d5a5a5b15d79ca900782959a0ff856a5156f5be">+600/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-null-handling.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e42ab503059a687ceb4fa2edeed0888a47591e0a61680c10448eaf68b4e6bbd8">+133/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-panel-level.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-a4f3068a8d69478dafa0bc1bfb7f51cf98a6980ecc62ae78ba46a617f8e227fd">+712/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-refresh.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-8e82d40d2eda995a2915569d16456a9fd7d605017ed5868a28ee409e53646027">+605/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-setting.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1c6dd312b59d03b6cef1e15784451e5a5ffb3ed4682dec017e9834de8094fbdd">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard-variables-tab-level.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-b1f20469fa2e12dc68ede8ae381f60e2717489947ca693dd8a519fc03f195d48">+684/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard-variables-url-sync.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-709abba02dfd42b1be6d3838b162b544a2b97ba204dd179c37d462f0921ff14b">+599/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>dashboard.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1403f96be575d5ae4215674b2b1c53c2503ddb1b35a3f4e0aefcf391b1cea1be">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard2.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-657bb65c00477679ef10c9f79582468cf4f632589469e2c1da7da13979d71f8e">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboardtype.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1827c80e7bf807fa4be90c240ee9546392558c98d8785f3a39a889adced4241a">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>maxquery.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-68ad92cdbe3b024f7146090b46fb3fca0d91e5864afe490a12f807ddefa29726">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashCreation.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-0f865c438e06691b660a9d4a2448c7c94e6f5172c6a0615eb2a905fa276db575">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashIngestion.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-f324562b6f8143a8f780b29edc21e7cf969ff3ccc043e4f73aa4c32e48f7d06b">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashLogin.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-ba1d380a34ddae6c351de0f325d26ed3e0715c33c88d9e2f39177b696f3b66ef">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>visualization-vrl.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-935ba0de56260b2b735a350ada52a9d07cff34b79f0b137a384ed47cf80075d6">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>visualize.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-28874b05126e014a74c04029ea47a8797f936827a0b7196bd543b91f7389d0c1">[link]</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>variable-helpers.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-2e2771d2582ab60dfcbaeef480226887677e58b881edbb244e0ffa4396ffbb5c">+427/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>PanelContainer.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-414737cba6064461f7026e0b016afcb9620bd5bb29c4708fc170dee789dbcd4d">+35/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>PanelSchemaRenderer.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+11/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>VariablesValueSelector.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-5c6e3bcb87cb64f25bf8157a541604b7a4904c1282acf662cab5d76a5be6bd56">+844/-193</a></td>

</tr>

<tr>
  <td><strong>CustomHTMLEditor.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-66cb3b43f79787a9b8d99b8c1d0f2f89aacd82055ff9ddbd4a4e5c96ec6b61ca">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>CustomMarkdownEditor.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-6f1e425e1dc7a287070fbad1713679c729dc7ee61fa3b31781ed6b285ae3d279">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>DrilldownPopUp.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-9fdb8c9d3953179dbd311c7e4d2250683af9b51e7706122a505c5c6a708c2a55">+45/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>HTMLRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-128fd699e9ae1552077c27185db37871b57e0002558f89377ec64b4e29e1d7f7">+6/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>HTMLRenderer.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-9184ad98d56a2466a3cd9917dc2a15238023df9eafb2ca6d1b7488877ff47194">+13/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>MarkdownRenderer.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-63eed3fbb6882be90c70e833f9f64e9e8c6511e4c40162aa5c1a7662fc79469d">+6/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>MarkdownRenderer.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-8a4f13edce033462affe8585dd8f128ab333a52a0a59e097ce7db949e042b56b">+13/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>AddSettingVariable.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e622f54c1f7629ee67d29ed2fc87008d07eb9246767a05435cc42c3c17ce459a">+560/-80</a></td>

</tr>

<tr>
  <td><strong>VariableCustomValueSelector.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-ecfbb27a97242a9fd854f63f83f7af07bb4ddaaf1f465542ad7f74ec6b1f327e">+20/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>VariableQueryValueSelector.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-7e096d825438fc75baab2ef87cb4a04ae7ac1206e5021b71ce42cedd0984e064">+11/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>VariableQueryValueSelector.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-2cca760c14e835bd1845485fb5517a60f71a6dc23626a6381c8559b82476f5f4">+39/-10</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>VariableSettings.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-3d55b5c7a758c836df096cb320a0ac3ba4586bc025d9e69c180e6a0b668ed940">+132/-9</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>ViewPanel.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-e7b26fbbfe7ae57f50377c0f002155df17109ea54708b0f134dd2005356b2930">+82/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>usePanelDataLoader.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+61/-11</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useVariablesManager.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-a8440d3f1bc2c5d8a96a4ce8bc5fe8f5a14872fdab4ad5037674f55f07d6d2ae">+633/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>commons.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-17cb74f8142984fc46bbfecdeaacccc118fd5d4ab7f040a55695caaa309d104f">+40/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>variablesScopeUtils.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-51e0200d0cd001418ab2708878120830d849b912a3b16a7da37dea1432a12407">+33/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>variablesUtils.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-769aea99ac476a78b01cb3bb4221b0a0f0d5fa99f3dbc8c77022088ed8024f1b">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>variablesUtils.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-64086381f002e7ab774bf802bda51a31c14a0f2ff890b02df2037962345f78ae">+176/-40</a></td>

</tr>

<tr>
  <td><strong>RenderDashboardCharts.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-313f7c69102161242c893c863c50f1f1cd1fc19b68b5c99bf840b4b5c72f0f2e">+357/-61</a></td>

</tr>

<tr>
  <td><strong>ViewDashboard.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-052badb6758aff09ceaf1645869b9ba96125e6a0ea21abb01a8ee0a40d6467f3">+187/-62</a></td>

</tr>

<tr>
  <td><strong>AddPanel.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-5565bef51b35f1e9c8167eab0a22dc61c1d697dca45fe31f46cc8e5e9020ca74">+8/-8</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>AddPanel.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+609/-54</a></td>

</tr>

<tr>
  <td><strong>DashboardFiltersOption.spec.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-d3e73ec3d32f9068b22b3697ba8a23e3100285b7c92cc86f7d7e88477bb29bba">+26/-12</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>DashboardFiltersOption.vue</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9693/files#diff-1309de92cc43f54536fef3d92db8c11cc666ef63bc40d4d9ca3fdaed85a94d92">+36/-2</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Kirtan Thakkar <kirtan@kiara.tech>
Co-authored-by: ktx-riya <riya.kukadiya@kiara.tech>
2026-01-09 01:32:36 +05:30
Neha PandClaude 24b024a502 test: automation for bugs fixes (#9678)
### **User description**
## Summary
Refactored the logs regression test suite to follow the Page Object
Model (POM) pattern by centralizing all locators in the logsPage.js POM
file and updating test files to use these locators instead of hardcoded
selectors.


## Testing
All 10 regression tests passing:
- ✅ Absolute time error validation
- ✅ Stream switching with saved views (#9388)
- ✅ Field values with SUBQUERY/CTE/GROUP BY (#7751)
- ✅ Pagination count after search (#8868)
- ✅ Alert graph color display (#9311)
- ✅ Histogram query from history (#8180)
- ✅ Timestamp field in quick mode (#8180)
- ✅ Source field display logic (#8180)

Test execution: 10/10 passed in 7.2 minutes


___

### **PR Type**
Tests, Enhancement


___

### **Description**
- Refactor logs regression tests to Page Object Model
  - Centralize all locators in `logsPage.js`

- Add new POM locators for regression tests

- Add regression tests for bug #7751 (subquery, CTE, GROUP BY)

- Add regression tests for bug #8868 (pagination count update)

- Add regression test for bug #9311 (alert graph color)

- Add regression tests for bug #8180 (histogram, timestamp, source
field)


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["logsPage.js: New POM locators"] --> B["logs-regression.spec.js: Bug regression tests"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>logsPage.js</strong><dd><code>Add POM locators for
regression tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/pages/logsPages/logsPage.js

<ul><li>Added alert-related selectors (<code>alertsMenuItem</code>,
<code>alertGraph</code>, <code>alertChart</code>)<br> <li> Added query
history selectors (<code>queryHistoryButton</code>,
<code>historyPanel</code>)<br> <li> Added table and pagination selectors
(<code>tableBottom</code>, <code>tableBodyRow</code>,
<br><code>tableHeaders</code>)<br> <li> Added dynamic field selector
functions (<code>fieldExpandButton</code>,
<br><code>subfieldAddButton</code>, etc.)<br> <li> Added streams search,
error indicators, timestamp detail selectors</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9678/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>logs-regression.spec.js</strong><dd><code>Add
regression tests for major log search bugs</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

tests/ui-testing/playwright-tests/RegressionSet/logs-regression.spec.js

<ul><li>Added tests for bug #7751: subquery, CTE, GROUP BY field
expansion<br> <li> Added test for bug #8868: pagination count after
filtering<br> <li> Added test for bug #9311: full alert graph color
rendering<br> <li> Added tests for bug #8180: histogram query, timestamp
in quick mode, <br>source field logic</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9678/files#diff-99da86ede55fa5f2e3d3fbef897ba7aaa5a7db702a0135f66ac4c888fc7311b6">+538/-0</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-19 16:11:51 +05:30
Shrinath RaoandClaude Opus 4.5 660dfbabaf test: Dashboard Joins and Nested Functions e2e tests (#9685)
### **PR Type**
Tests, Enhancement

---

### **Description**

This PR adds comprehensive E2E tests for Dashboard Joins and Dashboard
Functions features, along with supporting page object helpers.

#### Key Changes:
- **Dashboard Joins Tests**: 8 consolidated multi-panel tests covering
INNER/LEFT/RIGHT joins, conditions, aggregations, field selection,
filters, dynamic operations, persistence, and error handling
- **Dashboard Functions Tests**: 2 multi-panel tests covering basic
(COUNT, COUNT-DISTINCT, AVG, SUM) and advanced (Multiple Y-axis, MIN,
MAX) aggregation functions
- **New `JoinHelper` class**: Provides methods for configuring join
types, streams, conditions, and operators
- **Enhanced `ChartTypeSelector`**: Added Y-axis function configuration
methods and stream selection with retry mechanism
- **Org Context Fix**: Navigate directly to dashboards with
`org_identifier` parameter to ensure correct API context

---

### **Test Coverage**

#### Dashboard Joins Tests (`dashboard-join.spec.js`) - 8 Tests

| # | Test Name | Panels | Coverage | Tags |
|---|-----------|--------|----------|------|
| 1 | Core Join Types - INNER, LEFT, RIGHT | 3 | INNER JOIN (11 rows),
LEFT JOIN (12 rows), RIGHT JOIN (5 rows) | `@dashboard-joins`, `@smoke`,
`@P0` |
| 2 | Join Conditions & Multi-Join | 3 | Multiple AND conditions, 3-way
join, OR conditions | `@dashboard-joins`, `@dashboard-joins-conditions`,
`@P1` |
| 3 | Aggregation Functions | 4 | Basic aggregation, SUM-like grouping,
AVG-like grouping, COUNT grouping | `@dashboard-joins`,
`@dashboard-joins-aggregation`, `@P1` |
| 4 | Field Selection | 4 | response_time_ms, country, bytes, request_id
fields | `@dashboard-joins`, `@dashboard-joins-fields`, `@P2` |
| 5 | Filters & Edge Cases | 6 | Join with filter, LEFT JOIN with NULLs,
session duration, not-equal (!=), greater-than (>), self-join |
`@dashboard-joins`, `@dashboard-joins-filters`, `@P2` |
| 6 | Dynamic Join Operations & UI Validation | 1 | Add/remove joins,
change join types, modify conditions | `@dashboard-joins`,
`@dashboard-joins-dynamic`, `@P2` |
| 7 | Persistence - Save and Reload Dashboard | 1 | Save panel, navigate
away, reload, verify join config persisted | `@dashboard-joins`,
`@dashboard-joins-persistence`, `@P2` |
| 8 | Error Handling & Recovery | 1 | Incomplete join handling, recovery
from invalid state | `@dashboard-joins`, `@dashboard-joins-errors`,
`@P3` |

#### Dashboard Functions Tests (`dashboard-nested-functions.spec.js`) -
2 Tests

| # | Test Name | Panels | Coverage | Tags |
|---|-----------|--------|----------|------|
| 1 | Basic Aggregation Functions | 4 | COUNT, COUNT-DISTINCT, AVG, SUM
functions | `@dashboard-functions`, `@dashboard-functions-basic`, `@P1`
|
| 2 | Advanced Aggregation Functions | 2 | Multiple Y-axis (COUNT + SUM
+ AVG), MIN + MAX functions | `@dashboard-functions`,
`@dashboard-functions-advanced`, `@P2` |

---

### **New Page Object Methods**

#### `JoinHelper` (`dashboard-joins.js`)
| Method | Description |
|--------|-------------|
| `addJoin()` | Open add join popup |
| `selectJoinType(type)` | Select INNER/LEFT/RIGHT/FULL/CROSS join |
| `selectJoinStream(streamName)` | Select stream to join with |
| `selectLeftField(field)` | Select left side join field |
| `selectRightField(field)` | Select right side join field |
| `selectOperator(operator)` | Select =, !=, <, >, <=, >= operator |
| `addCondition()` | Add another join condition |
| `saveJoin()` | Save join configuration |
| `removeJoin(index)` | Remove a join by index |
| `verifyJoinChipVisible(stream, index)` | Verify join chip displays
correctly |

#### `ChartTypeSelector` (`dashboard-chart.js`)
| Method | Description |
|--------|-------------|
| `selectStream(name, retries)` | Select stream with retry mechanism |
| `configureYAxisFunction(alias, func)` | Configure Y-axis aggregation
function |
| `verifyYAxisLabel(alias, func)` | Verify Y-axis label shows function |
| `openYAxisFunctionPopup(alias)` | Open Y-axis configuration popup |
| `selectFunction(name)` | Select aggregation function from dropdown |

#### `DashboardPanelActions` (`dashboard-panel-actions.js`)
| Method | Description |
|--------|-------------|
| `addNextPanel()` | Add another panel after saving |
| `getTableRowCount()` | Get count of data rows in table |
| `verifyChartRenders(expect)` | Verify chart/table renders |
| `savePanel()` | Save panel with networkidle wait |

---

### **Test Data**

Test data files located in `test-data/` directory:
- `joins/test_app_users.json` - 5 user records
- `joins/test_web_requests.json` - 12 web request records  
- `joins/test_sessions.json` - 8 session records
- `dashboard-functions/test_records.json` - 7 records with user_name and
score fields

---

### **Fixes Included**

| Issue | Fix |
|-------|-----|
| Org context mismatch on remote environments | Navigate to
`/web/dashboards?org_identifier=${ORGNAME}` |
| Streams not appearing in dropdown | Page reload after dashboard
creation to refresh stream list |
| Save panel race condition | Added `waitForLoadState("networkidle")`
after save click |
| Stream selection timing | Retry mechanism with debug logging |
| Test 5 timeout | Increased to 5 minutes for 6-panel test |

---

<details><summary><h3>File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>dashboard-chart.js</strong><dd><code>Enhance stream
selection and add Y-axis function methods</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-573a312576fce62d8e14f2bbb5f9b7d9a552d746304dce3d79862edddd24de76">+106/-14</a></td>
</tr>
<tr>
<td><strong>dashboard-create.js</strong><dd><code>Add smart panel
addition for empty and existing dashboards</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-c3c5add2b934580a91a79bb580634b70e2376b0452113008a0911102db3863e2">+25/-1</a>&nbsp;
&nbsp; </td>
</tr>
<tr>
<td><strong>dashboard-joins.js</strong><dd><code>New JoinHelper for
configuring and validating joins</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-f88eb0cf951ec45e97befde5c83a2c187bb46db3f6cb27bc0cb88d48c5f45b78">+351/-0</a>&nbsp;
</td>
</tr>
<tr>
<td><strong>dashboard-panel-actions.js</strong><dd><code>Add next-panel,
row count and chart render verifications</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-d29713fdcc11cbc93bda29da5261da389226cd718e4292a1c2cd96629f573a80">+76/-1</a>&nbsp;
&nbsp; </td>
</tr>
<tr>
<td><strong>global-setup.js</strong><dd><code>Include org_identifier in
login navigation URL</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-06323dad7214f86b41b62e121e716eeea0054bc4d950c6bcf4a0efe53894acc8">+4/-3</a>&nbsp;
&nbsp; &nbsp; </td>
</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>dashboard-join.spec.js</strong><dd><code>Consolidated
dashboard joins feature E2E tests</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-552f4ba6f199ade20dbab2c54b8573422fd644587ed1575262a7aa34f8041174">+1160/-0</a></td>
</tr>
<tr>

<td><strong>dashboard-nested-functions.spec.js</strong><dd><code>Multi-panel
dashboard functions E2E tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-d2a9855da60f5fd3820832815036c368a680e2885033ad1a7a2bcbd060e2a750">+372/-0</a>&nbsp;
</td>
</tr>
<tr>
<td><strong>test_records.json</strong><dd><code>Add test data for
dashboard functions tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-3a09d97f4091ae2f4dc97ebc14199c5d94efb878a6ebfa7da686cad5450ddda0">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>
</tr>
<tr>
<td><strong>test_app_users.json</strong><dd><code>Add user data for
dashboard joins tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-7c5af3decd88c4f9031fd83282844872f4a0a65eea2b51a46aac849aa4a5c129">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>
</tr>
<tr>
<td><strong>test_sessions.json</strong><dd><code>Add session data for
dashboard joins tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-836e072600882ffa58662a4867ac17d2ce799dd338daac585203ccaa01275e3c">+10/-0</a>&nbsp;
&nbsp; </td>
</tr>
<tr>
<td><strong>test_web_requests.json</strong><dd><code>Add web request
data for dashboard joins tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-1c4b00b1929e9a01de1cb8129161c49dc1563a5dde1c4b5e770a307245155382">+14/-0</a>&nbsp;
&nbsp; </td>
</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>cleanup.spec.js</strong><dd><code>Extend cleanup regex for
join and function test streams</code>&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9685/files#diff-c214275a512fa285a7e4f2ab61dfcb42d71a0436b0e4241f94d7b45693587983">+8/-1</a>&nbsp;
&nbsp; &nbsp; </td>
</tr>
</table></details></td></tr></tbody></table>

</details>

---

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 07:30:12 +05:30