---
id: TST-PFM-QRY-208
title: Platform explorer navigation 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-navigation-api.e2e.spec.js
implements:
  - ATS-PFM-QRY-010-02
  - ATS-PFM-QRY-010-03
  - ATS-PFM-QRY-010-04
  - ATS-PFM-QRY-010-05
  - ATS-PFM-QRY-010-09
  - ATS-PFM-QRY-010-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-navigation-api.e2e.spec.js'
assertion_bindings:
  - scenario: ATS-PFM-QRY-010-02
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#refuses a body naming
        no record as 400
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#refuses a body naming
        no sort as 400, because an order is what a position means
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#refuses a body
        carrying columns, which a navigation never selects, as 400
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#refuses a record the
        query does not answer as 409
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#names the conflict,
        so the console can say the record left the list
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-010-03
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers the record’s
        position and the total, which is what "2 of 12" is drawn from
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers the record
        before it, for Previous
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers the record
        after it, for Next
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers nothing after
        the last record
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers no record
        data, only ids, a place and the return state
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-010-04
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers 404, not 403,
        to a colleague of the same tenant
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers 404 for a
        session id that was never frozen
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-010-05
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers no position
        for a record that is not in the frozen set, rather than refusing
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers the return
        state even for such a record, because Back To Results must still work
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers the owner
        their session after they have lost the dataset’s key, so Back To Results survives
    scope: assertions cited by the scenario
    provenance: test
  - scenario: ATS-PFM-QRY-010-09
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers every
        matching record id, in the query’s own order
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#answers that nothing
        was cut, so a console may act on the whole list
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
  - scenario: ATS-PFM-QRY-010-10
    source:
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#refuses to freeze one
        for a caller holding the surface key and not the dataset key, as 403
      - >-
        services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js#refuses a caller who
        may not query the dataset as 403
    scope: contributing assertions; the scenario combines multiple files
    provenance: test
fixture_seams:
  - 'services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js:68'
  - 'services-platform:modules/explorer/tests/e2e/explorer-navigation-api.e2e.spec.js:50'
---

# Platform explorer navigation 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 navigation 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.
