Skip to content

ATS-PFM-ELG-006Maintain the application-declared rule vocabulary: Capability Test Specification

Markdown

ATS-PFM-ELG-006

Maintain the application-declared rule vocabulary: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaPlatformModuleEligibility, Responsibilities and AttentionRevision3

Read atservices-platform ad3f6a65react-console baf6dae3

Coverage

  • Rule covered
  • Transition covered
  • Validation covered
  • Permission gap: FND-PFM-ELG-058
  • Edge gap: FND-PFM-ELG-058
  • Failure gap: FND-PFM-ELG-058
  • Boundary covered
  • Concurrency covered
  • Invariant gap: FND-PFM-ELG-058
  • Interaction covered

Test Scenarios

11 scenarios proving CAP-PFM-ELG-006; 9 bound to an existing test.

01 Reject invalid registration atomicallyvalidationapinegativetest
Proves
BR-CAP-PFM-ELG-006-01
Preconditions
A declaration set has several mistakes.
Steps
Submit the set.
Expected
Registration reports failure and all problems while retaining the previous catalogue.
Data
No fixtures beyond the described setup.
Bound to
Source
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#answers a refused manifest with ok false and the refusal, rather than throwing
02 Validate application-owned dependenciesvalidationapinegativetest
Proves
BR-CAP-PFM-ELG-006-02
Preconditions
Declarations use incompatible operators, missing datasets or subject fields and foreign datasets or functions.
Steps
Submit each declaration.
Expected
Each rejection identifies its incompatible dependency.
Data
No fixtures beyond the described setup.
Bound to
Source
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#names an operator the value type cannot take
03 Require declaration version advancesconcurrencyapitest
Proves
BR-CAP-PFM-ELG-006-03
Preconditions
An application already has a registered declaration.
Steps
Resubmit unchanged and changed at equal, lower and higher versions.
Expected
Unchanged input writes nothing; only the higher-version change registers.
Data
No fixtures beyond the described setup.
Bound to
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#writes nothing on a redeploy of the same declarations, answering every entry unchanged
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#refuses a declaration changed at the same version, saying to bump it, and writes nothing
Source
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#writes nothing on a redeploy of the same declarations, answering every entry unchanged
04 Protect declarations used by publicationsruleapinegativetest
Proves
BR-CAP-PFM-ELG-006-04
Preconditions
Conditions are used by a publication or only a draft, and a binding names a purpose.
Steps
Omit each from a replacement set.
Expected
Publication and binding dependencies prevent withdrawal with context named; a draft-only condition is withdrawn.
Data
No fixtures beyond the described setup.
Bound to
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#refuses to withdraw a type a published version of a tenant uses, naming the tenant and the definition, and writes nothing
Source
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#refuses to withdraw a type a published version of a tenant uses, naming the tenant and the definition, and writes nothing
05 Control deprecated vocabulary visibilitytransitionapitest
Proves
BR-CAP-PFM-ELG-006-05
Preconditions
Active, deprecated and withdrawn declarations exist.
Steps
Read the catalogue normally and including deprecated declarations.
Expected
Deprecated entries appear only on request with their status, and withdrawn entries never appear.
Data
No fixtures beyond the described setup.
Bound to
services-platform:modules/eligibility/tests/e2e/eligibility-registry.e2e.spec.js#lists a deprecated type, with its status, when asked to include deprecated ones
services-platform:modules/eligibility/tests/e2e/eligibility-registry.e2e.spec.js#never lists a withdrawn type, even with deprecated ones included
Source
services-platform:modules/eligibility/tests/e2e/eligibility-registry.e2e.spec.js#lists a deprecated type, with its status, when asked to include deprecated ones
06 Preserve aliases after renaminginvariantapitest
Proves
BR-CAP-PFM-ELG-006-06
Preconditions
A publication uses an existing condition key.
Steps
Register a successor with the former key, then evaluate.
Expected
The unchanged publication continues to work through the alias.
Data
No fixtures beyond the described setup.
Bound to
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#folds a renamed type into its successor rather than withdrawing it, so the old key keeps resolving
Source
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#folds a renamed type into its successor rather than withdrawing it, so the old key keeps resolving
07 Apply licensing and subject filterspermissionapitest
Proves
BR-CAP-PFM-ELG-006-07
Preconditions
A workspace first licenses CRM and later Membership, with a separate workspace lacking CRM.
Steps
Read conditions and purposes before and after changes, including subject filtering.
Expected
Only licensed entries appear and no internal query details are exposed.
Data
No fixtures beyond the described setup.
Bound to
services-platform:modules/eligibility/tests/e2e/eligibility-registry.e2e.spec.js#lists the active types of the tenant’s applications in key order, without a deprecated or withdrawn one or an unlicensed application’s
services-platform:modules/eligibility/tests/e2e/eligibility-registry.e2e.spec.js#lists only the types a subject of the asked kind can be judged by
Source
services-platform:modules/eligibility/tests/e2e/eligibility-registry.e2e.spec.js#lists the active types of the tenant’s applications in key order, without a deprecated or withdrawn one or an unlicensed application’s
08 Refresh a process catalogue after its registrationboundaryapitest
Proves
BR-CAP-PFM-ELG-006-08
Preconditions
The process has read the condition catalogue.
Steps
Write a declaration externally, advance past the cache lifetime, then commit a registration in the reading process.
Expected
An external write remains unseen during the cache lifetime; expiry and a committed local registration each cause a fresh read.
Data
Existing evidence fixtures provide the described setup.
Bound to
services-platform:modules/eligibility/tests/integration/services/registry/registry-snapshot.integration.spec.js#keeps answering what it read for 60 seconds, though a type was written since
Source
services-platform:modules/eligibility/tests/integration/services/registry/registry-snapshot.integration.spec.js#keeps answering what it read for 60 seconds, though a type was written since
09 Use a renamed condition in existing workinteractionapiproposed
Proves
BR-CAP-PFM-ELG-001-07 BR-CAP-PFM-ELG-006-06
Preconditions
A released rule uses a condition whose application declares a new key with an alias.
Steps
Register the rename, inspect authoring choices and validate the retained expression.
Expected
The author sees the new vocabulary while the expression using the former key remains valid.
Data
Run-owned records and a controlled clock where timing changes the result.
Source
services-platform:modules/eligibility/tests/integration/services/model/validate-definition.integration.spec.js#answers a reference to an archived definition as missing; services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#folds a renamed type into its successor rather than withdrawing it, so the old key keeps resolving
10 Protect a purpose while a consumer uses itinteractionapiproposed
Proves
BR-CAP-PFM-ELG-006-04 BR-CAP-PFM-ELG-007-02
Preconditions
An application purpose has an active consumer connection.
Steps
Deploy a manifest omitting that purpose, inspect the registry, remove the connection and deploy the manifest again.
Expected
The first deployment fails without partial registry writes; the second can withdraw the unused purpose.
Data
Run-owned records and a controlled clock where timing changes the result.
Source
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#refuses to withdraw a type a published version of a tenant uses, naming the tenant and the definition, and writes nothing; services-platform:modules/eligibility/tests/integration/services/bindings/consumer-bindings.integration.spec.js#refuses a rule that needs a subject the kind does not supply
11 Leave the registry unchanged after a rejected manifestfailureapinegativetest
Proves
BR-CAP-PFM-ELG-006-01 BR-CAP-PFM-ELG-006-03
Preconditions
A registered declaration has an established version and stored body.
Steps
Change its body without raising the version and submit the complete manifest; inspect both changed and untouched declarations.
Expected
The deployment is refused and neither declaration changes.
Data
Run-owned fixtures, separate caller contexts and a controlled clock where required.
Bound to
Source
services-platform:modules/eligibility/tests/integration/services/registry/register-eligibility-registration.integration.spec.js#refuses a declaration changed at the same version, saying to bump it, and writes nothing

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.