Skip to content

ATS-PFM-QRY-016Find people and organizations while typing: Capability Test Specification

Markdown

ATS-PFM-QRY-016

Find people and organizations while typing: 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 covered
  • Validation covered
  • Permission covered
  • Edge covered
  • Failure covered
  • Boundary covered
  • Concurrency covered
  • Invariant gap: FND-PFM-QRY-066
  • Interaction covered

Test Scenarios

13 scenarios proving CAP-PFM-QRY-016; 11 bound to an existing test.

01 A denied type prevents partial search grantspermissionapinegativetest
Proves
BR-CAP-PFM-QRY-016-01 INV-DOM-PFM-QRY-005-05
Preconditions
A caller lacks one requested type’s read grant and another lacks lookup access.
Steps
Request both types and repeat with the lookup-denied caller.
Expected
The whole request is refused, nothing is provisioned and route denial blocks the second caller.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses the whole request rather than granting what it can
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#provisioned nothing: a refused request leaves the tenant exactly as it found it
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses a caller without the lookup permission, at the dispatcher and before the handler
Source
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses the whole request rather than granting what it can
02 Organization search uses the current contact authoritypermissionapinegativetest
Proves
BR-CAP-PFM-QRY-016-02
Preconditions
Separate callers hold only contact-read or organization-read permission.
Steps
Request organization search for each.
Expected
The contact reader receives access and the organization-only reader is refused.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#grants organizations to a holder of contacts read, which is the registry’s deliberate mapping (plan §5.2)
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses a caller holding organizations read, which is not what organizations are gated by
Source
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#grants organizations to a holder of contacts read, which is the registry’s deliberate mapping (plan §5.2)
03 Issued credentials embed the search boundaryboundaryapitest
Proves
BR-CAP-PFM-QRY-016-03
Preconditions
A contact search-access request succeeds.
Steps
Inspect the signed credential and restrictions.
Expected
It identifies one index, workspace, live type filter, user rate, fifteen-minute expiry and renewal point.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#is signed, which is what makes its restrictions unalterable by the browser
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#holds the tenant, the live state and the one record type asked for, as one filter the browser can only narrow
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#does not name the record type that was not asked for, so an unrequested type is unreachable with this key
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#expires fifteen minutes after it was issued, inside the key as well as in the response
Source
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#is a key of its own, not one of the environment’s
04 Discovery filtering changes status aloneinvariantapitest
Proves
BR-CAP-PFM-QRY-016-04
Preconditions
Provider fixtures contain discoverable, undiscoverable and removed-state documents.
Steps
Search with and without the browser discovery filter.
Expected
Removed-state documents never appear and undiscoverable documents appear only when the filter is relaxed.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#bakes in no discoverability at all, which is what leaves the browser able to widen status and nothing else
services-platform:modules/quick-search/tests/provider/algolia-isolation.provider.spec.ts#reaches no tombstoned document, because the key filters on the live state
services-platform:modules/quick-search/tests/provider/algolia-isolation.provider.spec.ts#shows all three, the undiscoverable one included, when it sends no status filter at all
Source
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#bakes in no discoverability at all, which is what leaves the browser able to widen status and nothing else
05 Initial search population is not repeatedtransitionapitest
Proves
BR-CAP-PFM-QRY-016-06
Preconditions
The workspace has never searched the record type.
Steps
Request access twice.
Expected
The first response identifies population work and the second spends no additional configuration version.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#provisioned the record type the tenant had never searched
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#reports each granted type as populating, because nothing has indexed it yet
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#provisions nothing a second time: searching again spends no version
Source
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#provisioned the record type the tenant had never searched
06 Access requests validate type listsvalidationapinegativetest
Proves
BR-CAP-PFM-QRY-016-07
Preconditions
The caller holds lookup authority.
Steps
Submit unknown, empty, blank, repeated and oversized type lists.
Expected
Each invalid list returns 400.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses a record type the registry does not declare, naming the ones there are
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses an empty list, which would be a key that reaches nothing
Source
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses a record type the registry does not declare, naming the ones there are
07 Provider absence is a controlled unavailable statefailureapitest
Proves
BR-CAP-PFM-QRY-016-08
Preconditions
The environment has no provider configuration.
Steps
Request search access.
Expected
Unavailable returns 409 without identifying secret content.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#answers 409, so the console hides the search box rather than showing an error
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#names no secret, no variable and no key in the refusal the caller sees
Source
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#answers 409, so the console hides the search box rather than showing an error
08 Index discovery marks archive and statusruleapitest
Proves
BR-CAP-PFM-QRY-016-09
Preconditions
Contact fixtures cover multiple statuses and archive state.
Steps
Build their indexed documents.
Expected
Undiscoverable statuses and archived records receive exclusion markers, with archive separately identified.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/unit/services/indexing/build-documents.spec.ts#says a record with an archive stamp is not discoverable and archived, though its status is offered
Source
services-platform:modules/quick-search/tests/integration/services/indexing/discoverable-attribute.integration.spec.js#says a record of each status the rule does not offer is not discoverable
09 Phone projections include useful digit alternativesedgeunittest
Proves
BR-CAP-PFM-QRY-016-10
Preconditions
Phone values include domestic and international forms.
Steps
Build searchable values for those fields.
Expected
Original and digit forms exist, including domestic national digits without dropping foreign prefixes.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/unit/services/indexing/build-documents.spec.ts#searches a phone number as it is stored and by its digits, so a typed run of digits finds it
services-platform:modules/quick-search/tests/unit/services/indexing/build-documents.spec.ts#searches an international number with its country code by its digits, with its national number
services-platform:modules/quick-search/tests/unit/services/indexing/build-documents.spec.ts#searches a foreign number by its digits without trimming a national number from it
Source
services-platform:modules/quick-search/tests/unit/services/indexing/build-documents.spec.ts#searches a phone number as it is stored and by its digits, so a typed run of digits finds it
10 Wildcard staff access does not bypass the routepermissionapinegativetest
Proves
BR-CAP-PFM-QRY-016-11
Preconditions
A Rhythm staff context holds only a wildcard rule.
Steps
Request search access beside the workspace administrator.
Expected
The administrator succeeds while wildcard-only staff is refused.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-route-grants.e2e.spec.js#is refused the access endpoint, where the tenant’s own administrator is served
Source
services-platform:modules/quick-search/tests/e2e/quick-search-route-grants.e2e.spec.js#is refused the access endpoint, where the tenant’s own administrator is served
11 Typed discovery needs browser proofinteractionbrowserproposed
Proves
AS-JNY-PFM-QRY-005-02
Preconditions
An index contains phone and archived-contact fixtures.
Steps
Search digit text and toggle inactive inclusion for the archived contact.
Expected
Digits find the contact and archived results require explicit inclusion with archive display.
Data
Prepare isolated fixtures for the states described here.
Source
services-platform:docs/quick-search.md#7.5 Archived records leave the search
12 Typing and stale-answer handlingconcurrencyunitnegativetest
Proves
BR-CAP-PFM-QRY-016-12
Preconditions
The controller has a controlled timer and independently settled search requests.
Steps
Type several characters, change a filter and resolve requests out of order.
Expected
Typing coalesces, filter changes run immediately, prior results stay visible during loading and only the newest answer applies.
Data
Use the controlled fixtures and clocks supplied by the cited tests.
Bound to
react-console:lib/quick-search/__tests__/controller.test.ts#searches once for a word typed in one go
react-console:lib/quick-search/__tests__/controller.test.ts#searches on a single non-space character, because the backend has no minimum
react-console:lib/quick-search/__tests__/controller.test.ts#never lets a slow answer to an older query replace a newer one
react-console:lib/quick-search/__tests__/controller.test.ts#keeps the previous results while the next search runs
react-console:lib/quick-search/__tests__/controller.test.ts#re-runs the current query at once, without waiting for a debounce
Source
react-console:lib/quick-search/__tests__/controller.test.ts#searches once for a word typed in one go
13 Changing an indexed field changes the later lookupinteractionbrowserproposed
Proves
BR-CAP-PFM-QRY-016-03 BR-CAP-PFM-QRY-017-04
Preconditions
A contact has a custom searchable value absent from the default field list.
Steps
Add the field, wait for its rebuild to finish, obtain search access and search for the custom value.
Expected
The contact is found through the added field after indexing; provider visibility during rebuilding is inspected separately.
Data
Use an isolated workspace with the described source records, access grants and a surviving control workspace.
Source
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#provisions nothing a second time: searching again spends no version,services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#committed the target beside it, so the configuration and the rebuild it owes are one fact

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.