From 0f5e91421b77e5d0de032f1d8f0df8cb59425648 Mon Sep 17 00:00:00 2001 From: Aqil Aziz Date: Thu, 21 May 2026 06:51:38 +0700 Subject: [PATCH] test(e2e): use stable cron test ids ## Summary - Adds shared `waitForTestId` and `clickTestId` E2E helpers for stable DOM hooks. - Adds missing `cron-jobs-panel` and `cron-refresh` hooks to the Cron Jobs settings panel. - Migrates the reference cron E2E flow away from Tailwind class/DOM walking to cron row/action test IDs. - Documents the E2E `data-testid` naming taxonomy in the E2E guide. ## Problem - #1861 calls out `cron-jobs-flow.spec.ts` as the concrete example of brittle selectors: it found `morning_briefing` via Tailwind class strings and `closest('div.p-4')`. - That breaks on harmless class/layout refactors and makes the reference spec a weak template for future E2E work. ## Solution - Use existing `CoreJobList` cron row/action hooks directly from the spec. - Add the missing panel/refresh hooks so the whole cron flow can avoid text/button discovery for row actions. - Centralize test ID waiting/clicking in `element-helpers.ts` instead of keeping local DOM snippets in specs. ## Submission Checklist - [x] Tests added or updated (happy path + at least one failure / edge case) per [Testing Strategy](../gitbooks/developing/testing-strategy.md#failure-path-requirement) - updated the reference cron E2E spec and helper path. - [x] **Diff coverage >= 80%** - N/A locally: E2E helper/spec/doc change; CI diff coverage is authoritative. - [x] Coverage matrix updated - N/A: E2E selector-hardening change, no feature row added/removed/renamed. - [x] All affected feature IDs from the matrix are listed in the PR description under `## Related` - N/A: no matrix feature ID applies. - [x] No new external network dependencies introduced (mock backend used per [Testing Strategy](../gitbooks/developing/testing-strategy.md#mock-policy)) - [x] Manual smoke checklist updated if this touches release-cut surfaces ([`docs/RELEASE-MANUAL-SMOKE.md`](../docs/RELEASE-MANUAL-SMOKE.md)) - N/A: no release-cut surface. - [x] Linked issue closed via `Closes #NNN` in the `## Related` section - N/A: this is a scoped slice that references #1861 without closing the broader audit issue. ## Impact - Runtime impact: none outside stable `data-testid` attributes on the Cron Jobs panel. - Test impact: cron E2E is less coupled to Tailwind classes and container structure. - Compatibility: `waitForTestId` is documented as tauri-driver/DOM-backed; Mac2 specs should keep accessibility/text helpers unless IDs are mirrored into accessible labels. ## Related - Refs #1861 - Follow-up PR(s)/TODOs: add stable hooks/migrations for the remaining settings, skills, conversation, onboarding, and notification E2E surfaces tracked by #1861. --- ## AI Authored PR Metadata (required for Codex/Linear PRs) ### Linear Issue - Key: N/A - URL: N/A ### Commit & Branch - Branch: `codex/1861-cron-e2e-testids` - Commit SHA: `28eca40a3d2e3a75b61105887e4faf58d4c0866e` ### Validation Run - [x] `pnpm --filter openhuman-app exec prettier --check src/components/settings/panels/CronJobsPanel.tsx test/e2e/helpers/element-helpers.ts test/e2e/specs/cron-jobs-flow.spec.ts` - passed - [x] `pnpm typecheck` - passed - [x] Focused tests: N/A, E2E spec migration not run locally - [x] Rust fmt/check (if changed): `cargo fmt --all --check` - passed; `git diff --check` - passed - [x] Tauri fmt/check (if changed): N/A ### Validation Blocked - `command:` `pnpm --filter openhuman-app exec tsc -p test/tsconfig.e2e.json --noEmit` - `error:` local command could not find `tsc` / `@wdio/globals/types` via that invocation - `impact:` app-wide `pnpm typecheck` passes; remote E2E/TS jobs remain authoritative for the E2E tsconfig ### Behavior Changes - Intended behavior change: none for users; E2E selectors now target stable hooks. - User-visible effect: none. ### Parity Contract - Legacy behavior preserved: cron load, refresh, pause/resume, run-history, and remove behavior unchanged. - Guard/fallback/dispatch parity checks: spec still asserts the same UI and sidecar persistence behavior. ### Duplicate / Superseded PR Handling - Duplicate PR(s): N/A - Canonical PR: this PR - Resolution (closed/superseded/updated): N/A ## Summary by CodeRabbit * **Tests** * Added E2E helpers and updated cron-jobs flow to use stable test identifiers for more reliable UI interactions and polling. * **Documentation** * Added guidance on stable test ID naming and how to use the new E2E helpers in the testing guide. * **Maintenance** * Cron Jobs panel and controls now expose stable identifiers for testing (no user-facing behavior changes). [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/tinyhumansai/openhuman/pull/2301?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) Co-authored-by: aqilaziz Co-authored-by: Steven Enamakel --- .../settings/panels/CronJobsPanel.tsx | 3 +- app/test/e2e/helpers/element-helpers.ts | 41 ++++++ app/test/e2e/specs/cron-jobs-flow.spec.ts | 131 ++++++++++++------ gitbooks/developing/e2e-testing.md | 13 ++ 4 files changed, 147 insertions(+), 41 deletions(-) diff --git a/app/src/components/settings/panels/CronJobsPanel.tsx b/app/src/components/settings/panels/CronJobsPanel.tsx index 4749fa079..8e6f10e0f 100644 --- a/app/src/components/settings/panels/CronJobsPanel.tsx +++ b/app/src/components/settings/panels/CronJobsPanel.tsx @@ -131,7 +131,7 @@ const CronJobsPanel = () => { }; return ( -
+
{