---
id: TST-PFM-SEC-154
title: Invitations.queries database and service checks
kind: integration
product_area: platform
module: security
revision: 2
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - modules/security/tests/integration/services/persistence/invitations.queries.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: 3
isolation: Use the prepared test database and suite-owned fixture rows; retain shared seed records.
assertion_evidence:
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#security
      persistence: the customer invitations list
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      an outstanding invitation with the person it belongs to and every mapped field
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#calls
      an invitation pending while the clock is before its expiry and expired once it is past
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#says
      of each row which of the two it is, as of the clock it was read at
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#leaves
      an accepted invitation out, which was in the answer before it was accepted
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#leaves
      a revoked invitation out, which was in the answer before it was revoked
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#leaves
      a portal member's invitation out: this is the console list
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      none of this customer's invitations when another customer is asked about
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#pages
      by the expiry keyset, newest expiry first, answering each invitation once
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#findLatestInvitationForUser
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the newest invitation of the person, with the delivery outcome and the inviter the row carries
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      an invitation that is over rather than none, which is what the tab has to show
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing at all for somebody who was never invited
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#latestInvitationsOfUsers
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      one row per person, the newest invitation, with its state, sent and expiry instants and
      attempts
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      an unaccepted invitation whose moment has passed as expired
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the superseded invitation of somebody with no successor as superseded
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing for somebody never invited, and nothing for no ids
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#the
      invitation records
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#createInvitation
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the invitation it wrote whole: the token’s hash, where it is going, when it runs out and
      nothing more
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the widening exemption a system invitation carries, with no inviter and no token, and leaves
      the key off an ordinary one
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#findInvitationByTokenHash
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      whatever row the hash names, whole, so an audit can tell an expired invitation from a revoked
      one
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing for a hash nobody was ever issued
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#findLiveInvitationByTokenHash
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the whole row while the clock is before its expiry, and nothing once it is past
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing for a hash that names a revoked invitation, which the plain read still answers
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#getInvitation
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#reads
      an invitation back by its id exactly as the write answered it
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing for an id of the right grammar that names no invitation
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#findLiveInvitationForUser
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the person’s one live invitation whole
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing once it has been accepted, and nothing for somebody nobody invited
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#listOutstandingInvitations
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the person’s outstanding invitation whole, and an empty list once it is revoked
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#listUserInvitations
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      every invitation of the person newest first, each whole, the superseded one included
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      an empty list for somebody nobody has invited
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#issueInvitationToken
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#writes
      the hash on a live, unsent invitation and answers the whole row it left
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing for an invitation that has already been sent, leaving its first token in place
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing for an invitation that has expired and nothing for one that was revoked
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#markInvitationSent
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the invitation with the moment it left, the send counted, and without the token’s hash on it
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      nothing for an invitation that is not there
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#acceptInvitation
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      the accepted invitation whole, once, and nothing at all to a second acceptance
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#revokeOutstandingInvitations
      and supersedeOutstandingInvitations
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      each invitation it revoked whole, with the revoker and the moment on it, and nothing the
      second time
  - provenance: test
    source: >-
      services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js#answers
      each invitation it superseded whole, and leaves an accepted one at its acceptance
dependency_evidence: >-
  The prepared PostgreSQL database supplies the persisted fixtures and constraints exercised here.
  The file declares no substituted collaborators.
evidence:
  - >-
    services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js
  - >-
    Static review at the recorded source revision; executable results remain not-run and conformance
    remains not-verified.
binding_note: >-
  The file has no scenario binding established by this examination. Its executable checks remain
  registered without assigning them broader acceptance coverage.
examiner: codex
examined_at: '2026-10-23'
final_text: OpenAI
dependency_review:
  provenance: test
  source: >-
    services-platform:modules/security/tests/integration/services/persistence/invitations.queries.integration.spec.js
  explicit_no_doubles: true
  identified_double_boundaries: []
---
# Invitations.queries database and service checks

## Verification Boundary

The file exercises database or service behavior through the local integration harness. The assertion references identify the source checks for invitations.queries.

## What This Suite Proves

The file supplies executable engineering checks for the named subject. No complete acceptance scenario is inferred from the file’s existence.

## What It Does Not Prove

This examination does not run the suite. Passing behavior, deployed conformance and the behavior of substituted dependencies require separate execution evidence.

## Real Dependencies and Test Doubles

The prepared PostgreSQL database supplies the persisted fixtures and constraints exercised here. The file declares no substituted collaborators.

## Must Not Be Doubled

Keep the queried database, applicable constraints and transaction boundaries real. Provider substitutes cannot establish delivery, cloud execution or cross-service recovery.
