---
id: TST-PFM-MTD-055
title: custom objects table
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/db/custom-objects.table.integration.spec.js
implements: []
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/db/custom-objects.table.integration.spec.js'
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#modules/custom-objects/db/custom-objects.table.ts
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#accepts
    a well-formed row with the defaults of 04 §2.1, so each refusal below is about the column it spoils
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#defaults
    the three documents to empty objects and the secondary display keys to none
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a second object with the same key in the tenant, by the primary key
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a second object with the same object id in the tenant, by the object id unique constraint
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#accepts
    the same key and object id in another tenant, because the tenant leads both
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a tenant that does not exist, by the tenant foreign key
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    an owner type the tenant does not have, by the owner type foreign key
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#accepts
    an owner type the tenant has
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a key in capitals, by the configuration id check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a key ending in an underscore, by the configuration id check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    an object id of another application, by the object id check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    an object id in capitals, by the object id check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a status outside the three, by the status check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a portal create mode outside the three, by the portal check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a portal edit mode outside the three, by the portal check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a staff access mode outside the two, by the staff access check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    an active object without a display property, by the active display check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#accepts
    an active object that names a display property
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    portal rules that are not a JSON object, by the documents check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    navigation that is not a JSON object, by the documents check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    limits that are not a JSON object, by the documents check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    portal rules over 16 KiB, by the documents check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a sys_locked value outside the two the standard defines, by the locked check
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a blank label: the trigger nulls it and the column refuses the null
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#trims
    every text column, stores an empty one as null and drops a blank secondary display key
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#moves
    the tenant’s query description stamp when an object is written
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#lets
    a tenant’s transaction read its own objects, the premise of the case below
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#hides
    another tenant’s object from a tenant’s transaction, with no predicate of its own
  - >-
    services-platform:modules/custom-objects/tests/integration/db/custom-objects.table.integration.spec.js#refuses
    a tenant’s transaction writing a row of another tenant, by the policy’s check
fixture_imports:
  - drizzle-orm
  - '@rhythmsoftware/macroservice-testing/refusals'
  - ../../../db/custom-objects.table
  - ../support
test_doubles: []
limitations: []
unmatched_specification: FND-PFM-MTD-083
binding_assertions: []
---

# Custom objects table

## 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 suite contains executable checks for this module, but no matching detailed scenario is established in this back-fill. The executable coverage finding records that mapping gap. 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.
