test(mock-llm): add E2E coverage for Files tab, Git control bar, and Browser tab#1029
test(mock-llm): add E2E coverage for Files tab, Git control bar, and Browser tab#1029malhotra5 wants to merge 23 commits into
Conversation
…Browser tab Add mock-LLM E2E tests exercising conversation panel tabs and git integration against the real agent-server: - Files tab defaults to diff view when a workspace is attached (selected_workspace seeded in conversation metadata localStorage) - Files tab defaults to file-tree view when NO workspace is attached - Git control bar shows workspace-name pill for folder-attached conversations - Browser tab renders empty state when no page has been browsed All tests run serial in a single describe block, sharing one conversation for the workspace-attached cases (steps 3-5) and creating a fresh conversation for the no-attachment case (step 6). Issue #511 Co-authored-by: openhands <openhands@all-hands.dev>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
❌ Mock-LLM Docker E2E Test Results8/20 passed · 3 failed · 9 skipped Commit:
🔍 Failure details (3)❌ mock-llm-conversation.spec.ts › mock-LLM agent-server conversation › step 1: create an LLM profile pointing at the mock LLM server❌ mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 1: ensure mock LLM profile is configured❌ mock-llm-model-switch.spec.ts › mock-LLM /model slash command › step 1: configure LLM, create switch-target profile, register trajectoryPosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
The mock-LLM E2E test failed because the default 2-turn trajectory was exhausted by preceding test suites (automation, conversation). After exhaustion every /chat/completions returns 500, so the agent never produces REPLY_TOKEN and waitForNonUserMessageText times out. Fix: call resetMockLLM(request) at the top of step 2 and step 6 (before each conversation creation), matching the pattern used by mock-llm-conversation.spec.ts step 3. Co-authored-by: openhands <openhands@all-hands.dev>
❌ Mock-LLM E2E Tests16/20 passed · 1 failed · 3 skipped Commit:
🔍 Failure details (1)❌ mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 3: git control bar shows workspace name pillPosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
…lled When the CI wrapper kills Playwright after the 5-minute deadline (exit code 124), no results.json or marker files exist. Previously the PR comment showed '0/0 passed' with an empty table, which was misleading. Now the render script accepts --exit-code from the workflow. When exit code is 124 and no results exist, it renders a clear timeout entry: '⏱️ (test suite timed out before completing)' with a note pointing to workflow logs. Both mock-llm-e2e.yml and mock-llm-docker-e2e.yml pass the exit code through. Co-authored-by: openhands <openhands@all-hands.dev>
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
❌ Mock-LLM E2E Tests16/20 passed · 1 failed · 3 skipped Commit:
🔍 Failure details (1)❌ mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 3: git control bar shows workspace name pillPosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
Each Playwright test() gets a fresh browser context, so localStorage from step 2 is gone when steps 3-5 run. Extract seedWorkspaceMetadata() helper and call it in steps 3 and 4 (which assert on workspace-dependent UI: git control bar name pill and files tab diff-view default). Co-authored-by: openhands <openhands@all-hands.dev>
e7cec5d to
07bdb64
Compare
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)
❌ Mock-LLM E2E Tests16/20 passed · 1 failed · 3 skipped Commit:
🔍 Failure details (1)❌ mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 3: git control bar shows workspace name pillPosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
❌ Mock-LLM Docker E2E Test Results15/20 passed · 2 failed · 3 skipped Commit:
🔍 Failure details (2)❌ mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 4: files tab defaults to diff view for attached workspace❌ mock-llm-model-switch.spec.ts › mock-LLM /model slash command › step 1: configure LLM, create switch-target profile, register trajectoryPosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
The agent-server creates conversation worktrees inside the agent-canvas
repo, so git detection always finds the real repo ('OpenHands/agent-canvas')
and the workspace-name fallback ('my-app') never renders. Assert that
Pull/Push buttons are visible instead — these only appear when the git
control bar has successfully detected a repository.
Co-authored-by: openhands <openhands@all-hands.dev>
|
@OpenHands resolve merge conflicts |
|
Uh oh! There was an unexpected error starting the job :( |
…ab-and-git-511 # Conflicts: # .github/workflows/mock-llm-docker-e2e.yml # .github/workflows/mock-llm-e2e.yml # tests/e2e/mock-llm/utils/mock-llm-helpers.ts
❌ Mock-LLM E2E Tests47/50 passed · 1 failed · 2 skipped · 🆕 6 new Commit:
🔍 Failure details (1)❌ mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 4: files tab defaults to diff view for attached workspacePosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
📸 Snapshot Test ReportWarning Snapshot comparison step crashed (timeout, OOM, or runner error) — diff results below may be incomplete or absent. ❌ 1 snapshot differ from the main branch baseline. Add the
🔴 Changed snapshots (1)
|
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
✅ Unchanged snapshots (73)
archived-conversation
- conversation-panel-with-archived-badges
- conversation-view-archived
- conversation-view-sandbox-error
automations
- automations-delete-modal
- automations-list-active-inactive
- automations-no-automations
- automations-search-no-results
backends-extended
- backend-add-blank-disabled
- backend-add-cloud-advanced-open
- backend-add-cloud-no-key-disabled
- backend-add-cloud-with-key-enabled
- backend-add-form-partially-filled
- backend-add-invalid-url-disabled
- backend-add-local-ready
- backend-add-name-only-disabled
- backend-add-two-column-layout
- backend-add-whitespace-host-disabled
- backend-after-switch
- backend-cancel-nothing-saved
- backend-edit-prefilled
- backend-manage-after-removal
- backend-manage-two-listed
- backend-remove-cancelled
- backend-remove-confirmation
- backend-switch-overlay
backends
- backend-add-modal
- backend-manage-modal
- backend-selector-open
changes-tab
- changes-deleted-file
- changes-diff-viewer
- changes-empty
collapsible-thinking
- reasoning-content-collapsed
- reasoning-content-expanded
- think-action-collapsed
- think-action-expanded
mcp-page
- mcp-custom-server-1-editor-open
- mcp-custom-server-2-url-filled
- mcp-custom-server-3-all-filled
- mcp-custom-server-4-installed
- mcp-custom-server-editor
- mcp-empty-installed
- mcp-search-filtered
- mcp-slack-install-1-marketplace
- mcp-slack-install-2-modal
- mcp-slack-install-3-filled
- mcp-slack-install-4-installed
onboarding
- onboarding-step-0-check-backend
- onboarding-step-1-choose-agent
- onboarding-step-2-setup-llm
- onboarding-step-3-say-hello
projects-workspace-browser
- projects-workspace-browser
settings-page
- add-backend-modal
- analytics-consent-modal
- home-screen
- settings-app-page
- settings-page
settings-secrets
- secrets-add-form-filled
- secrets-add-form
- secrets-after-save
- secrets-delete-confirm
- secrets-list
settings-verification
- condenser-settings
- verification-settings-critic-enabled
- verification-settings-off
- verification-settings-on
sidebar
- sidebar-collapsed
- sidebar-conversation-panel
- sidebar-filter-menu
skills-page
- skills-empty
- skills-loaded
- skills-no-match
- skills-search-filtered
- skills-type-filter
Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers.
❌ Mock-LLM Docker E2E Test Results39/50 passed · 2 failed · 9 skipped Commit:
🔍 Failure details (2)❌ chromium › mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 4: files tab defaults to diff view for attached workspace❌ chromium › mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 4: files tab defaults to diff view for attached workspacePosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
…t mode violation
The SegmentedToggle renders both option buttons simultaneously as a
radio group. Using .or() on two always-visible elements triggers
Playwright's strict mode ('resolved to 2 elements'). Wait for the
parent radiogroup container (files-tab-diff-toggle) instead.
Co-authored-by: openhands <openhands@all-hands.dev>
❌ Mock-LLM E2E Tests49/50 passed · 1 failed · 🆕 6 new Commit:
🔍 Failure details (1)❌ mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 6: files tab defaults to file-tree view without attached workspacePosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
📸 Snapshot Test ReportWarning Snapshot comparison step crashed (timeout, OOM, or runner error) — diff results below may be incomplete or absent. ❌ 1 snapshot differ from the main branch baseline. Add the
🔴 Changed snapshots (1)
|
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
✅ Unchanged snapshots (73)
archived-conversation
- conversation-panel-with-archived-badges
- conversation-view-archived
- conversation-view-sandbox-error
automations
- automations-delete-modal
- automations-list-active-inactive
- automations-no-automations
- automations-search-no-results
backends-extended
- backend-add-blank-disabled
- backend-add-cloud-advanced-open
- backend-add-cloud-no-key-disabled
- backend-add-cloud-with-key-enabled
- backend-add-form-partially-filled
- backend-add-invalid-url-disabled
- backend-add-local-ready
- backend-add-name-only-disabled
- backend-add-two-column-layout
- backend-add-whitespace-host-disabled
- backend-after-switch
- backend-cancel-nothing-saved
- backend-edit-prefilled
- backend-manage-after-removal
- backend-manage-two-listed
- backend-remove-cancelled
- backend-remove-confirmation
- backend-switch-overlay
backends
- backend-add-modal
- backend-manage-modal
- backend-selector-open
changes-tab
- changes-deleted-file
- changes-diff-viewer
- changes-empty
collapsible-thinking
- reasoning-content-collapsed
- reasoning-content-expanded
- think-action-collapsed
- think-action-expanded
mcp-page
- mcp-custom-server-1-editor-open
- mcp-custom-server-2-url-filled
- mcp-custom-server-3-all-filled
- mcp-custom-server-4-installed
- mcp-custom-server-editor
- mcp-empty-installed
- mcp-search-filtered
- mcp-slack-install-1-marketplace
- mcp-slack-install-2-modal
- mcp-slack-install-3-filled
- mcp-slack-install-4-installed
onboarding
- onboarding-step-0-check-backend
- onboarding-step-1-choose-agent
- onboarding-step-2-setup-llm
- onboarding-step-3-say-hello
projects-workspace-browser
- projects-workspace-browser
settings-page
- add-backend-modal
- analytics-consent-modal
- home-screen
- settings-app-page
- settings-page
settings-secrets
- secrets-add-form-filled
- secrets-add-form
- secrets-after-save
- secrets-delete-confirm
- secrets-list
settings-verification
- condenser-settings
- verification-settings-critic-enabled
- verification-settings-off
- verification-settings-on
sidebar
- sidebar-collapsed
- sidebar-conversation-panel
- sidebar-filter-menu
skills-page
- skills-empty
- skills-loaded
- skills-no-match
- skills-search-filtered
- skills-type-filter
Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers.
The files-tab main container reports 'hidden' during the right-panel drawer animation. Wait for the inner diff toggle radio group (same approach as step 4) which is visible once the tab content renders. Co-authored-by: openhands <openhands@all-hands.dev>
🛑 Mock-LLM Docker E2E Test Results36/43 passed · 2 failed · 5 skipped · Commit:
🔍 Failure details (2)❌ chromium › mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 6: files tab defaults to file-tree view without attached workspace❌ chromium › mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 6: files tab defaults to file-tree view without attached workspacePosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
✅ Mock-LLM E2E Tests50/50 passed · 🆕 6 new Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
📸 Snapshot Test ReportWarning Snapshot comparison step crashed (timeout, OOM, or runner error) — diff results below may be incomplete or absent. ❌ 1 snapshot differ from the main branch baseline. Add the
🔴 Changed snapshots (1)
|
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
✅ Unchanged snapshots (73)
archived-conversation
- conversation-panel-with-archived-badges
- conversation-view-archived
- conversation-view-sandbox-error
automations
- automations-delete-modal
- automations-list-active-inactive
- automations-no-automations
- automations-search-no-results
backends-extended
- backend-add-blank-disabled
- backend-add-cloud-advanced-open
- backend-add-cloud-no-key-disabled
- backend-add-cloud-with-key-enabled
- backend-add-form-partially-filled
- backend-add-invalid-url-disabled
- backend-add-local-ready
- backend-add-name-only-disabled
- backend-add-two-column-layout
- backend-add-whitespace-host-disabled
- backend-after-switch
- backend-cancel-nothing-saved
- backend-edit-prefilled
- backend-manage-after-removal
- backend-manage-two-listed
- backend-remove-cancelled
- backend-remove-confirmation
- backend-switch-overlay
backends
- backend-add-modal
- backend-manage-modal
- backend-selector-open
changes-tab
- changes-deleted-file
- changes-diff-viewer
- changes-empty
collapsible-thinking
- reasoning-content-collapsed
- reasoning-content-expanded
- think-action-collapsed
- think-action-expanded
mcp-page
- mcp-custom-server-1-editor-open
- mcp-custom-server-2-url-filled
- mcp-custom-server-3-all-filled
- mcp-custom-server-4-installed
- mcp-custom-server-editor
- mcp-empty-installed
- mcp-search-filtered
- mcp-slack-install-1-marketplace
- mcp-slack-install-2-modal
- mcp-slack-install-3-filled
- mcp-slack-install-4-installed
onboarding
- onboarding-step-0-check-backend
- onboarding-step-1-choose-agent
- onboarding-step-2-setup-llm
- onboarding-step-3-say-hello
projects-workspace-browser
- projects-workspace-browser
settings-page
- add-backend-modal
- analytics-consent-modal
- home-screen
- settings-app-page
- settings-page
settings-secrets
- secrets-add-form-filled
- secrets-add-form
- secrets-after-save
- secrets-delete-confirm
- secrets-list
settings-verification
- condenser-settings
- verification-settings-critic-enabled
- verification-settings-off
- verification-settings-on
sidebar
- sidebar-collapsed
- sidebar-conversation-panel
- sidebar-filter-menu
skills-page
- skills-empty
- skills-loaded
- skills-no-match
- skills-search-filtered
- skills-type-filter
Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers.
🔶 Mock-LLM Docker E2E Test Results45/50 passed · 5 skipped · 🆕 6 new Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
|
✅ Review complete. This review was performed through OpenHands Cloud Automation. You can log in and view the conversation here. |
all-hands-bot
left a comment
There was a problem hiding this comment.
Taste Rating
🟡 Acceptable - Works but could be cleaner
Analysis
[IMPROVEMENT OPPORTUNITIES]
-
[tests/e2e/mock-llm/mock-llm-files-and-git.spec.ts, Lines 43-54] Verbose block comment: The 11-line block comment before
seedWorkspaceMetadatais mostly restating what the code says ("seed into localStorage", "fresh browser context", etc.). The only non-obvious detail is theaddInitScripttiming note — that one is worth keeping. Consider trimming to: the function signature + theaddInitScripttiming note. -
[tests/e2e/mock-llm/mock-llm-files-and-git.spec.ts, Lines 102-112] Verbose block comment: The 10-line comment before the test is a blow-by-blow narration of what the next ~30 lines will do. Test names should be self-documenting; if "step 2: start conversation and attach workspace metadata" isn't clear enough, the test name needs fixing, not a comment. Keep only the non-obvious notes (e.g., why we seed metadata after the reply, why we reload).
-
[tests/e2e/mock-llm/mock-llm-files-and-git.spec.ts, Lines 158-160] Unnecessary comment:
// Re-seed workspace metadata — each test gets a fresh browser context.is self-evident from the function name. Remove. -
[tests/e2e/mock-llm/utils/mock-llm-helpers.ts, Lines 324-326] Unnecessary section header comment: The box-header comments add visual noise for a function grouping that is already obvious from the function name. Standard JS/TS convention (grouping with blank lines) is sufficient.
-
[tests/e2e/mock-llm/utils/mock-llm-helpers.ts, Lines 329-332] Comment describes mechanism, not invariant: "The agent-server may briefly drop connections between test suites while processing cleanup from the previous spec's afterAll." This describes why the retry exists, but it's non-local — the reason can become stale while the code stays. If the retry is just a general resilience pattern, drop the rationale. If it's tied to a specific known issue, link to the issue number instead.
-
[tests/e2e/mock-llm/utils/mock-llm-helpers.ts, Lines 365-366] Dead code: The
throwafter the loop is unreachable — the loop either returns or throws inside the catch. Either useassert(false)fromnode:assert, or restructure to eliminate the dead code path.
[STYLE NOTES]
-
[tests/e2e/mock-llm/utils/mock-llm-helpers.ts, Lines 343-347] Code is fine: The ternary chain for HTTP method dispatch works. No change needed.
-
[scripts/static-server.mjs, Lines 416-426] Comment is fine: The error-handling comment is appropriately terse and explains the why. No change needed.
-
[tests/e2e/mock-llm/scripts/render-mock-llm-report.mjs, Lines 331-359] Comment is fine: Explains a real edge case. Acceptable.
Summary
The PR is a solid E2E test expansion covering Files tab, Git control bar, and Browser tab behavior. The test design is thoughtful — workspace metadata seeding via addInitScript, soft-fail for Docker git probe, serial mode with shared conversation ID. The WebSocket error handler in static-server.mjs is a clean, targeted fix.
The main issues are verbosity in block comments (especially before test steps) and one dead code path. Neither is blocking, but cleaning them up would improve signal-to-noise ratio in the test file.
[RISK ASSESSMENT]
- [Overall PR]
⚠️ Risk Assessment: 🟢 LOW
No breaking changes. Workflow additions pass--exit-codeto the report renderer (additive). E2E tests run in CI with mocked LLM. The WebSocket error handler is defensive and safe.
VERDICT:
✅ Worth merging: Core logic is sound. Minor comment noise is the only area for improvement.
KEY INSIGHT:
The seedWorkspaceMetadata / seedLocalStorage pattern (using addInitScript to write to localStorage before the app loads) is the correct approach for E2E tests that need to pre-condition the app's storage — avoid the common mistake of using page.evaluate on about:blank.
Improve this review? If any feedback above seems incorrect or irrelevant to this repository, you can teach the reviewer to do better:
- Add a
.agents/skills/custom-codereview-guide.mdfile to your branch (or edit it if one already exists) with the/codereviewtrigger and the context the reviewer is missing. See the customization docs for the required frontmatter format.- Re-request a review - the reviewer reads guidelines from the PR branch, so your changes take effect immediately.
- When your PR is merged, the guideline file goes through normal code review by repository maintainers.
Resolve with AI? Install the iterate skill in your agent and run
/iterateto automatically drive this PR through CI, review, and QA until it's merge-ready.Was this review helpful? React with 👍 or 👎 to give feedback.
This review was generated by an AI agent (OpenHands) on behalf of the user through OpenHands Automation. View conversation
| throw err; | ||
| } | ||
| } | ||
| // Unreachable, but satisfies TS |
There was a problem hiding this comment.
🟡 Suggestion: This throw is unreachable — the loop either returns or throws inside the catch. Either use assert(false) from node:assert, or restructure to eliminate the dead code path.
| * real app origin when the first `page.goto()` triggers a document load. | ||
| * A plain `page.evaluate` on `about:blank` would write to the wrong origin. | ||
| */ | ||
| async function seedWorkspaceMetadata( |
There was a problem hiding this comment.
🟡 Suggestion: The block comment before seedWorkspaceMetadata is mostly self-evident from the code. Keep only the addInitScript timing note (lines 47-51), which is genuinely non-obvious. Remove the rest — the function name and parameter names already document the intent.
| }), | ||
| ); | ||
| }, | ||
| { testId: "chat-input", text: USER_MESSAGE }, |
There was a problem hiding this comment.
🟡 Suggestion: // Re-seed workspace metadata — each test gets a fresh browser context. is self-evident. Remove.
| } | ||
| } | ||
|
|
||
| // ═══════════════════════════════════════════════════════════════════════ |
There was a problem hiding this comment.
🟡 Suggestion: The box-header comments add visual noise. Standard JS/TS grouping with blank lines is sufficient and more conventional.
- Trim seedWorkspaceMetadata JSDoc to keep only the addInitScript timing note - Remove self-evident 're-seed' comments in steps 3 and 4 - Trim step 1 trajectory block comment to two lines - Remove step 2 seed rationale comment (function name is sufficient) - Remove box-header section dividers added in this PR - Fix unreachable throw in retryOnTransient via lastError pattern - Tighten retryOnTransient JSDoc to just list the retried conditions Co-authored-by: openhands <openhands@all-hands.dev>
✅ Mock-LLM E2E Tests50/50 passed · 🆕 6 new Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
📸 Snapshot Test ReportWarning Snapshot comparison step crashed (timeout, OOM, or runner error) — diff results below may be incomplete or absent. ❌ 1 snapshot differ from the main branch baseline. Add the
🔴 Changed snapshots (1)
|
| Expected (main) | Actual (PR) | Diff |
|---|---|---|
![]() |
![]() |
![]() |
✅ Unchanged snapshots (73)
archived-conversation
- conversation-panel-with-archived-badges
- conversation-view-archived
- conversation-view-sandbox-error
automations
- automations-delete-modal
- automations-list-active-inactive
- automations-no-automations
- automations-search-no-results
backends-extended
- backend-add-blank-disabled
- backend-add-cloud-advanced-open
- backend-add-cloud-no-key-disabled
- backend-add-cloud-with-key-enabled
- backend-add-form-partially-filled
- backend-add-invalid-url-disabled
- backend-add-local-ready
- backend-add-name-only-disabled
- backend-add-two-column-layout
- backend-add-whitespace-host-disabled
- backend-after-switch
- backend-cancel-nothing-saved
- backend-edit-prefilled
- backend-manage-after-removal
- backend-manage-two-listed
- backend-remove-cancelled
- backend-remove-confirmation
- backend-switch-overlay
backends
- backend-add-modal
- backend-manage-modal
- backend-selector-open
changes-tab
- changes-deleted-file
- changes-diff-viewer
- changes-empty
collapsible-thinking
- reasoning-content-collapsed
- reasoning-content-expanded
- think-action-collapsed
- think-action-expanded
mcp-page
- mcp-custom-server-1-editor-open
- mcp-custom-server-2-url-filled
- mcp-custom-server-3-all-filled
- mcp-custom-server-4-installed
- mcp-custom-server-editor
- mcp-empty-installed
- mcp-search-filtered
- mcp-slack-install-1-marketplace
- mcp-slack-install-2-modal
- mcp-slack-install-3-filled
- mcp-slack-install-4-installed
onboarding
- onboarding-step-0-check-backend
- onboarding-step-1-choose-agent
- onboarding-step-2-setup-llm
- onboarding-step-3-say-hello
projects-workspace-browser
- projects-workspace-browser
settings-page
- add-backend-modal
- analytics-consent-modal
- home-screen
- settings-app-page
- settings-page
settings-secrets
- secrets-add-form-filled
- secrets-add-form
- secrets-after-save
- secrets-delete-confirm
- secrets-list
settings-verification
- condenser-settings
- verification-settings-critic-enabled
- verification-settings-off
- verification-settings-on
sidebar
- sidebar-collapsed
- sidebar-conversation-panel
- sidebar-filter-menu
skills-page
- skills-empty
- skills-loaded
- skills-no-match
- skills-search-filtered
- skills-type-filter
Generated by the Snapshot Tests workflow. This comment was created by an AI agent (OpenHands) on behalf of the repo maintainers.
|
| Status | Test | Duration |
|---|
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses)












Why
Issue #511 identifies multiple implemented features with zero E2E test coverage. This PR adds mock-LLM E2E tests for the conversation panel tabs (Files, Browser) and git integration (control bar workspace pill).
Summary
New test spec:
tests/e2e/mock-llm/mock-llm-files-and-git.spec.ts— 6 serial steps covering 4 "I can" statements from #511:selected_workspacein localStorage conversation metadata → reloadsaria-checked="true"on the "Diff" optionHow it works
Steps 2–5 share one conversation: step 2 creates it and seeds
selected_workspaceinopenhands-agent-server-conversation-metadatalocalStorage (simulating a user who picked a local folder). Steps 3–5 navigate directly to that conversation URL to verify the downstream effects.Step 6 creates a completely separate conversation without any workspace seeding to verify the opposite default behavior.
Issue Number
#511
How to Test
npm run build:app # if build/ is missing npm run test:e2e:mock-llmType
This PR was created by an AI agent (OpenHands) on behalf of @rmalhot.
@malhotra5 can click here to continue refining the PR
🐳 Docker images for this PR
• GHCR package: https://github.com/OpenHands/agent-canvas/pkgs/container/agent-canvas
ghcr.io/openhands/agent-canvasghcr.io/openhands/agent-server:1.26.0-pythonopenhands-automation==1.0.0a6f4bb57aa4240171bbd59d1a06b6ed0bd53ad8a45Pull (multi-arch manifest)
# Multi-arch manifest — Docker automatically pulls the correct architecture docker pull ghcr.io/openhands/agent-canvas:sha-f4bb57aRun
All tags pushed for this build
About Multi-Architecture Support
sha-f4bb57a) is a multi-arch manifest supporting both amd64 and arm64sha-f4bb57a-amd64) are also available if needed