---
id: TST-PFM-QRY-210
title: Platform explorer views api
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/explorer/tests/e2e/explorer-views-api.e2e.spec.js
implements:
  - ATS-PFM-QRY-009-01
  - ATS-PFM-QRY-009-03
  - ATS-PFM-QRY-009-05
  - ATS-PFM-QRY-009-06
  - ATS-PFM-QRY-009-07
  - ATS-PFM-QRY-009-09
  - ATS-PFM-QRY-009-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/explorer/tests/e2e/explorer-views-api.e2e.spec.js'
assertion_bindings:
  - scenario: ATS-PFM-QRY-009-01
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a body naming no
        recipe as 400
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a recipe nobody
        has registered as 400
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a body whose
        dataset is not the recipe’s as 400
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#saves a body naming no
        dataset, because the recipe decides it
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-009-03
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a definition
        naming a field the dataset has not got as 400
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a joined column of
        an instance the recipe does not join as 400
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a patch that names
        a field the dataset has not got as 400
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-009-05
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#answers 404, not 403, for
        another person’s private view
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#answers a colleague a view
        shared with the tenant
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#tells a colleague they may
        not edit a shared view that is not theirs
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#leaves out another
        person’s private view
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-009-06
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses sharing a view
        without the share permission as 403
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a colleague
        replacing a shared view as 403
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#allows an administrator to
        replace a shared view they do not own
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a replacement that
        changes the dataset as 400
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#is granted the power to
        share, because that is a user-tier key
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-009-07
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a joined recipe to
        a caller who may not query a dataset it joins to, as 403
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a caller who may
        not query the dataset as 403
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a caller who may
        not query the recipe’s dataset a view they can otherwise see, as 403
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-009-09
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a team id, which
        is reserved, as 400
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-009-10
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a stale version as
        409
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#refuses a replacement that
        states no version as 400 MissingVersion, never as a server fault
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js#leaves the view unchanged
        after refusing a replacement with no version
    scope: assertions cited by the scenario
    provenance: test
fixture_seams:
  - 'services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js:91'
  - 'services-platform:modules/explorer/tests/e2e/explorer-views-api.e2e.spec.js:60'
---

# Platform explorer views api

## 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 explorer views api. 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.
