Skip to content

test(e2e): the VTODO deep link serves the shell, it no longer redirects - #3337

Merged
rubenvdlinde merged 1 commit into
developmentfrom
fix/vtodo-deep-link-no-longer-redirects
Sep 2, 2026
Merged

test(e2e): the VTODO deep link serves the shell, it no longer redirects#3337
rubenvdlinde merged 1 commit into
developmentfrom
fix/vtodo-deep-link-no-longer-redirects

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Closes #3313, which is stale in the good direction: both halves of what I filed have been fixed by other work, and what is left is a test asserting the old contract.

What changed under the issue

  • #3315 ("wire the fleet task inbox into the UI") rewrote TaskController::open() to return a TemplateResponse serving the SPA shell directly. There is no redirect any more.
  • /flow-tasks/:uuid exists, as flow-task-detail in src/main.js, described there as "the one stable address every VTODO URL and notification button carries".

So the product question the issue was holding open — where a task should open — is answered in code.

The leftover

task-projections.spec.ts still asserted the contract that went away:

expect([302, 303]).toContain(followed.status())
expect(followed.headers().location).toContain(`#/flow-tasks/${task.uuid}`)

A redirect that no longer happens, to a hash fragment that #3270 stopped resolving when the router moved off hash routing.

It survived both changes because it never runs. The block skips whenever the assignee has no VTODO-capable calendar, and CI's admin has none — No VTODO-supporting calendar found for user admin appears in the server logs. So it has been asserting a contract that stopped existing, without ever executing to say so.

That is the same shape as a skip that cannot tell "not applicable on this instance" from "this is now wrong". The skip itself is right and stays; only the assertion behind it was stale.

Now

Asserts what open() actually does: 200, and the shell rather than an API payload or an error page. Still meaningful on an instance that does have a calendar, and no longer describes a redirect that cannot occur.

Verification

eslint clean; playwright test --list collects the five tests in this file unchanged.

This block asserted 302/303 with Location containing '#/flow-tasks/<uuid>'.
Both halves are gone: #3315 rewrote TaskController::open() to return a
TemplateResponse serving the SPA shell directly, and #3270 had already moved
the router off hash routing so that fragment addressed nothing.

It survived both changes because the block SKIPS whenever the assignee has no
VTODO-capable calendar, and CI's admin has none — 'No VTODO-supporting
calendar found for user admin' shows up in the server logs. So it has been
asserting a contract that stopped existing, without ever running to say so.

Now asserts what open() actually does: 200, and the shell rather than an API
payload or an error page. Filed as #3313 on the premise that the redirect
pointed at a route that did not exist; the route (/flow-tasks/:uuid,
flow-task-detail in src/main.js) exists now and the redirect is gone, so
nothing is left to decide.
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openregister @ dabcc16

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-specs
test-l10n
test-l10n-parity
format
check-schema-l10n
check-l10n-js
composer ✅ 174/174
npm ✅ 543/543
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development
Hydra gates

Quality workflow — 2026-09-02 12:11 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 17a4478 into development Sep 2, 2026
47 checks passed
@rubenvdlinde
rubenvdlinde deleted the fix/vtodo-deep-link-no-longer-redirects branch September 2, 2026 12:11
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.

1 participant