Skip to content

ATS-PFM-OPS-008Remember a person’s visits to records: Capability Test Specification

Markdown

ATS-PFM-OPS-008

Remember a person’s visits to records: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaPlatformModuleOperational RecordsRevision2

Read atservices-platform ad3f6a65react-console baf6dae3macroservice-libraries 54536a44

Coverage

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

Test Scenarios

13 scenarios proving CAP-PFM-OPS-008; 10 bound to an existing test.

01 Reject an unsupported viewed typevalidationapinegativetest
Proves
BR-CAP-PFM-OPS-008-01
Preconditions
The supplied record type is outside the registry.
Steps
Report a visit.
Expected
The refusal names supported types without creating an event.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/audit/tests/integration/services/record-views/record-view.integration.spec.js#refuses a record type the registry does not hold, naming the types it does
02 Authorize the target before recordingpermissionapinegativetest
Proves
BR-CAP-PFM-OPS-008-02 INV-DOM-PFM-OPS-002-06
Preconditions
Reports lack record-read or dataset-query authority or name another workspace’s record.
Steps
Submit the reports.
Expected
Forbidden or missing targets produce no activity row.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/audit/tests/integration/services/record-views/record-view.integration.spec.js#writes nothing at all for any of those refusals
03 Use organization readership for organization visitspermissionapinegativetest
Proves
BR-CAP-PFM-OPS-008-03
Preconditions
The caller has only contact readership.
Steps
Report an organization visit and repeat with the required authority.
Expected
The first report fails and the authorized case succeeds.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/audit/tests/integration/services/record-views/record-view.integration.spec.js#refuses an organization when the caller holds only contact read, because opening one needs organization read
04 Reject client-supplied attributionvalidationunitnegativetest
Proves
BR-CAP-PFM-OPS-008-04 INV-DOM-PFM-OPS-002-05
Preconditions
Report bodies supply actor, workspace, event time, event type or identity.
Steps
Submit every altered body.
Expected
Each forbidden field receives a validation refusal.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/audit/tests/unit/aws/api/audit-api-mapper.spec.ts#refuses a body naming the actor, which is how a trail would be written in somebody else’s name
05 Separate delivery retries from new visitsconcurrencyapinegativetest
Proves
BR-CAP-PFM-OPS-008-05 INV-DOM-PFM-OPS-002-04
Preconditions
A visit is already recorded.
Steps
Repeat its delivery, submit a fresh key and reuse the old key for another record.
Expected
The repeat resolves to the original, the fresh key creates another event and conflicting reuse fails.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/audit/tests/integration/services/record-views/record-view.integration.spec.js#reports the retry as a duplicate rather than refusing it, because the client has nothing to fix
06 Normalize keys within person and workspaceinvariantapinegativetest
Proves
BR-CAP-PFM-OPS-008-06
Preconditions
A lower-case visit key is stored.
Steps
Repeat in upper case and submit under another actor and workspace.
Expected
Case changes retain one visit while other actor and workspace scopes admit their own events.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/audit/tests/integration/services/persistence/audit-events.integration.spec.js#lower-cases the occurrence key, so one visit cannot become two by changing its case
07 Reject unsafe location metadataboundaryapinegativetest
Proves
BR-CAP-PFM-OPS-008-07
Preconditions
Metadata contains unknown keys, excessive length or invalid token spelling.
Steps
Submit each report.
Expected
Validation names the rejected key and leaves no event.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
services-platform:modules/audit/tests/integration/services/persistence/audit-events.integration.spec.js#refuses a metadata value outside the token grammar, naming the key
08 Track navigation rather than renderingrulebrowsertest
Proves
BR-CAP-PFM-OPS-008-08
Preconditions
A readable contact screen has an established visit.
Steps
Change tabs, reload, leave and return, then open an unreadable target.
Expected
Only new successful navigations add visits.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
react-console:e2e/controlled/record-views.controlled.spec.ts#switching tab on the same record is still one visit
09 Hide reporting outagesfailurebrowsernegativetest
Proves
BR-CAP-PFM-OPS-008-09
Preconditions
Visit reporting encounters retryable network errors.
Steps
Navigate to a record and allow the retry budget to run.
Expected
The record remains usable without an audit error and retries retain one key.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
react-console:e2e/controlled/record-views.controlled.spec.ts#a failure to report a visit never reaches the person, and the retries are one visit
10 Record custom-record reads on the serverruleapiproposed
Proves
BR-CAP-PFM-OPS-008-10
Preconditions
A readable custom record exists.
Steps
Fetch it through the custom-record endpoint.
Expected
An attributed event carries the server’s key and location metadata.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Source
services-platform:modules/custom-objects/aws/api/custom-object-records.routes.ts:recordViewEvent
11 Keep Recent Items personal across real servicesinteractionbrowsertest
Proves
AS-JNY-PFM-OPS-003-01 AS-JNY-PFM-OPS-003-02
Preconditions
Two people and test contacts exist in the development workspace.
Steps
One person visits the contacts and both inspect Recent Items.
Expected
Only that person receives the visited records in recent order.
Data
Controlled records and caller contexts matching this scenario’s preconditions.
Bound to
Source
react-console:e2e/dev/record-views.dev.spec.ts#the records a person opens are recorded in the Platform and read back by the header
12 Read a retried visit only onceinteractionapiproposed
Proves
BR-CAP-PFM-OPS-008-05 BR-CAP-PFM-OPS-009-02
Preconditions
A person has successfully opened a readable record and retains its visit key.
Steps
Replay the visit report and then read that person’s raw history.
Expected
The duplicate response and history refer to one stored visit.
Data
Isolated workspace records and caller contexts for both sides of the interaction.
Source
services-platform:modules/audit/tests/integration/services/record-views/record-view.integration.spec.js#reports the retry as a duplicate rather than refusing it, because the client has nothing to fix; services-platform:modules/audit/tests/integration/services/record-views/view-history.integration.spec.js#still holds the view after the contact is gone, because a trail is not a list of records; CAP-PFM-OPS-009; WF-PFM-OPS-008
13 Write a visit into the protected activity trailinteractionapiproposed
Proves
BR-CAP-PFM-OPS-008-04 BR-CAP-PFM-OPS-010-03
Preconditions
A person opens a readable record using verified execution context.
Steps
Report the visit, attempt to rewrite its stored activity with ordinary application privileges, and read the retained event.
Expected
The retained event identifies the original visit and caller despite the refused rewrite.
Data
Isolated workspace records and caller contexts for both sides of the interaction.
Source
services-platform:modules/audit/tests/unit/aws/api/audit-api-mapper.spec.ts#refuses a body naming the actor, which is how a trail would be written in somebody else’s name; services-platform:modules/audit/tests/integration/db/audit-events.table.integration.spec.js#refuses an UPDATE of the event by the application role, so a trail cannot be rewritten; CAP-PFM-OPS-010; WF-PFM-OPS-008

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.