Skip to content

ATS-MBR-STR-003Combine units and continue their memberships: Capability Test Specification

Markdown

ATS-MBR-STR-003

Combine units and continue their memberships: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaMembershipModuleOrganizational Structure, Membership Configuration and TermsRevision2

Read atservices-membership 5994c270react-console baf6dae3

Coverage

  • Rule covered
  • Transition covered
  • Validation covered
  • Permission covered
  • Edge covered
  • Failure covered
  • Boundary gap: FND-MBR-STR-056
  • Concurrency gap: FND-MBR-STR-056
  • Invariant gap: FND-MBR-STR-056
  • Interaction covered

Test Scenarios

10 scenarios proving CAP-MBR-STR-003; 9 bound to an existing test.

01 Invalid survivors leave the source unchangedvalidationapinegativetest
Proves
BR-CAP-MBR-STR-003-01 INV-DOM-MBR-STR-002-03
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Attempt self, descendant and inactive survivors, then attempt another merge of a merged source.
Expected
Each invalid combination fails before retained records change.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:modules/structure/tests/unit/services/tree-edits.spec.ts#the tree edits › merge › refuses a survivor below the merged unit
services-membership:tests/acceptance/structure/MBR-ACC-0019.acceptance.ts#MBR-ACC-0019 merges refused, all or none, backdated, of an inactive unit, in a chain
Source
services-membership:modules/structure/tests/unit/services/tree-edits.spec.ts#the tree edits › merge › refuses a survivor below the merged unit
02 Children move together or remain togetherfailureapitest
Proves
BR-CAP-MBR-STR-003-02
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Merge a source with a valid section placement, then test a child whose survivor placement is invalid.
Expected
The valid section relocates; the invalid combination leaves the whole source branch unchanged.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › merge › moves the children under the survivor, marks the unit merged and lists what it left
services-membership:tests/acceptance/structure/MBR-ACC-0019.acceptance.ts#MBR-ACC-0019 merges refused, all or none, backdated, of an inactive unit, in a chain
Source
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › merge › moves the children under the survivor, marks the unit merged and lists what it left
03 The source records its survivortransitionapitest
Proves
BR-CAP-MBR-STR-003-03 AS-JNY-MBR-STR-003-01
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Combine Savannah into Atlanta and read the source record.
Expected
Savannah records merged status with Atlanta as survivor.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › merge › moves the children under the survivor, marks the unit merged and lists what it left
services-membership:tests/acceptance/structure/MBR-ACC-0018.acceptance.ts#MBR-ACC-0018 Savannah Chapter is merged into Atlanta
Source
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › merge › moves the children under the survivor, marks the unit merged and lists what it left
04 Members transfer without duplicate survivor tiesruleapitest
Proves
BR-CAP-MBR-STR-003-04 AS-JNY-MBR-STR-003-02
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Merge Savannah into Atlanta with Pat only at Savannah and Jo already at both.
Expected
Pat continues at Atlanta, Jo’s duplicate source tie ends and the result counts both outcomes.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#a unit merge moves its members: Savannah into Atlanta › merges Savannah, counting one affiliation moved and one ended on the survivor
services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#a unit merge moves its members: Savannah into Atlanta › ends Pat’s Savannah affiliation yesterday and continues it in Atlanta as primary from today
services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#a unit merge moves its members: Savannah into Atlanta › keeps Jo’s Atlanta affiliation and ends her Savannah one yesterday
services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#a unit merge moves its members: Savannah into Atlanta › lists Jo and Pat on Atlanta’s roster today, and no one on Savannah’s
Source
services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#a unit merge moves its members: Savannah into Atlanta › merges Savannah, counting one affiliation moved and one ended on the survivor
05 Affiliation conflicts roll back the mergefailureapinegativetest
Proves
BR-CAP-MBR-STR-003-05
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Attempt a combination introducing a package minimum violation and inspect the response and saved records.
Expected
The refusal names the membership and leaves units, placement periods and affiliations intact.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:modules/structure/tests/integration/services/tree/unit-merge.integration.spec.ts#the tree edits affiliations bind › a merge an affiliation cannot follow › is refused 409 affiliations_not_movable, naming the membership and unit_minimum
services-membership:modules/structure/tests/integration/services/tree/unit-merge.integration.spec.ts#the tree edits affiliations bind › a merge an affiliation cannot follow › changes nothing: the units, their history and every affiliation, the movable ones included, are as they were
services-membership:modules/structure/tests/unit/services/tree-edits.spec.ts#the tree edits › merge › refuses the whole merge 409 affiliations_not_movable before any write when the plan refuses
Source
services-membership:modules/structure/tests/integration/services/tree/unit-merge.integration.spec.ts#the tree edits affiliations bind › a merge an affiliation cannot follow › is refused 409 affiliations_not_movable, naming the membership and unit_minimum
06 Membership identity moves only without conflictinteractionapitest
Proves
BR-CAP-MBR-STR-003-06
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Merge Macon into Atlanta with Kim identified by Macon, then test a source whose owner already holds the survivor’s identity.
Expected
The first identity changes; the conflicting combination leaves identities and source state intact.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:modules/memberships/tests/integration/services/identity-unit-merge.integration.spec.ts#a unit merge moves the identity of identity-bound memberships › the merge of Macon into Atlanta › makes Atlanta the identity of Kim’s membership, at the next version
services-membership:modules/memberships/tests/integration/services/identity-unit-merge.integration.spec.ts#a unit merge moves the identity of identity-bound memberships › a merge whose survivor’s membership an owner already holds › changes nothing: Savannah stays active and Pat’s and Jo’s identities stay Savannah at the versions they had
Source
services-membership:modules/memberships/tests/integration/services/identity-unit-merge.integration.spec.ts#a unit merge moves the identity of identity-bound memberships › the merge of Macon into Atlanta › makes Atlanta the identity of Kim’s membership, at the next version
07 Merged record mutations are refusededgeapinegativetest
Proves
BR-CAP-MBR-STR-003-09 AS-JNY-MBR-STR-003-03
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Try replacing details, relocating, deactivating and merging the merged source.
Expected
Every attempt returns the merged-unit refusal.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/acceptance/structure/MBR-ACC-0018.acceptance.ts#MBR-ACC-0018 Savannah Chapter is merged into Atlanta
Source
services-membership:tests/acceptance/structure/MBR-ACC-0018.acceptance.ts#MBR-ACC-0018 Savannah Chapter is merged into Atlanta
08 Merge history prevents source removalinteractionapitest
Proves
BR-CAP-MBR-STR-003-04 BR-CAP-MBR-STR-004-04
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Merge a source whose member affiliation transfers to the survivor, then attempt source deletion.
Expected
The retained source affiliation prevents deletion even though the current roster has moved.
Data
Separate fixture records for the accepted and refused operations.
Bound to
services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#refuses to delete Savannah while affiliations name it (unit_has_affiliations)
Source
services-membership:docs/migrations/unit-merge/README.md#The behaviour,services-membership:modules/structure/tests/integration/services/tree/unit-merge.integration.spec.ts#the tree edits affiliations bind › delete and deactivate › refuses to delete a unit a closed affiliation names, 409 unit_has_affiliations with the count,services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#refuses to delete Savannah while affiliations name it (unit_has_affiliations)
09 Merge leaves local dues and settlement work on the sourceinteractionapitest
Proves
BR-CAP-MBR-STR-003-07 BR-CAP-MBR-STR-008-09
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Prepare source dues and financial settings, merge the source, inspect the returned follow-up list and reread the source facets.
Expected
The result identifies the source’s dues and settings as follow-up work; both remain readable on the source.
Data
Separate fixture records for the accepted and refused operations.
Bound to
services-membership:tests/acceptance/structure/MBR-ACC-0018.acceptance.ts#not_moved: the dues product, the settings, the legal-entity link
Source
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › merge › moves the children under the survivor, marks the unit merged and lists what it left,services-membership:modules/structure/services/persistence/organizational-unit-dues-products.ts:createDuesProduct,services-membership:tests/acceptance/structure/MBR-ACC-0018.acceptance.ts#not_moved: the dues product, the settings, the legal-entity link
10 Workspace authority gates this capabilitypermissionapinegativeproposed
Proves
BR-CAP-MBR-STR-019-01
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Exercise the capability’s exposed operations with its read-only and management callers, then repeat with application access removed, an unlicensed workspace and an unavailable workspace.
Expected
Each named operation requires its declared authority; admission failures occur before any record or calculated result is exposed.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:tests/unit/route-authorization.spec.ts#route authorization: every Membership operation names its permission › requires membership.structure.read of every structure read and membership.structure.manage of every change,services-membership:modules/configuration/aws/api/configuration.routes.ts:configurationModuleRoutes,services-membership:tests/e2e/terms-api.e2e.spec.ts#the terms API, end to end in process › refuses a caller who holds no key in the tenant

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.