---
id: TST-PFM-MTD-070
title: record revisions
kind: integration
product_area: platform
module: metadata
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js
implements:
  - ATS-PFM-MTD-014-06
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 5
isolation: >-
  Prepared integration database and the suite fixture records; fixture teardown restores or removes its own
  rows.
evidence:
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#writes
    the creation, then one revision for the save of three changes
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#records
    each changed property with its value before and after
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#records
    the display name the save recomposed, and none of the bookkeeping columns
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#names
    what changed, the record type, its object, its label and who saved it from where
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#writes
    no revision for a save that changed nothing
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#leaves
    both event tables empty once the saves have committed
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#writes
    the association on the contact, a native from record, under its own record type
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#labels
    the contact’s revision with the type’s forward label and the boat’s name
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#mirrors
    the association on the boat, a custom to record, as its reverse association
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#records
    the end on both records, as the end date it set
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#records
    a re-pointed from record as a removal on the contact it left and an addition on the one it joined
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#records
    the re-pointing on the boat as its owner changed
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#writes
    a deleted revision of the record
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#lists
    the property values the deletion removed
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#lists
    the association the deletion detached
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#records
    the detached association on the contact too
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#lets
    the application read the record’s revisions (the premise)
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#refuses
    the application an update of a revision
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#refuses
    the application a deletion of a revision
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#refuses
    the purge function for a tenant that is not being deleted or loaded
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#refuses
    at its commit a write that says neither where it came from nor who made it
  - >-
    services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#leaves
    the record as it was after the refused commit
fixture_imports:
  - drizzle-orm
  - '@rhythmsoftware/macroservice-testing/refusals'
  - '@rhythmsoftware/macroservice-testing/integration-database'
  - '@rhythmsoftware/macroservice-testing/stage'
  - '@rhythmsoftware/macroservice-testing/execution-context'
  - ../../../../../../db/config
  - ../../../../../../db/seeds/well-known/well-known-objects
  - ../../../../../associations/db/associations.table
  - ../../../../../associations/services/persistence/associations
  - ../../../../db/custom-object-records.table
  - ../../../../db/record-revisions.table
  - ../../../../services/persistence/custom-object-records
  - ../../support
test_doubles: []
limitations: []
unmatched_specification: null
binding_assertions:
  - scenario: ATS-PFM-MTD-014-06
    provenance: test
    source:
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#writes
        the association on the contact, a native from record, under its own record type
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#mirrors
        the association on the boat, a custom to record, as its reverse association
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#records
        a re-pointed from record as a removal on the contact it left and an addition on the one it joined
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/record-revisions.integration.spec.js#writes
        no revision for a save that changed nothing
    note: >-
      These references identify the assertions this suite contributes; bindings to additional suites remain
      part of the scenario’s proof.
---

# Record revisions

## Verification Boundary

This integration suite checks custom objects and records within the local test harness. The registered file and pinned revision define its boundary.

## What This Suite Proves

The bindings identify the detailed or feature scenarios whose outcomes have assertions in this suite. Original case references remain attached to the detailed scenarios so a reviewer can inspect the exact assertion. Assertions are evidence of implemented checks; no execution result is claimed.

## What It Does Not Prove

The register does not establish a current passing run or full specification conformance. Behavior outside the suite’s fixtures and assertions remains unverified.

## Real Dependencies and Test Doubles

The fixture uses PostgreSQL and the imported persistence or API code. The fixture imports identify the setup seams; this register makes no broader claim that dependencies are undoubled.

## Must Not Be Doubled

The operation under examination and its asserted stored outcomes must remain real within the declared harness. A fixture cannot replace the write, refusal or transactional effect that the bound scenario checks.
