---
id: TST-PFM-ELG-473
title: Eligibility crm declarations checks
kind: unit
product_area: platform
module: eligibility
revision: 1
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
repository: services-platform
files:
  - modules/eligibility/tests/unit/crm-declarations.spec.js
implements:
  - ATS-PFM-ELG-008-04
environment: mock
implementation_state: implemented
latest_result: not-run
conformance: not-verified
estimated_minutes: 1
isolation: One process with suite-local inputs.
evidence:
  - provenance: test
    source: 'services-platform:modules/eligibility/tests/unit/crm-declarations.spec.js'
    cases:
      - reads the address the node’s addressType names
      - >-
        reads the preferred address, the declared default, when the node gives
        no addressType
      - spells a country list as the is comparisons a text field takes
      - spells is_none_of as the AND of is_not
      - keeps a list comparison of a field that takes it
      - compiles is on a reference field as is_any_of the one value
      - compiles is_not on a reference field as is_none_of the one value
      - keeps is_any_of on a reference field as the node wrote it
      - keeps is on a reference field when the field operators are not known
      - keeps is on a field that takes it
      - >-
        compiles the address condition with no field operators known as the
        template wrote it
      - 'reads the nested { $byArg: { arg, cases } } shape as before'
      - >-
        refuses a node that gives no case’s argument and has no default, as an
        args problem
      - accepts a country condition that leaves addressType to its default
      - >-
        refuses a $byArg condition whose argument has no default and is not
        given, naming its args
      - >-
        refuses to compile the same condition, so a publish could not have been
        compiled either
      - >-
        reads a contact’s roles through its affiliations, the role list spelled
        with is
      - >-
        reads one affiliation of a related node from the affiliations dataset by
        its own criteria
      - asks the affiliation condition about each member of the related node
      - >-
        accepts each of CRM’s three affiliation types on a member of a related
        node over the affiliations
      - >-
        still refuses a contact type that is not read through the affiliations
        on a member
      - reads CRM’s snake_case field when the dataset describes it
      - reads the camelCase field when the dataset describes only that
      - reads CRM’s current spelling when the dataset could not be described
      - answers each evaluation indeterminate with the one reason read_failed
      - lets each binding’s fail policy decide the outcome
      - does not take the unread subject as missing
      - logs the failure with its SQLSTATE and no statement
      - counts the failure once under the read-failed metric
  - provenance: documented
    source: >-
      services-platform:modules/eligibility/tests/unit/crm-declarations.spec.js:suite
      header
    note: >-
      The source header describes the verification boundary and declared
      substitutions.
proof_limit: >-
  Only the named scenario checkpoints have a verified source binding; execution
  has not been attempted.
---

# Eligibility crm declarations checks

## Verification Boundary

This suite checks isolated decisions and validation using the imported inputs. It cannot establish a complete service or browser lifecycle.

## What This Suite Proves

The mapped scenarios identify the capability and feature checkpoints this file exercises. The source test titles preserve the assertion-level evidence.

## What It Does Not Prove

Registration supplies no execution result or conformance decision. Passing isolated checks does not establish deployed dependencies or cross-application delivery.

## Real Dependencies and Test Doubles

The suite runs isolated checks; its imported fixtures and injected collaborators define the substitutions. The source imports and suite header identify the exact dependencies.

## Must Not Be Doubled

The decision or validator being asserted remains real; returning the expected answer from a substitute defeats the check.
