The interaction cases test how a shared holding, period, chapter connection or recorded change affects related work. Each case names its related capabilities and workflows in frontmatter. A composite case remains proposed until executable assertions establish every part of its expected outcome.
Coverage
Rulegap: FND-MBR-MEM-090
Transitiongap: FND-MBR-MEM-090
Validationcovered
Permissiongap: FND-MBR-MEM-090
Edgegap: FND-MBR-MEM-090
Failurecovered
Boundarycovered
Concurrencygap: FND-MBR-MEM-090
Invariantgap: FND-MBR-MEM-090
Interactioncovered
Test Scenarios
12 scenarios proving CAP-MBR-MEM-008; 7 bound to an existing test.
01Continue an affiliation in the target unitinteractionapitest
Jo has a primary Atlanta affiliation and a target without dues.
Steps
[
{
"do": "Transfer the Atlanta row on a future date and inspect both rows and the lifecycle event.",
"expect": "The original ends the preceding day; the successor begins on the selected date as primary and retains lineage, with a transfer event.",
"provenance": "test",
"source": [
"services-membership:modules/memberships/tests/integration/services/affiliations.integration.spec.ts#transfers to a chapter that sells no dues: the old row ends the day before, the new one continues it as primary",
"services-membership:tests/acceptance/affiliations/MBR-ACC-0265.acceptance.ts#MBR-ACC-0265: Scenario 6 without dues: Jo moves from Atlanta to San Francisco from a future date, the old row ends the day before, the new row inherits her primary flag, and rosters read correctly on both sides of the date"
]
}
]
Expected
The original ends the preceding day; the successor begins on the selected date as primary and retains lineage, with a transfer event.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
San Francisco charges dues for Jo’s selected package.
Steps
[
{
"do": "Request a direct transfer into San Francisco.",
"expect": "The refusal identifies the component-change amendment and leaves the original affiliation intact.",
"provenance": "test",
"source": [
"services-membership:tests/e2e/s06-midterm-transfer.e2e.spec.ts#refuses the console’s transfer 409 requires_amendment, naming the component_change amendment",
"services-membership:modules/memberships/tests/integration/services/affiliations.integration.spec.ts#refuses to transfer to a chapter that sells dues for the package (requires_amendment)"
]
}
]
Expected
The refusal identifies the component-change amendment and leaves the original affiliation intact.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
Jo has completed a dated transfer from Atlanta to San Francisco and retains Savannah.
Steps
[
{
"do": "Inspect dated affiliation views and unit rosters before and after the effective date.",
"expect": "Atlanta is replaced by San Francisco on the transfer date; Savannah and its ancestor coverage remain.",
"provenance": "test",
"source": [
"services-membership:tests/e2e/s06-midterm-transfer.e2e.spec.ts#answers Atlanta and Savannah as of 2026-10-15, San Francisco and Savannah as of 2027-02-01, the primary moving",
"services-membership:tests/e2e/s06-midterm-transfer.e2e.spec.ts#takes Jo out of Atlanta’s roster from 2027-01-01 and into the Pacific Zone’s, keeping them in the Southeast Zone’s through Savannah"
]
}
]
Expected
Atlanta is replaced by San Francisco on the transfer date; Savannah and its ancestor coverage remain.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
Savannah holds begun, future, duplicate and already closed affiliation cases.
Steps
[
{
"do": "Merge into Atlanta and inspect action counts, resulting rows and lifecycle events.",
"expect": "Begun ties transfer, future ties repoint, duplicates end and closed ties remain; the counts and lifecycle records describe the actions.",
"provenance": "test",
"source": [
"services-membership:modules/memberships/tests/integration/services/affiliations-unit-merge.integration.spec.ts#answers what it did: one moved, one ended on the survivor, one left closed",
"services-membership:modules/memberships/tests/integration/services/affiliations-unit-merge.integration.spec.ts#ends Pat’s Savannah affiliation the day before and continues it in Atlanta as primary",
"services-membership:modules/memberships/tests/integration/services/affiliations-unit-merge.integration.spec.ts#keeps Jo’s Atlanta affiliation as it was and ends her Savannah one, with no new row",
"services-membership:modules/memberships/tests/integration/services/affiliations-unit-merge.integration.spec.ts#leaves Lee’s Savannah affiliation, closed in August, as it was",
"services-membership:modules/memberships/tests/unit/unit-merge.spec.ts#re-points an affiliation that begins on or after the merge’s date",
"services-membership:tests/acceptance/affiliations/MBR-ACC-0277.acceptance.ts#MBR-ACC-0277: Savannah Chapter is merged into Atlanta: Pat's row is transferred, Kim's not-yet-begun row is re-pointed, Jo's duplicate is ended without carrying her primary flag, closed rows and a section's rows are left, and Savannah can be deactivated but never deleted"
]
}
]
Expected
Begun ties transfer, future ties repoint, duplicates end and closed ties remain; the counts and lifecycle records describe the actions.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
The merge would require a different survivor type or introduce a new minimum-count violation.
Steps
[
{
"do": "Attempt the incompatible merge and inspect the reported rules and retained rows.",
"expect": "The merge reports affected memberships and rules without changing units or affiliations.",
"provenance": "proposed",
"source": "services-membership:modules/memberships/services/affiliations/unit-merge.ts:decideMergedTerm"
}
]
Expected
The merge reports affected memberships and rules without changing units or affiliations.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
Kim has a merged-unit identity and another owner already holds the surviving identity in the same program.
Steps
[
{
"do": "Merge the identity unit for Kim, then attempt a merge with a duplicate surviving holding.",
"expect": "Kim’s identity changes at the next version; a duplicate surviving holding causes a refusal without changes.",
"provenance": "proposed",
"source": "services-membership:modules/memberships/services/affiliations/unit-merge.ts:decideIdentityBound"
}
]
Expected
Kim’s identity changes at the next version; a duplicate surviving holding causes a refusal without changes.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
Savannah has been merged but affiliation history still names it.
Steps
[
{
"do": "Request deletion of the referenced merged unit.",
"expect": "Deletion is rejected because affiliation rows still reference the unit.",
"provenance": "test",
"source": [
"services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#refuses to delete Savannah while affiliations name it (unit_has_affiliations)"
]
}
]
Expected
Deletion is rejected because affiliation rows still reference the unit.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
Alex’s officer grant reaches Atlanta while Pat initially belongs only to Savannah.
Steps
[
{
"do": "Read Pat with Alex’s grant before and after the unit merge.",
"expect": "Pat is outside Alex’s scope before the merge and readable through Atlanta afterward.",
"provenance": "test",
"source": [
"services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#shows Alex Jo and not Pat before the merge",
"services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#shows Alex Pat now, with Pat’s Atlanta affiliation in scope"
]
}
]
Expected
Pat is outside Alex’s scope before the merge and readable through Atlanta afterward.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
Atlanta has a membership affiliation and is moved from the Eastern Region to the Pacific Zone.
Steps
[
{
"do": "Inspect Jo’s affiliation identity and current rosters, then query ancestry before the move.",
"expect": "The affiliation keeps its id, version and unit; current ancestry reaches the West, while historical ancestry still reaches the East.",
"provenance": "test",
"source": [
"services-membership:tests/e2e/s09-restructuring.e2e.spec.ts#rewrites no affiliation: Jo’s row is the same row, version and unit",
"services-membership:tests/e2e/s09-restructuring.e2e.spec.ts#shows Jo under the Western Region and the Pacific Zone today, and no longer under the Eastern Region",
"services-membership:tests/e2e/s09-restructuring.e2e.spec.ts#still holds Atlanta among the Eastern Region’s descendants as of the period end"
]
}
]
Expected
The affiliation keeps its id, version and unit; current ancestry reaches the West, while historical ancestry still reaches the East.
Data
Dated affiliations, merge cases, identity-bound memberships and officer grants required by the selected operation.
An affiliation has a successor created by transfer.
Steps
[
{
"do": "Attempt to withdraw the predecessor, then end it on a day it held.",
"expect": "Withdrawal is refused naming the successor; an allowed end preserves the lineage.",
"provenance": "proposed",
"source": [
"services-membership:modules/memberships/tests/integration/services/affiliation-withdrawal-continued.integration.spec.ts#refuses to withdraw the continued row, naming the affiliation that continues it, and keeps the row",
"services-membership:modules/memberships/tests/integration/services/affiliations.integration.spec.ts#transfers to a chapter that sells no dues: the old row ends the day before, the new one continues it as primary"
]
}
]
Expected
Withdrawal is refused naming the successor; an allowed end preserves the lineage.
Data
An isolated workspace with the specified membership, package, chapter and partner-port fixtures.
A member has a chapter affiliation and the target chapter charges dues.
Steps
[
{
"do": "Try the direct transfer and checkout preparation for an immediate chapter change.",
"expect": "Both identify the amendment requirement and leave the existing period and chapter rows unchanged.",
"provenance": "proposed",
"source": [
"services-membership:tests/e2e/s06-midterm-transfer.e2e.spec.ts#refuses the console’s transfer 409 requires_amendment, naming the component_change amendment",
"services-membership:modules/commerce-participant/tests/unit/eligibility.spec.ts#refuses an immediate upgrade as requires_amendment, naming prepare_change"
]
}
]
Expected
Both identify the amendment requirement and leave the existing period and chapter rows unchanged.
Data
An isolated workspace with the specified membership, package, chapter and partner-port fixtures.
Source
services-membership:tests/e2e/s06-midterm-transfer.e2e.spec.ts#refuses the console’s transfer 409 requires_amendment, naming the component_change amendment,services-membership:modules/commerce-participant/tests/unit/eligibility.spec.ts#refuses an immediate upgrade as requires_amendment, naming prepare_change
12Change officer visibility through the surviving unitinteractionapiproposed
The surviving chapter officer cannot read a source-chapter member.
Steps
[
{
"do": "Merge the source chapter into the survivor, then read the moved member and list both chapters.",
"expect": "The surviving officer can read the moved member and the current survivor roster includes that member.",
"provenance": "proposed",
"source": [
"services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#shows Alex Jo and not Pat before the merge",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#reads Jo for the Atlanta officer, the Savannah affiliation marked out of scope"
]
}
]
Expected
The surviving officer can read the moved member and the current survivor roster includes that member.
Data
An isolated workspace with the specified membership, package, chapter and partner-port fixtures.
Source
services-membership:tests/e2e/s13-unit-merge.e2e.spec.ts#shows Alex Jo and not Pat before the merge,services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#reads Jo for the Atlanta officer, the Savannah affiliation marked out of scope