Skip to content

ATS-PFM-QRY-017Maintain the fields and freshness of Quick Search: Capability Test Specification

Markdown

ATS-PFM-QRY-017

Maintain the fields and freshness of Quick Search: 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 gap: FND-PFM-QRY-067
  • Validation covered
  • Permission covered
  • Edge covered
  • Failure covered
  • Boundary covered
  • Concurrency covered
  • Invariant gap: FND-PFM-QRY-067
  • Interaction covered

Test Scenarios

16 scenarios proving CAP-PFM-QRY-017; 12 bound to an existing test.

01 Search administration uses separate powerspermissionapinegativetest
Proves
BR-CAP-PFM-QRY-017-01
Preconditions
Callers have different read, update and rebuild grants and some lack dataset access.
Steps
Exercise configuration listing, changes and rebuilds.
Expected
Each power reaches its own operation; absent dataset access prevents administration and hides the type.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses the configuration list to a caller holding only the Quick Search lookup
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a write to a caller who may only read the settings
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a rebuild to a caller who may change the field list, which is a different power
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a field-list change to a caller who may only ask for a rebuild
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses the whole configuration surface to an administrator who may query no dataset
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#leaves out the dataset a caller may not query, rather than refusing the list
Source
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses the configuration list to a caller holding only the Quick Search lookup
02 Defaults do not create indexing resourcesruleapitest
Proves
BR-CAP-PFM-QRY-017-02 INV-DOM-PFM-QRY-005-08
Preconditions
The workspace has no stored search configuration.
Steps
Read its configurations.
Expected
Default fields and zero version are returned without provisioning or writes.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#answers version 0, which is the version no tenant ever wrote
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#says the index is unprovisioned, with no generation on either side
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#wrote nothing: reading what a tenant would get does not provision it
Source
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#answers version 0, which is the version no tenant ever wrote
03 Invalid field configuration is reported togethervalidationapinegativetest
Proves
BR-CAP-PFM-QRY-017-03 INV-DOM-PFM-QRY-005-06
Preconditions
Lists contain unknown, forbidden, unsupported and incorrectly ranked fields.
Steps
Save individual invalid lists and a combined invalid list.
Expected
Refusals locate each problem and the combined refusal reports all without writing.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a field the dataset does not offer, naming the field
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a field the record type’s owner never indexes, repeating the owner’s reason
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses an empty field list, which would index nothing at all
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#reports every problem of a list in one refusal, so one round trip fixes them all
Source
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a field the dataset does not offer, naming the field
04 Configuration changes atomically record owed workconcurrencyapinegativetest
Proves
BR-CAP-PFM-QRY-017-04 INV-DOM-PFM-QRY-005-02
Preconditions
A record type already has configuration.
Steps
Submit changed, identical and stale-version field lists.
Expected
The changed target and rebuild are recorded, the identical list spends no version and the stale request conflicts.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#moves the index target to the generation and version the indexer must write
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
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#spends no version when the same list is sent again, and owes no rebuild
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses the version the client read when the configuration has moved on
Source
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#moves the index target to the generation and version the indexer must write
05 Concurrent rebuild jobs preserve their grainconcurrencyapinegativetest
Proves
BR-CAP-PFM-QRY-017-05 INV-DOM-PFM-QRY-005-03
Preconditions
One full rebuild is open for a record type.
Steps
Open another full job and a related-record job.
Expected
The duplicate full job is refused while related work can coexist.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/integration/db/quick-search-rebuild-jobs.table.integration.spec.js#accepts a related rebuild beside an open full one, because it moves no generation
services-platform:modules/quick-search/tests/integration/services/persistence/rebuild-jobs.integration.spec.js#answers the tenant’s open full rebuild, which is the job a further request coalesces onto
Source
services-platform:modules/quick-search/tests/integration/db/quick-search-rebuild-jobs.table.integration.spec.js#refuses a second open full rebuild of the same record type
06 Deleted projections remove provider documentsinvariantapinegativetest
Proves
BR-CAP-PFM-QRY-017-06
Preconditions
A previously indexed record disappears from its owner.
Steps
Process its change event.
Expected
The provider document is removed without retaining a provider tombstone.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#removes the document of a record the projection no longer finds, leaving no tombstone in the provider
Source
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#removes the document of a record the projection no longer finds, leaving no tombstone in the provider
07 Related contacts refresh after organization changesinteractionapinegativetest
Proves
BR-CAP-PFM-QRY-017-07
Preconditions
An organization has current and ended affiliates plus linked addresses.
Steps
Rename it and change its linked address.
Expected
Current affiliates and linked contacts refresh while ended affiliations do not.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#re-indexes the contacts of the organization, so each hit shows the name the organization has now
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#re-indexes only the contacts with a current affiliation to that organization, not one whose affiliation ended
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#re-indexes the linked contact, so its hit shows the city the organization’s address has now
Source
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#re-indexes the contacts of the organization, so each hit shows the name the organization has now
08 Provider failure remains workspace-specificfailureapinegativetest
Proves
BR-CAP-PFM-QRY-017-08
Preconditions
One event batch spans failing, unprovisioned, deleting and healthy workspaces.
Steps
Process the complete batch.
Expected
Only the failing workspace’s events fail; others settle and healthy documents are written.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#fails every event of the tenant whose write was refused, so CRM redelivers exactly those
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#writes the other tenant’s document, so one tenant’s provider failure stops nothing else
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#settles the unprovisioned tenant’s events, so its queue drains instead of retrying forever
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#settles the events of the tenant being deleted, because its records are on their way out
Source
services-platform:modules/quick-search/tests/integration/services/indexing/handle-change-events.integration.spec.js#fails every event of the tenant whose write was refused, so CRM redelivers exactly those
09 Retired fields remain visible for repairedgeapinegativetest
Proves
BR-CAP-PFM-QRY-017-09
Preconditions
A configured indexed custom field is archived.
Steps
Read settings and available fields, then attempt to retain it in a save.
Expected
The field is unavailable, degradation and owed rebuilding are visible, and the save fails.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#answers the archived field in place, as unavailable with the reason a screen shows
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#reports the same field as degraded on the index, which is what the archive recorded there
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#targets a generation beyond the one in force, which is the rebuild the archive asked for
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#refuses a field list that keeps the archived field, by the rule any ineligible field is refused by
Source
services-platform:modules/quick-search/tests/e2e/quick-search-configurations.e2e.spec.js#answers the archived field in place, as unavailable with the reason a screen shows
10 Repair and deletion retention honor time boundsboundaryapinegativetest
Proves
BR-CAP-PFM-QRY-017-10
Preconditions
A target remains unsatisfied and deletion counters straddle their retention boundary.
Steps
Repeat resubmission within and beyond an hour and run counter purge.
Expected
Automatic work respects hourly backoff and only sufficiently old counters are removed.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/integration/services/maintenance/purge-tombstones.integration.spec.js#removes the counter of a record deleted a minute before the cutoff, which is the boundary from the expired side
services-platform:modules/quick-search/tests/integration/services/maintenance/purge-tombstones.integration.spec.js#keeps a deleted counter a minute newer than the cutoff, and its pre-D-29 tombstone, which is the boundary from the other side
Source
services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#submits nothing on a second pass in the same hour
11 Purge waits for in-flight rebuildingtransitionapinegativetest
Proves
BR-CAP-PFM-QRY-017-11 INV-DOM-PFM-QRY-005-07
Preconditions
A workspace has an open rebuild job.
Steps
Request its purge and allow the rebuild to settle.
Expected
Purge initially waits and subsequently removes all tracked workspace resources.
Data
Use the existing binding’s controlled fixture data.
Bound to
services-platform:modules/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js#purges the tenant once the rebuild has settled, the job’s own three tables included
services-platform:modules/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js#counts every resource of the purged tenant back to zero, the job tables among them
Source
services-platform:modules/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js#purges the tenant once the rebuild has settled, the job’s own three tables included
12 Changed search fields need end-to-end publication proofinteractionbrowserproposed
Proves
AS-JNY-PFM-QRY-005-01
Preconditions
Contacts initially use default search fields.
Steps
Add a custom field, wait for publication and search that field from the dialog.
Expected
The replacement generation becomes searchable; this complete browser proof is still proposed.
Data
Prepare isolated fixtures for the states described here.
Source
FND-PFM-QRY-029
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
14 Workspace cleanup includes search and package resourcesinteractionapiproposed
Proves
BR-CAP-PFM-QRY-017-11 BR-CAP-PFM-QRY-018-08
Preconditions
An isolated workspace contains indexed contacts and export settings with a queued request.
Steps
Request workspace deletion, settle open index work and repeat participant cleanup until its inventory is empty.
Expected
Search documents and workspace export resources disappear without touching a surviving control workspace.
Data
Use an isolated workspace with the described source records, access grants and a surviving control workspace.
Source
services-platform:modules/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js#purges the tenant once the rebuild has settled, the job’s own three tables included,services-platform:modules/data-exports/tests/e2e/data-exports.e2e.spec.js#is answered 409 not_implemented for a download, until the generation job
15 Search cleanup and snapshot cleanup respect the same workspace boundaryinteractionapiproposed
Proves
BR-CAP-PFM-QRY-017-11 BR-CAP-PFM-QRY-019-11
Preconditions
Two workspaces have search resources and retained monthly history.
Steps
Delete one workspace, wait for its rebuild to settle and run the cleanup participants to completion.
Expected
The deleted workspace has no indexed documents or retained snapshot versions; the control keeps both.
Data
Use an isolated workspace with the described source records, access grants and a surviving control workspace.
Source
services-platform:modules/quick-search/tests/integration/services/maintenance/tenant-participant.integration.spec.js#purges the tenant once the rebuild has settled, the job’s own three tables included,services-platform:modules/snapshots/tests/integration/lifecycle/pipeline/snapshot-pipeline.integration.spec.js#removes every snapshot row, run and override of the purged tenants, the run's version chain included
16 A settings release owes exactly one replacement rebuildtransitionunittest
Proves
BR-CAP-PFM-QRY-017-12
Preconditions
The active generation meets its target but uses the preceding provider-settings release.
Steps
Run repair twice while rebuilding, finish the rebuild and run repair again.
Expected
Repair advances the target once and submits one settings-triggered rebuild; after publication it submits no further work.
Data
Use the suite’s isolated search scope and controlled rebuild operations.
Bound to
services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#moves the target one generation forward, because only the target generation may activate and stamp the version
services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#asks for no second rebuild while that one is open, reporting the open job instead
services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js#creates no further job once it has converged, so the backfill runs once and not every quarter of an hour
Source
services-platform:modules/quick-search/tests/integration/services/maintenance/resubmit-targets.integration.spec.js

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.