---
id: TST-PFM-QRY-233
title: Platform reports
kind: api-lifecycle
product_area: platform
module: queries
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  rhythm-v2-docs: 99376625d3e7ac26936413cfc31a88fba6562464
repository: services-platform
files:
  - modules/queries/tests/e2e/reports.e2e.spec.js
implements:
  - ATS-PFM-QRY-006-14
  - ATS-PFM-QRY-007-05
  - ATS-PFM-QRY-011-01
  - ATS-PFM-QRY-011-04
  - ATS-PFM-QRY-011-05
  - ATS-PFM-QRY-011-08
  - ATS-PFM-QRY-011-10
  - ATS-PFM-QRY-011-11
  - ATS-PFM-QRY-012-01
  - ATS-PFM-QRY-012-02
  - ATS-PFM-QRY-012-03
  - ATS-PFM-QRY-012-04
  - ATS-PFM-QRY-012-05
  - ATS-PFM-QRY-012-06
  - ATS-PFM-QRY-012-10
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: 'The suite’s database fixtures, controlled execution contexts and file-owned external dependency seams.'
evidence:
  - 'services-platform:modules/queries/tests/e2e/reports.e2e.spec.js'
assertion_bindings:
  - scenario: ATS-PFM-QRY-006-14
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses to delete a saved query a
        report presents as 409 saved_query_reported
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses to delete a saved query one of
        its widgets draws on as 409 saved_query_reported
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-007-05
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a refinement that states what
        only the saved query decides as 400
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-011-01
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#answers a colleague’s read of a
        private report as 404, exactly as an id nobody holds
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#answers 200 with the reports the
        caller may see, never a colleague’s private one
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#answers a manager every report, a
        colleague’s private one included
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-011-04
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a report shared wider than its
        saved query as 409 ReportSharedWiderThanQuery, naming the query
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses widening a report beyond its
        saved query as 409 ReportSharedWiderThanQuery
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-011-05
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a colleague’s edit of an
        organization report as 403
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses sharing without
        platform.reports.share as 403
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-011-08
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a saved query the caller may
        not see as 400 naming saved_query_id
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-011-10
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a replacement that states no
        version as 400 MissingVersion
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a replacement at a version no
        longer in force as 409
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a delete that states no
        version as 400 MissingVersion
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-011-11
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#answers saved_query_changed once the
        saved query has been edited since the report was saved
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-012-01
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#answers 200 to a dashboard naming no
        saved query of its own
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a dashboard naming a
        saved_query_id of its own as 400
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-012-02
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#answers its sources once each, in
        widget order, with their names and applications
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#replaces its sources with the queries
        its widgets name in a PUT
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-012-03
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a widget over a saved query
        the caller may not see as 400 naming the widget at definition
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-012-04
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses a dashboard shared wider than
        one of its sources as 409, naming that source
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-012-05
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#refuses to delete a saved query one of
        its widgets draws on as 409 saved_query_reported
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-012-06
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#answers saved_query_changed once one
        of its sources has been edited, naming which
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#does not answer saved_query_changed
        after a source is only renamed, because its data did not change (DEF-RPT-0640)
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-012-10
    source:
      - >-
        services-platform:modules/queries/tests/e2e/reports.e2e.spec.js#answers the definition exactly as it
        was sent, widgets, filters and layouts untouched
    scope: assertions cited by the scenario
    provenance: test
fixture_seams:
  - 'services-platform:modules/queries/tests/e2e/reports.e2e.spec.js:65'
  - 'services-platform:modules/queries/tests/e2e/reports.e2e.spec.js:32'
---

# Platform reports

## Verification Boundary

The file dispatches requests through the real route table and signed execution contexts against its local fixtures.

## What This Suite Proves

Its assertions check reports. The assertion bindings identify the corresponding acceptance examples and retain their original test-title citations.

## What It Does Not Prove

Local execution does not establish deployed queue scheduling, every external provider response or a passing result at the pinned revision.

## Real Dependencies and Test Doubles

The integration fixture and any imported dependency seams define the environment. Database-oriented checks use PostgreSQL; file-owned transport, clock, provider or worker seams isolate the explicitly controlled boundary.

## Must Not Be Doubled

Keep the dispatcher, route requirements and the handler behavior named by the assertions real. Review any new substitutions before treating the same acceptance bindings as unchanged.
