Skip to content

test(e2e): add Workplace App settings coverage (215 settings, 445 scenarios) - #595

Merged
camreeves merged 108 commits into
developfrom
test/e2e-workplace-settings
Nov 3, 2026
Merged

camreeves merged 108 commits into
developfrom
test/e2e-workplace-settings

Conversation

@sharmilaseenivasan17

@sharmilaseenivasan17 sharmilaseenivasan17 commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Workplace Settings E2E Automation — Coverage & QA Status

Summary

This PR introduces Playwright E2E automation for Workplace application Settings, validating configuration-driven behaviour across desk, room, parking, visitor, locker, Explore and other supported workflows.

The tests verify enabled/disabled configurations, UI visibility, booking restrictions, permissions, recurrence and other Settings-dependent behaviour.

The automation uses the existing E2E framework without intentional changes to product source code or shared framework implementation.

1. Final Coverage Summary

Metric Final Audit
Playwright spec files 187
Unique Settings covered 215
Settings scenarios 445
Locally passed scenarios 445 (443 in the full run on 3 Nov + the 2 new PPT-2871 cases, 35/35)
Failed scenarios in reported coverage 0

QA Status: All 445 scenarios are recorded as passing locally in the final QA audit (docs/qa/workplace-settings-final-status.md): 443 in the full run on 3 Nov, and the 2 PPT-2871 override cases added in 2e9a3f467 passed 35/35 (5 repeats, 0 retries).

These figures represent the committed PR scope and exclude held local tests and developer-approved exclusions. GitHub CI status is tracked separately.

2. Area-wise Coverage Breakdown

Area Specs Settings Scenarios
bookings 10 11 25
chat 1 1 2
desk-booking 27 27 61
directory 2 2 4
explore 12 21 43
general 28 35 63
landing 10 10 17
lockers 11 11 24
parking-booking 15 16 40
parking-request 15 18 39
room-booking 38 39 82
schedule 5 8 16
visitor-invite 13 16 29
Total 187 215 445

3. Test Coverage

Automated scenarios cover:

  • Desk booking, availability and booking restrictions
  • Room booking, events and recurrence
  • Parking booking and parking requests
  • Locker booking configurations
  • Visitor invitations and booking workflows
  • General Workplace application Settings
  • Landing page and Explore behaviour
  • Schedule, directory and chat features

Tests verify both enabled and disabled configurations where applicable, including expected UI behaviour and control scenarios.

4. Latest Update

Commit: 2f6fd46b5

Changes included:

  1. Updated bookings.allow-all-day.spec.ts to use a future booking date.

    • Both Settings scenarios reverified successfully.
    • Result: 2/2 PASS.
  2. Added final Excel coverage tracker:

    • docs/qa/workplace-settings-e2e-coverage-30-10-2026.xlsx
  3. Added detailed Markdown QA status report:

    • docs/qa/workplace-settings-final-status.md

This commit updates existing coverage and adds QA documentation. It does not introduce additional unique Settings or scenarios into the reported totals.

Review fixes

Commits: 1906bbd14b, 2db5cef6a5

  1. The settings harness no longer fails a passing test on "page closed" errors from requests still in flight at teardown (browserOnlyTest, protectNetwork). The browserOnlyTest teardown wait stops after 10 s.
  2. The socket, console-error and redaction checks use the shared harness helpers instead of inline copies. BROWSER_APP reads APP_URL.
  3. readOnlyTest loads the staff storage state file directly, so each test opens one browser context instead of two.
  4. The 16 browser-only specs are renamed to *.browser.spec.ts. The settings-browser project matches that suffix instead of a hand-kept list.
  5. The e2e-advisory job timeout is now 225 minutes, so it covers the settings step's own 60 minutes.
  6. 38 dense spec files are formatted with Prettier (format only).

After these fixes: e2e:typecheck passes, --list is unchanged (407 + 36 = 443) and --project=settings-browser passed 36/36 locally. The settings project was not re-run (it needs the local stack).

5. Known Product Issues and Follow-up Work

Jira Description / Status
PPT-2860 Locker date-selection issue remains outstanding
PPT-2868 Explore device-field scenarios awaiting product fix
PPT-2869 Book-for-others behaviour requires targeted coverage
PPT-2870 Locker picker-loading issue reproduced locally

Some existing tests pass against current branch behaviour but require updates once corresponding product fixes from develop become available.

The detailed QA report records these follow-up requirements.

6. Held Tests — Not Included in PR

The following work remains local and is not included in the committed PR coverage:

Test / Area Status
parking.hide_selected_space 4 scenarios verified on develop; held locally
explore.hide_device_fields 2 scenarios awaiting PPT-2868
T25 recurrence reproduction Held locally
Locker picker-loading bug check PPT-2870 reproduction; held locally

These tests are tracked separately and are not counted as additional passing PR scenarios.

7. Developer-Approved Exclusions

The following Settings are excluded from the in-scope coverage:

  • new_features
  • bookings.allowed_daily_visitor_count
  • spaces.show_images
  • desks.hide_reason
  • lockers.use_building_timezone

Exclusion decisions and supporting rationale are recorded in the final QA audit.

8. QA Reference Documents

The following documents are committed to this PR for team review:

Excel Coverage Tracker

docs/qa/workplace-settings-e2e-coverage-30-10-2026.xlsx

Detailed QA Status Report

docs/qa/workplace-settings-final-status.md

These documents contain the Settings inventory, scenario coverage, verification results, exclusions, Jira references and outstanding work.

9. Review Notes

  • No intentional product source-code changes.
  • Existing shared E2E framework is preserved.
  • Coverage counts refer to committed PR scope only.
  • Held local tests and bug reproductions are tracked separately.
  • Local Playwright verification does not imply GitHub CI success.
  • Post-fix test updates will be handled separately.

Final QA Status

187 Playwright specs | 215 unique Settings | 445 scenarios

445/445 scenarios reported as locally passed (443 in the full run on 3 Nov + the 2 new PPT-2871 cases, 35/35).

Latest changes and QA reference documents have been committed and pushed to test/e2e-workplace-settings.

Ready for team review, subject to normal CI and code-review checks.


Review fixes (1906bbd14b, 2db5cef6a5) made by Claude Opus 5.5 in Claude Code (T3 Code).

Reviewed with sol-loop: 1 round with gpt-6.1-sol on xhigh. Sol verdict: approved

🤖 Generated with Claude Code

3 Nov updates

Commits: 345aeb728, 2e9a3f467, 64ed1007a, 3480ebc74

  1. explore.show-presence-indicators.browser.spec.ts now uses the shared browser-only harness (browserOnlyTest, controlSocket, browserSignIn, syntheticOrgGets): 629 → 316 lines, with both scenarios and their assertions unchanged. Verified: 20/20 (--repeat-each=10) and settings-browser 36/36, 0 retries.
  2. PPT-2871 override cases: desks.use_building_timezone: false and lockers.use_building_timezone: false now each have a case showing they override bookings.use_building_timezone: true. The stale bookings || lockers comment in the locker spec is corrected. Verified: 35/35 over 5 repeats, 0 retries, against the local e2e stack.
  3. QA doc counts updated to 445 (desk-booking 61, lockers 24).

Coverage after these commits: 187 specs, 215 unique Settings, 445 scenarios. --list: 409 + 36 = 445.

…rios)

Add permanent Playwright specs under apps/workplace/e2e/settings for 36
Workplace App settings (parking booking, parking requests, lockers, explore
legend, directory and app shell), one setting per spec, 71 scenarios.

Each scenario applies the setting through the existing browser override
(PLACEOS.setting_overrides) and asserts its effect in two or more states.
A shared read-only fixture blocks every non-GET API request, verifies the
staff-only identity, intercepts WebSockets and attaches a per-test safety
audit. Backend lookups that the app would otherwise answer with a create
are served by GET-only browser fixtures.

The local project now also discovers settings/**; the mock project ignores
it. Workers and CI configuration are unchanged.

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

vercel Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
frontend-templates Ignored Ignored Preview Nov 3, 2026 7:53am UTC

@sharmilaseenivasan17
sharmilaseenivasan17 marked this pull request as draft October 20, 2026 05:23
@sharmilaseenivasan17
sharmilaseenivasan17 marked this pull request as ready for review October 20, 2026 05:25
@sharmilaseenivasan17
sharmilaseenivasan17 force-pushed the test/e2e-workplace-settings branch from a1e0dfc to 4074e93 Compare October 20, 2026 06:18

@MrYuion MrYuion left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Review of the hand-written specs, the read-only fixture and the Playwright config. There are no generated files or data fixtures. All 16k lines are spec code.

Summary

  • bun run e2e:typecheck passes. I did not run the specs, because they need the local stack.
  • The safety guard is correct. Each mutation is blocked, and I found no request to a non-local system. The config change is correct.
  • Some tests cannot fail, and some tests lock in app behaviour that is different from docs/settings/workplace.md. See the inline comments.
  • About 73% of the non-blank spec lines (11.6k of 15.9k) are lines that occur in 10 or more specs. The harness is copied into each file, with 9 different variants. noUnusedLocals finds about 190 unused declarations, for example dayEnabled, timezoneBuildings, scheduleCard and pickDay.
  • The PR description is out of date. It says 36 settings and 71 scenarios, and that landing is not included. The branch now has 54 specs, and these include 6 landing specs and desk, room and schedule specs. Please update the description.

Review by Claude Opus 5.5 in Claude Code.

@vercel

vercel Bot commented Oct 21, 2026

Copy link
Copy Markdown

Deployment failed for project frontend-templates with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/placeos?upgradeToPro=build-rate-limit

@MrYuion MrYuion left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Follow-up review of the 7 commits after 6709a90 (422a433..13d4492). These commits add 63 specs (desk, room, bookings, visitor invite and general) and remove some draft headers.

Checks

  • bun run e2e:typecheck passes. oxlint has 0 errors. The new files have 295 no-unused-vars and 108 no-conditional-expect warnings. I did not run the specs, because no local stack was available.
  • Safety guard: OK. All 63 new specs use readOnlyTest and assertLocalOnly. The page routes that call route.fetch() or route.continue() accept only GET requests to the local origins. Other requests fall back to the context guard. The extra contexts in general.banner install the same guard before they open a page. Each test gets a new browser context, so setting overrides do not leak between tests.
  • Vercel failure on 4cdbd60: this PR did not cause it. The error is api-deployments-free-per-day, the daily deployment quota for the team account. The build did not start. The Ignored Build Step skipped all the other commits, and the head commit is green. No change is necessary.

Earlier findings

  1. Copied harness: not fixed, and now larger. The getOnly/prepare harness is copied into 90 specs (54 before). noUnusedLocals finds 237 unused declarations in the new files alone.
  2. Draft headers and names: partly fixed. The "CLAUDE OWNED DRAFT" and "DRAFT / NOT EXECUTED" lines are gone from the old specs. But 39 specs still have "Migrated unchanged from …" headers, WPA next20/next25 DRAFT names or DRAFT_SETTING_KEYS. These include the new bookings and visitor-invite specs. New test names use remaining draft: and prepared …:. general.features.spec.ts:1 says "NOT RUN — awaiting manual validation". Please say which of the new specs ran against a local stack.
  3. general.default-route cannot fail: not fixed.
  4. general.css-variables cannot fail: not fixed.
  5. parking.allow_all_day locks in the || getter: not fixed. The same problem is now in a desk spec (see the new findings).
  6. lockers.use_building_timezone has no lockers: false, bookings: true case: not fixed.
  7. lockers.disabled_date_select asserts a side effect: not fixed.
  8. lockers.allow_time_changes does not check the time fields: not fixed.
  9. desk-booking.hide-checkin does not set app.desks.auto_checkin: not fixed.
  10. parking-booking.bookable-hours dayCell fails on some dates: not fixed. The new specs use pickCalendarDay, which moves to the correct month, so they do not have this problem.
  • The PR title and description still say 36 settings and 71 scenarios. The branch now has 116 settings specs. Please update them.

New findings (inline)

  • Bug: desk-booking.available-period clicks the month button that goes back, so it fails in the last week of each month.
  • Bug: room-booking.allowed-future-days fails near the end of each month.
  • Improvement: the desk duration specs and bookings.duration-bounds have identical cases, and some cases use the default value, so they cannot fail.
  • Improvement: room and desk bookable_hours accept a start time at closing time. No duration is possible at that time.
  • Improvement: desk-booking.allow-time-changes locks in behaviour that is different from the docs, and its true case is the same as in allow-all-day.
  • Improvement: bookings.allow-all-day locks in desks || bookings, but the docs say that desks.* overrides.
  • Improvement: general.basic-user-search repeats a landing scenario.
  • Improvement: general.use-geolocation does not test "nearest".
  • Nits: an assertion that is always true, a selector, a docs mismatch, a missing banner case and a rare clock-dependent failure.

Reviewed by Claude Opus 5.5 in Claude Code.

events.no_standalone: 1 scenario, 1 PASS
hide_landing_customise: 2 scenarios, 2 PASS
hide_landing_widgets: 2 scenarios, 2 PASS
explore.colors: 2 scenarios, 2 PASS

Total: 4 unique settings, 7 scenarios, 7 locally verified PASS.
desk-free remains an unresolved product defect.
…arios)

Verified locally: 19/19 PASS across 10 unique Settings.

virtual-concierge: 5 Settings, 9 scenarios PASS
parking-request.form-details: 3 Settings, 6 scenarios PASS
parking-request.location-preference: 2 Settings, 4 scenarios PASS
Fresh local Playwright execution: 30/30 PASS.

Coverage by area:
- Desk booking height: 1 setting, 2 scenarios
- Explore map overlays: 4 settings, 8 scenarios
- General default building: 1 setting, 2 scenarios
- General help menu: 1 setting, 2 scenarios
- Landing feature groups: 1 setting, 2 scenarios
- General dark CSS variables: 1 setting, 2 scenarios
- General support ticket: 2 settings, 3 scenarios
- Lockers available period: 1 setting, 2 scenarios
- Visitor bookable hours: 1 setting, 1 scenario
- Visitor duration options: 4 settings, 4 scenarios
- Visitor building timezone: 1 setting, 2 scenarios

TOTAL: 18 UNIQUE SETTINGS | 30 SCENARIOS | 30 PASS
Execution: local project, 1 worker, 0 retries.
No product or shared framework changes.

@MrYuion MrYuion left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Follow-up review of the 6 commits after 13d4492 (d36d8a7..0659d70). These commits add 20 specs. They do not change files from the earlier reviews.

Checks

  • bun run e2e:typecheck passes. oxlint on the new files: 0 errors, 9 no-conditional-expect warnings (all in the copied audit fixtures). I did not run the specs, because they need the local stack (mock ignores settings/**).
  • Safety guard: OK. All 20 new specs use readOnlyTest and assertLocalOnly. The one route.fetch() (visitor-invite.building-timezone) accepts only GET to the local origins.

Earlier findings
All earlier points are still open. The new commits do not touch those files.

  1. Copied harness: not fixed, and larger. A copied audit fixture is now in 132 of 136 specs.
  2. Draft headers: not fixed. The new headers add run logs that will go out of date ("PASS, as reported by the user", "2026-10-22 15:26 run", "Phase 2 migration", "Scenario owners: S45, S46"). room-booking.booking-unavailable.spec.ts:4 refers to reports/wpa-settings-reference/…json, which is not in the repo.
    3–10. general.default-route, general.css-variables, parking.allow_all_day, lockers.use_building_timezone, lockers.disabled_date_select, lockers.allow_time_changes, desk-booking.hide-checkin, parking-booking.bookable-hours dayCell: not fixed. The copied dayCell is also in the new lockers.available-period.
  3. Second-review findings (desk available-period and room allowed-future-days month-end bugs, duplicate duration cases, closing-hour start, || getters, and the nits): not fixed.
  • The PR title and description still say 36 settings and 71 scenarios, and "one setting per spec". The branch now has 136 settings specs, and several new specs cover 2–5 settings. Please update them.

New findings (inline)

  • Bug (app): selecting None after Daily triggers the daily all-day recurrence error. No case covers it.
  • Cannot fail: lockers.available_period 10, default_building A.
  • Documented effect not tested: hide_landing_customise (saved layout), hide_landing_widgets ("cannot add"), feature_groups (member case), parking.hidden_buildings (active building fallback), virtual_concierge.side (position), css_variables_dark (variable name, light theme).
  • Depends on stack data: visitor duration fallbacks and building timezone.
  • parking.can_book_for_anyone false does not test the documented override.
  • Nits: help icon shape, wrong docs line numbers.

Claude Opus 5.5 in Claude Code (T3 Code) wrote this review.

camreeves and others added 9 commits October 30, 2026 19:16
The counts were from before the review fixes: 430 scenarios with 13
not yet run, headings that disagreed with --list in seven areas, and
rows naming explore.show-legend and
room-booking.allow-multiple-spaces-legacy, which the fixes merged into
explore.legend and room-booking.multiple-spaces.

Every heading and row now matches --list (407 settings and 36
settings-browser tests in 187 files), lockers.use_building_timezone is
listed as tested now that it has a case, and the statuses come from a
full run of both projects on 30 Oct. The run instructions cover both
projects, their --list counts, running one spec, re-running a load
timeout alone and E2E_WEBSERVER_TIMEOUT_MS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015VtrxAzu8XnqXeQG3QbRXt
The apps animate a full-page gradient on html and body until 3 s after
the loading screen hides. Headless Chromium rasterises each frame in
software: about 5 CPU-s per page load (6.3 s -> 1.0 s when paused). On
the CPU-bound self-hosted runner that is most of the e2e run time.

pauseBackground() pauses only that animation, which is how the page
looks once the app has settled. The context fixtures and every manual
browser.newContext() in the Workplace specs call it.
…ting

Three settings specs acted on the page before Angular had rendered the
state they depended on. A faster page made them fail more often:

- dayCell read a cell of the previous month: the calendar component
  moves to a new grid before the page renders it. It now waits until
  the rendered day numbers match displayed_dates().
- The locker drawer looked open for a moment after the modal opened,
  so the spec skipped the toggle. At 600 px it starts closed, so the
  spec now always opens it.
- The colleague search was filled before the modal's first change
  detection, whose ngOnInit then cleared it. The specs now wait for
  ng-pristine, which that pass sets.
With the animated page background paused, the browsers no longer use
all of the runner's CPU, so two more workers can run. Locally six
workers keep the suite isolated (same results as four) and cut the
wall time from 12.2 to 7.7 minutes.
MOCK_EVENTS is built when the module loads, which the dev build does on
every page load, mock mode or not. Its duplicate removal searched the
whole list for each event. A set gives the same events in the same order
and cuts about 250 ms of script time from each load.
…specs

The app can still have requests in flight when a test ends. A body read
or a route.fetch() then fails with "Target page, context or browser has
been closed", which failed tests on their first attempt on the busy CI
runner. teardown.ts tells those errors apart: the settings audits drop
the ones recorded after their teardown starts, the read-only fixture
skips identity bodies that were cut off, and the handlers that flaked
are wrapped in ignoreClosed.

Reviewed with sol-loop: 1 round with gpt-6.1-sol. Sol verdict: approved
Run 41193893174 ran both Workplace test steps in 19.1 minutes on six
workers (local+mock 7.4, settings 11.7), against 23.3 minutes on four.
The docs said four workers used all the CPU and six were no faster;
that was true before the specs paused the animated page background.
Diagnostic-only change affecting 8 existing unique Settings and 16 existing scenarios across 6 Explore specs. Adds 0 unique Settings and 0 scenarios.

Verified e2e:typecheck and all 16 affected browser-only scenarios with retries disabled. Preserves protocol validation, binding state and strict teardown.
@sharmilaseenivasan17

Copy link
Copy Markdown
Contributor Author

Hi Cam,

I've pushed the approved control WebSocket diagnostic improvement to PR #595.

Commit: 878f931

Investigation findings:

  • The intermittent failure occurred in explore.show_zone_labels=false during the shared WebSocket mock's strict teardown audit.
  • The original failed attempt recorded two control socket connections, while the passing retry recorded one.
  • The failed attempt showed successful binds and unbinds, along with a generic unexpected control frame/binding/command refusal.
  • We couldn't identify the exact rejected request or establish why the additional connection occurred.

What changed:

  • Updated controlSocket() to report a specific rejection reason and connection number instead of the generic refusal message.
  • Preserved the existing validation rules, binding behaviour, protocol messages, assertions and strict teardown.
  • No product-code changes or test-coverage additions were made.

Verification completed in an isolated checkout:

  • E2E typecheck passed.
  • 19 protocol simulations passed.
  • 180 repeated polygon test executions passed.
  • 16 shared-consumer regression executions passed.
  • Complete settings-browser suite passed (36 tests).
  • All 239 browser executions passed with retries disabled.

Remaining limitation:
The original intermittent failure did not reproduce during verification, so its root cause is still unconfirmed. This change improves diagnostics rather than fixing a proven underlying defect. If the failure recurs, the audit should identify the rejection condition and connection so we can investigate a targeted fix.

The change has been pushed to PR #595. CI verification for the new commit is still pending.

Could you please review the change? Thanks!

… 36 existing scenarios; 0 new Settings, 0 new scenarios)

@camreeves camreeves left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed against current develop on 3 Nov. The issues found are fixed in 07dcd27; the comment below has the details.

Brings in #654 (PPT-2872), #655 (PPT-2871) and the desk asset changes
from #656, which the settings specs are updated for next.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015VtrxAzu8XnqXeQG3QbRXt
@camreeves camreeves changed the title test(e2e): add Workplace App settings coverage (36 settings, 71 scenarios) test(e2e): add Workplace App settings coverage (215 settings, 443 scenarios) Nov 3, 2026
…asset fixes

- desks and events bookable_hours: the last start now leaves room for the
  shortest duration (PPT-2872, #654). The closing-time case asserts no start
  is offered at closing time, and the specs pin min_duration so the expected
  last start doesn't depend on the stack's settings.
- parking use_building_timezone: drop test.fail now that an explicit parking
  false overrides bookings (PPT-2871, #655).
- desks.use_assets: the assets fixture also answers the building-wide
  `zones=<building>` query the desk list sends since #656.
- QA status doc updated to match.

Full settings and settings-browser run with develop merged in: 443 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015VtrxAzu8XnqXeQG3QbRXt
@camreeves

camreeves commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Hi Sharmila, I've made the changes from my review on this branch, so there's nothing you need to do for them.

Pushed (fast-forward on top of your HMR commit a5a7651):

I also updated the title to 215 settings and 443 scenarios, the numbers in your QA status doc.

Local run with develop merged in, 4 workers, no retries: settings plus settings-browser, 443 passed, 0 failed (5.9 min).

CI trial: all green.

Job Run Passed Flaky Failed Test time
local (the pre-PR suite) 41559638200 on 07dcd27 211 2 0 11.2 min
settings same run 404 5 0 12.5 min
settings-browser 41562992865 on 53e1b5c 36 0 0 1.3 min

The flaky tests all passed on retry. In settings they were landing.hide-colleagues, room-booking.allow-daily-allday-recurrence, schedule.auto-release (all_day_start) and the two visitor-invite.building-timezone cases. In local they were DESK-GROUP-02 and parking-levels, both on develop already.

The browser-only job first failed before running anything: GitHub's ubuntu-latest is now Ubuntu 26.04, and the pinned Playwright can't install Chromium there. 53e1b5c pins that job to ubuntu-24.04. I cancelled the rest of that second run because its main job would only have repeated the first.

camreeves and others added 5 commits November 3, 2026 12:57
ubuntu-latest is now Ubuntu 26.04, and the pinned Playwright fails to
install Chromium there ("Playwright does not support chromium on
ubuntu26.04-x64"), so the job failed before running a test in trial
41559638200.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015VtrxAzu8XnqXeQG3QbRXt
…cs by suffix

- browserOnlyTest drops closed-target errors from route handlers during
  teardown and bounds the pending-task drain to 10 s.
- protectNetwork ignores closed-target errors on socket close.
- Socket, console and redaction checks use the shared harness helpers.
- BROWSER_APP reads APP_URL.
- readOnlyTest loads the staff storage state file directly, so each test
  opens one context instead of two.
- Browser-only settings specs end in .browser.spec.ts; the config matches
  the suffix instead of a hand-kept list.
- e2e-advisory job timeout covers the settings step's own 60 minutes.
Format only. The parsed syntax trees are the same before and after.
Coverage: 1 unique Setting (app.show_presence_indicators), 2 existing scenarios, 0 new scenarios. Verified on 2db5cef with --retries=0: this spec 20/20 (--repeat-each=10), settings-browser 36/36. No product, harness or config changes.
…ookings (PPT-2871)

Coverage: 0 new unique Settings, 2 new scenarios (desks false over bookings true; lockers false over bookings true). Totals: 187 specs, 215 Settings, 445 scenarios. Updates the stale bookings || lockers comment in the locker spec. Verified on 2db5cef against the local e2e stack: 35/35 over 5 repeats, 0 retries.
@sharmilaseenivasan17

Copy link
Copy Markdown
Contributor Author

Update: 3 commits pushed today (3 Nov)

All three change test code or the Playwright config only -- no shared harness changes. Each was verified locally with --retries=0 before pushing.


1. a5a765123: disable Workplace HMR for the e2e dev server

Issue: Browser-only settings specs failed intermittently in CI with ECONNRESET on asset requests, then passed on retry.

Root cause: The e2e web server ran nx serve workplace with HMR on. With HMR, every compiled component imports /@ng/component?c=…&t=… when it loads: 96 of the 159 asset requests on each browser-only meeting page. The browser-only harness proxies frontend assets through route.fetch(). Under load, some of these requests were reset, and the strict harness then failed the test. The app never receives HMR updates during e2e runs, so the extra requests had no purpose.

Fix: apps/workplace/playwright.config.ts: the web server command is now bunx nx serve workplace --port=${PORT} --hmr=false (1 file, +5/−1, with a comment explaining why).

Verification: Browser-only verification run with HMR off: 286/286 passed, 0 retries, 0 HMR requests.

Coverage: 18 unique Settings, 36 existing scenarios; 0 new Settings, 0 new scenarios.


2. 345aeb728: move show_presence_indicators onto the browser-only harness

Issue: Review point B6 (shared browser-only fixture). explore.show-presence-indicators.browser.spec.ts was the last of the 16 browser-only specs still on its own self-contained copy of the route handling, WebSocket handling and safety audit (629 lines), rather than the shared harness.

Root cause: The spec was written before browserOnlyTest, controlSocket, browserSignIn and syntheticOrgGets existed in settings-harness.ts, and wasn't migrated with the other 15.

Fix: The spec now uses the shared fixtures (629 → 316 lines; 1 file, +112/−424):

  • browserOnlyTest with the shared strict teardown: refused, errors and monitoring must be empty.
  • controlSocket with an exact allowlist: the room's 5 variables on Bookings index 1, with the bearer checked on the socket query.
  • browserSignIn with fakeBearer('presence'), which gives the same value as the old local constant.
  • syntheticOrgGets for the GET fixtures.

Both scenarios and all their assertions are unchanged:

  • the effective setting;
  • presence sent before status on every connection;
  • the busy-fill readiness wait;
  • the exact presence icon state;
  • the rendered icon count.

Verification (on 2db5cef6a): this spec 20/20 (--repeat-each=10); the whole settings-browser project 36/36.

Coverage: 1 unique Setting (app.show_presence_indicators), 2 existing scenarios, 0 new scenarios.


3. 2e9a3f467: desk and locker use_building_timezone override cases (PPT-2871)

Issue: Review point 1 / thread r4329764586. With PPT-2871 fixed, an explicit false for desks or lockers should override bookings.use_building_timezone: true, but neither spec covered that case. The locker spec's comment also still described the old bookings || lockers getter.

Root cause: The app fix (ece1974) changed both getters to X ?? bookings:

  • desk-flow-details.component.ts L483–487;
  • locker-form-details.component.ts L256–257.

The specs weren't updated with a case that tells ?? and || apart. The desk spec always set bookings to false.

Fix (2 files, +85/−9):

  • desk-booking.use-building-timezone.spec.ts: new test, "desks.use_building_timezone false overrides bookings.use_building_timezone true and hides the duration secondary time line". It checks the effective settings (bookings true, desks false) and that the duration field's bound timezone is '' before asserting there's no secondary line. The 2 existing tests are unchanged.
  • lockers.use-building-timezone.spec.ts: new scenario, "lockers.use_building_timezone false overrides bookings.use_building_timezone true and hides the locker building-time label". The comment now says lockers ?? bookings (PPT-2871). Every scenario now also checks the effective settings and the start time-field's bound timezone before counting the label, so a hidden label is proven rather than inferred from waiting. The 3 existing test titles are unchanged.

Verification (on 2db5cef6a, against the local e2e stack): 35/35 passed over 5 repeats (desk 3 + locker 4), 0 retries.

Coverage: 0 new unique Settings, 2 new scenarios. **New totals: 187 specs / 215 Settings / 445 scenarios

@sharmilaseenivasan17 sharmilaseenivasan17 changed the title test(e2e): add Workplace App settings coverage (215 settings, 443 scenarios) test(e2e): add Workplace App settings coverage (215 settings, 445 scenarios) Nov 3, 2026
…scenarios)

Coverage: 0 new unique Settings, 2 new scenarios (desk-booking 60 → 61, lockers 23 → 24). Totals: 187 specs, 215 Settings, 445 scenarios; settings project 407 → 409. Adds the 3 Nov evidence for 2e9a3f4 (35/35, 5 repeats, 0 retries). No code changes.
@camreeves

Copy link
Copy Markdown
Contributor

Status on 3 Nov (evening):

  • Alex is happy for this to merge, and all review threads are resolved.
  • I checked Sharmila's latest commits locally on 3480ebc74a:
    • e2e:typecheck is clean.
    • --list gives 409 settings tests and 36 browser-only tests, 445 in total.
    • The changed specs (the desk and locker timezone overrides and the presence indicators) passed 29/29, each run 3 times.
  • CI trial on 3480ebc74a: run 41616212507. It's queued behind develop's own e2e run. Once it's green I'll merge this with a merge commit, so everyone's commits stay in develop's history.
  • The visitor timezone question is fixed in fix(bookings): visitor timezone setting overrides the bookings setting #665. The visitor forms now read visitors ?? bookings, the same as desks, parking and lockers. fix(bookings): visitor timezone setting overrides the bookings setting #665 also changes bookings.use-building-timezone.spec.ts here (4 cases, including the override), so it's based on this branch and will move to develop once this merges.

@camreeves
camreeves merged commit 64d9a1d into develop Nov 3, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants