Skip to content

ATS-PFM-QRY-002Answer a question within the reader’s access: Capability Test Specification

Markdown

ATS-PFM-QRY-002

Answer a question within the reader’s access: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaPlatformModuleQuestions, record exploration and data deliveryRevision2

Read atservices-platform ad3f6a65react-console baf6dae3rhythm-v2-docs 99376625

Coverage

  • Rule covered
  • Transition not-applicable
  • Validation covered
  • Permission covered
  • Edge covered
  • Failure covered
  • Boundary covered
  • Concurrency gap: FND-PFM-QRY-052
  • Invariant covered
  • Interaction covered

Test Scenarios

19 scenarios proving CAP-PFM-QRY-002; 15 bound to an existing test.

01 Database confinement survives missing predicatesinvariantapitest
Proves
BR-CAP-PFM-QRY-002-01 INV-DOM-PFM-QRY-001-02
Preconditions
Separate workspaces contain records with matching identities.
Steps
Execute related-record queries in both and an unpredicated reader statement.
Expected
Each execution remains within its workspace, including the database-only confinement case.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#answers no row, pick or joined value belonging to another tenant, though the ids are the same
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#confines a statement carrying no tenant predicate at all, so row-level security holds beneath the compiler
Source
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#answers no row, pick or joined value belonging to another tenant, though the ids are the same
02 Reader execution refuses writes and bounds failurefailureapinegativetest
Proves
BR-CAP-PFM-QRY-002-02
Preconditions
A query reader session is available.
Steps
Attempt a write, exceed its time limit and provoke another database failure.
Expected
Writes fail; timeouts are actionable; other failure output and logs omit statements and values.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/read-only-execution.integration.spec.js#refuses a write, whatever the statement carries, because the transaction is read-only
services-platform:modules/queries/tests/integration/services/execute/read-only-execution.integration.spec.js#stops a statement that outlasts the statement timeout, and lets a quick one through under the same timeout
services-platform:modules/queries/tests/integration/services/execute/read-only-execution.integration.spec.js#answers a timeout as a request limit the caller can act on, naming no SQL
services-platform:modules/queries/tests/integration/services/execute/read-only-execution.integration.spec.js#answers any other failure with a generic server error, never the statement, its tables or a criterion value, and logs neither
Source
services-platform:modules/queries/tests/integration/services/execute/read-only-execution.integration.spec.js#refuses a write, whatever the statement carries, because the transaction is read-only
03 Invalid metadata does not disclose hidden fieldsvalidationapinegativetest
Proves
BR-CAP-PFM-QRY-002-03
Preconditions
Contacts has both an unregistered and a nonexistent field name.
Steps
Query each field and an unsupported operator.
Expected
Field refusals have equivalent wording and operator errors identify the invalid use.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a column no owner registered exactly as it refuses one that does not exist at all
Source
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a column no owner registered exactly as it refuses one that does not exist at all
04 Malformed values fail before matchingvalidationapinegativetest
Proves
BR-CAP-PFM-QRY-002-04
Preconditions
The contact dataset is accessible.
Steps
Submit blank text, empty identity lists, fractional integers, unsafe numbers and malformed dates.
Expected
Every invalid criterion is refused with 400.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a blank text value, which would match every contact rather than narrow anything
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses an empty list of ids, which would exclude or admit every contact
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a whole number JavaScript cannot hold exactly, rather than comparing a rounded one
Source
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a blank text value, which would match every contact rather than narrow anything
05 Cursors retain their original questionvalidationapinegativetest
Proves
BR-CAP-PFM-QRY-002-05
Preconditions
An ordered result spans multiple pages.
Steps
Page normally, then submit foreign, malformed and wrong-key-count cursors.
Expected
Valid pages follow the ordered result; invalid cursors are rejected.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#pages a text sort ascending exactly as the unpaged query ordered it, ties included
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a cursor issued for a different query, rather than paging the wrong rows
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a cursor that is not a cursor at all, rather than reading it as a page of nothing
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a cursor of this query carrying the wrong number of keys, which could not place a row in the order
Source
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#pages a text sort ascending exactly as the unpaged query ordered it, ties included
06 Totals ignore cursor narrowing and join multiplicationruleapitest
Proves
BR-CAP-PFM-QRY-002-06
Preconditions
Fixtures span pages and include records with absent related records.
Steps
Request totals across pages, grouped and joined queries, then omit totals.
Expected
Counts remain complete for the requested grain and disappear when unrequested.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/query-totals.integration.spec.js#answers the same total on a page read with a cursor as on the first, the cursor narrowing nothing
services-platform:modules/queries/tests/integration/services/execute/query-totals.integration.spec.js#carries no total property, rather than a null one, when none was asked for
Source
services-platform:modules/queries/tests/integration/services/execute/query-totals.integration.spec.js#answers the same total on a page read with a cursor as on the first, the cursor narrowing nothing
07 Recent views remain personal and localedgeapinegativetest
Proves
BR-CAP-PFM-QRY-002-07
Preconditions
Two people and two workspaces have different view histories.
Steps
Execute Recently Viewed under each identity and under a system context.
Expected
Each person receives their own deduplicated latest views; the system context is refused.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/recently-viewed-scope.integration.spec.js#answers each caller the records that caller viewed, and no other caller’s
services-platform:modules/queries/tests/integration/services/execute/recently-viewed-scope.integration.spec.js#answers one row per record however many times it was viewed, the latest view being the one it carries
services-platform:modules/queries/tests/integration/services/execute/recently-viewed-scope.integration.spec.js#answers, in another tenant, that tenant’s own record of the same id, never the one I viewed here
services-platform:modules/queries/tests/integration/services/execute/recently-viewed-scope.integration.spec.js#refuses an execution the macroservice itself makes, which is nobody in particular
Source
services-platform:modules/queries/tests/integration/services/execute/recently-viewed-scope.integration.spec.js#answers each caller the records that caller viewed, and no other caller’s
08 Personal criteria require meaningful identitiespermissionapinegativetest
Proves
BR-CAP-PFM-QRY-002-08
Preconditions
Two users own different tasks and another field holds no user identity.
Steps
Evaluate the current-person value for each user and under invalid fields, operators or a system context.
Expected
Users receive their own tasks; the invalid uses are refused.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/current-user-criterion.integration.spec.js#refuses the token on a field whose owner does not say it holds a user, naming the field
services-platform:modules/queries/tests/integration/services/execute/current-user-criterion.integration.spec.js#refuses the token under an operator that compares no user, naming the operator
services-platform:modules/queries/tests/integration/services/execute/current-user-criterion.integration.spec.js#refuses an execution that is nobody in particular, rather than answering it nothing
Source
services-platform:modules/queries/tests/integration/services/execute/current-user-criterion.integration.spec.js#answers the caller their own tasks, with their own id in the row
09 Validation reports run-time tokens without executionvalidationapinegativetest
Proves
BR-CAP-PFM-QRY-002-09
Preconditions
An unsaved definition contains a requested-at-run value.
Steps
Submit the definition for validation.
Expected
The response is successful but invalid, locating the value problem without running the query.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/e2e/saved-queries.e2e.spec.js#refuses a token sent to the validate route, which judges a request on its own
Source
services-platform:modules/queries/tests/e2e/saved-queries.e2e.spec.js#refuses a token sent to the validate route, which judges a request on its own
10 Date matching uses the workspace calendarboundaryapitest
Proves
BR-CAP-PFM-QRY-002-10
Preconditions
The workspace time zone differs substantially from UTC.
Steps
Query a day, a preceding-day boundary and a relative range, then preview dates.
Expected
Matching and previews follow the workspace zone rather than caller preferences.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/e2e/date-expressions.e2e.spec.js#answers the zone of the tenant in the path, not of the one the caller happens to prefer
Source
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#reads a day as that day in the tenant's zone, not in UTC
11 Validation supplies repair locationsvalidationapinegativetest
Proves
BR-CAP-PFM-QRY-002-11
Preconditions
A definition contains an unsupported field or criterion.
Steps
Request validation of the definition.
Expected
A successful validation response lists located problems and executes no question.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/e2e/saved-queries.e2e.spec.js#answers 200 and the problems for a query it will not run, rather than a refusal
services-platform:modules/queries/tests/e2e/saved-queries.e2e.spec.js#names the control the person used for a criterion the dataset will not accept
Source
services-platform:modules/queries/tests/e2e/saved-queries.e2e.spec.js#answers 200 and the problems for a query it will not run, rather than a refusal
12 Result links refer to represented recordsruleapinegativetest
Proves
BR-CAP-PFM-QRY-002-12
Preconditions
A contact question selects its number and name.
Steps
Execute it, then request an opening override for an absent record slot.
Expected
The result supplies record identities; the invalid override returns 400.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/e2e/datasets.e2e.spec.js#names the record the number and the name open, and the id of each row’s, beside the rows
services-platform:modules/queries/tests/e2e/datasets.e2e.spec.js#refuses a link override naming a record the result does not have as 400 QueryLinkInvalid
Source
services-platform:modules/queries/tests/e2e/datasets.e2e.spec.js#names the record the number and the name open, and the id of each row’s, beside the rows
13 Reference display and identity remain separateedgeapitest
Proves
BR-CAP-PFM-QRY-002-13
Preconditions
Contacts include named, nameless and absent spouse references.
Steps
Select spouse display values and an explicit spouse identity column.
Expected
Display uses names, identity fallback or null, with selected identities in their separate column.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/reference-display-values.integration.spec.js#shows each spouse’s name, the id as text where the spouse has no name, and null where there is no spouse
Source
services-platform:modules/queries/tests/integration/services/execute/reference-display-values.integration.spec.js#shows each spouse’s name, the id as text where the spouse has no name, and null where there is no spouse
14 Reference traversal rejects another hopboundaryapinegativetest
Proves
BR-CAP-PFM-QRY-002-14
Preconditions
Contacts refer to organizations with their own parent reference.
Steps
Read the employer name and then traverse through that employer’s reference.
Expected
The first read works and the second is refused.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a second hop through the referenced record's own reference
Source
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a second hop through the referenced record's own reference
15 Published bounds need explicit refusal proofboundaryapinegativeproposed
Proves
BR-CAP-PFM-QRY-002-15
Preconditions
An accessible contact dataset is available.
Steps
Try 256 fields, six sorts, depth seven, three hops and a 1,001-row page, plus boundary-valid controls.
Expected
The proposed proof requires located bound refusals and valid boundary execution; implementation alignment remains open.
Data
Prepare isolated fixtures for the states described here.
Source
services-platform:docs/queries/semantic-query-layer.md#10.6 Complexity limits (first release)
16 Group calculations retain values and typesruleapitest
Proves
BR-CAP-PFM-QRY-002-16
Preconditions
Three contacts share a group and have known number, date and custom-field values.
Steps
Run a grouped query with sum, average, minimum and maximum columns, including an entirely absent field.
Expected
The group returns the calculated values and column types; the absent field’s aggregate is null.
Data
Use the grouped-calculation suite’s contact and metadata fixtures.
Bound to
services-platform:modules/queries/tests/integration/services/execute/query-aggregates.integration.spec.js#answers one group for the three contacts, every aggregate computed over exactly those rows
services-platform:modules/queries/tests/integration/services/execute/query-aggregates.integration.spec.js#answers null for an aggregate of a field no row in the group has a value for
services-platform:modules/queries/tests/integration/services/execute/query-aggregates.integration.spec.js#describes each aggregate column with the label the console shows by default and the type its result has
Source
services-platform:modules/queries/tests/integration/services/execute/query-aggregates.integration.spec.js#answers one group for the three contacts, every aggregate computed over exactly those rows
17 A discovery suggestion does not hide inactive recordsinteractionapiproposed
Proves
BR-CAP-PFM-QRY-001-08 BR-CAP-PFM-QRY-002-01
Preconditions
Contacts includes active and inactive records; the description suggests active records.
Steps
Read the description, then run an unfiltered contact question and a question selecting inactive records.
Expected
The first answer contains both statuses and the second contains only the inactive fixture.
Data
Use an isolated workspace with the described source records, access grants and a surviving control workspace.
Source
services-platform:modules/queries/tests/e2e/datasets.e2e.spec.js#refuses a dataset the caller holds no query permission for as 403,services-platform:modules/queries/tests/integration/services/execute/current-user-criterion.integration.spec.js#answers a second caller their own tasks, from the very same criterion
18 Invalid questions never enter the reusable libraryinteractionapiproposed
Proves
BR-CAP-PFM-QRY-002-11 BR-CAP-PFM-QRY-006-10
Preconditions
A contact draft selects a field not offered by its description.
Steps
Validate the draft and attempt to save the same definition.
Expected
Validation locates the bad selection and the save creates no library entry.
Data
Use an isolated workspace with the described source records, access grants and a surviving control workspace.
Source
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#refuses a column no owner registered exactly as it refuses one that does not exist at all,services-platform:modules/queries/tests/e2e/saved-queries.e2e.spec.js#refuses a body whose definition cannot be run as written as 400
19 A file contains the ordered answer beyond the first pageinteractionapiproposed
Proves
BR-CAP-PFM-QRY-002-01 BR-CAP-PFM-QRY-014-03
Preconditions
A contact question spans more than one page, with duplicate sort values and a foreign workspace control.
Steps
Run the first page and export the same on-screen definition.
Expected
The file matches the complete ordered local answer; later pages occur once and foreign records never appear.
Data
Use an isolated workspace with the described source records, access grants and a surviving control workspace.
Source
services-platform:modules/queries/tests/integration/services/execute/run-query.integration.spec.js#confines a statement carrying no tenant predicate at all, so row-level security holds beneath the compiler,services-platform:modules/queries/tests/integration/services/exports/run-query-export.integration.spec.js#writes every planted row exactly once, in the query’s sort, with no gap

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.