Skip to content

Dashboard: all four stats-block KPI widgets render "Widget unavailable" placeholders #19

Description

@rubenvdlinde

Product bug — surfaced by enabling e2e (#17)

The petstore Dashboard renders four stats-block KPI widgets as the "Widget unavailable" placeholder instead of the KPIs. Nothing currently fails when this happens.

Evidence

Accessibility-tree snapshot captured from the page at failure time in a real CI run (NC stable31, run 30858571784), playwright-report/data/*.md:

- main:
  - heading "Dashboard" [level=2]
  - paragraph: Daily overview of pets, orders and categories
  - note "This widget is unavailable": Widget unavailable stats-block
  - note "This widget is unavailable": Widget unavailable stats-block
  - note "This widget is unavailable": Widget unavailable stats-block
  - note "This widget is unavailable": Widget unavailable stats-block

The page shell, the in-app navigation and the app-content region all render correctly — only the widgets fail to resolve. src/manifest.json declares these at lines 79, 110, 140 and 170 with "widgetKey": "stats-block".

Why no test caught it

This is the failure mode worth noting. dashboard.spec.ts asserts:

  • that the in-app navigation renders its route links, and
  • that the app-content region toBeAttached()

Both are true on a dashboard whose every widget is a placeholder. The spec's own comment explains the reasoning — widget bodies are data-driven and render empty when unseeded, so seed-dependent widget copy was deliberately not asserted. That is a defensible call, but the consequence is that "the widget did not resolve at all" and "the widget resolved and had no data" are indistinguishable to the suite. A widget that fails to resolve is a different defect from a widget with nothing to show, and the dashboard currently cannot tell you which one you have.

Compare nextcloud-app-template, whose app-shell.spec.ts:68 asserts exactly this: "no built-in widget resolves to the 'Widget unavailable' placeholder". petstore has no equivalent.

Suggested work

  1. Diagnose why the built-in stats-block widget does not resolve on the Dashboard. stats-block is a built-in (per ADR-049 it needs no registry entry and no Vue file), so this is resolution in the manifest shell, not a missing src/registry.js entry. Note the same stats-block type is also used on the pet-detail (pet-stats) and category-detail (category-stats-*) pages — check whether those resolve, since a working instance elsewhere localises the fault.
  2. Add a spec asserting no built-in widget resolves to the placeholder, mirroring app-template's :68. That closes the gap that let four dead widgets ship green.

Scope note

Found while landing the e2e gate in #17 and filed rather than fixed there — #17 is scoped to making the gate honest, and this needs a manifest-shell diagnosis of its own. It is a genuine product defect, not a test-harness artefact.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions