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-097
Transitiongap: FND-MBR-MEM-097
Validationcovered
Permissiongap: FND-MBR-MEM-097
Edgegap: FND-MBR-MEM-097
Failuregap: FND-MBR-MEM-097
Boundarycovered
Concurrencygap: FND-MBR-MEM-097
Invariantgap: FND-MBR-MEM-097
Interactioncovered
Test Scenarios
14 scenarios proving CAP-MBR-MEM-015; 8 bound to an existing test.
01A grant reaches its unit and the units below, never a sibling or parentpermissionunittest
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "Evaluate what ALL, NONE, a region grant and a chapter grant reach.",
"expect": "ALL every unit, NONE nothing, a region its chapters, a chapter neither its sibling nor its parent.",
"provenance": "test",
"source": [
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#reaches every unit and every chain with ALL",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#reaches nothing with NONE",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#reaches a unit below a granted one through the closure (a region officer, a chapter)",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#does not reach a sibling or a parent of the granted unit"
]
}
]
Expected
ALL every unit, NONE nothing, a region its chapters, a chapter neither its sibling nor its parent.
Data
FAA programs, packages, units and members from the integration seed.
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "Compute the chain for affiliation-only, identity-only, both, transferred, pending and cancelled cases on three dates; compare the database with the rule.",
"expect": "The database and the rule agree for every membership; pending and cancelled terms add nothing.",
"provenance": "test",
"source": [
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#agrees with the in-memory rule for every membership, on three dates, with grace on and off",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#holds an affiliation’s unit and its ancestors on a day its term covers",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#follows a transfer by date: as of 2027-02-01 the new unit, as of 2026-10-15 the old one",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#ignores pending and cancelled terms"
]
}
]
Expected
The database and the rule agree for every membership; pending and cancelled terms add nothing.
Data
FAA programs, packages, units and members from the integration seed.
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "List as ALL, Eastern, Atlanta, Western and NONE, whole and a page at a time.",
"expect": "Each set's members exactly, the same however paged.",
"provenance": "test",
"source": [
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#lists exactly the memberships IN{eastern} reaches, the same in one page and a page at a time",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#lists exactly the memberships IN{atl} reaches, the same in one page and a page at a time",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#fills every page from the memberships in scope (the predicate is in the WHERE, not after the LIMIT)",
"services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#lists the Eastern members for Dana: Jo, and not Sam"
]
}
]
Expected
Each set's members exactly, the same however paged.
Data
FAA programs, packages, units and members from the integration seed.
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "The Atlanta officer reads Jo and Sam; the Eastern officer reads Jo.",
"expect": "Atlanta sees Jo with Savannah out of scope and does not find Sam; Eastern sees both ties in scope.",
"provenance": "test",
"source": [
"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",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#marks both of Jo’s affiliations in scope for the Eastern officer",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses the Atlanta officer Sam as not found",
"services-membership:tests/e2e/s08-cross-chapter-restrictions.e2e.spec.ts#reads Jo, the Savannah affiliation shown and marked out of scope"
]
}
]
Expected
Atlanta sees Jo with Savannah out of scope and does not find Sam; Eastern sees both ties in scope.
Data
FAA programs, packages, units and members from the integration seed.
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "Read Gil, in grace, with the roster rule off and on, and after grace ends.",
"expect": "Out with the rule off; in, in his term's last-day units, with it on; out once grace ends.",
"provenance": "test",
"source": [
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#leaves a member in grace out when the roster rule excludes grace",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#keeps a member in grace, in the units of the term’s last day, when the roster rule includes grace",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#drops a member whose grace has run out, even with grace included",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#adds Gil to the Atlanta officer’s list when the roster rule includes grace"
]
}
]
Expected
Out with the rule off; in, in his term's last-day units, with it on; out once grace ends.
Data
FAA programs, packages, units and members from the integration seed.
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "The Atlanta officer ends Jo's Savannah row, transfers Atlanta to San Francisco, makes Atlanta primary over Savannah, and ends a row of a member not yet in force.",
"expect": "The first three requests are refused for the inaccessible units; the not-yet-visible member is not found before version checking. Staff bypass officer reach but remain subject to version and affiliation checks.",
"provenance": "test",
"source": [
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses the Atlanta officer ending Jo’s Savannah row, out_of_scope naming Savannah",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses the Atlanta officer a transfer of the Atlanta row to San Francisco, naming San Francisco",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses set_primary of the Atlanta row while the Savannah row would lose the flag",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses the Atlanta officer ending the Atlanta row as not found, and leaves the row",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#answers not_found, not allowed, for a membership whose chain the set does not reach although the set holds the named unit"
]
}
]
Expected
The first three requests are refused for the inaccessible units; the not-yet-visible member is not found before version checking. Staff bypass officer reach but remain subject to version and affiliation checks.
Data
FAA programs, packages, units and members from the integration seed.
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "An officer with broad unit grants terminates, creates, suspends, sweeps and configures.",
"expect": "Each is refused before it is handled.",
"provenance": "test",
"source": [
"services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#does not reach a staff operation: terminating Jo’s term is refused before the handler",
"services-membership:tests/e2e/s08-cross-chapter-restrictions.e2e.spec.ts#refuses the tenant-level cancel (terminate) of Jo’s term 403 before the handler",
"services-membership:tests/acceptance/security/MBR-ACC-0473.acceptance.ts#MBR-ACC-0473"
]
}
]
Expected
Each is refused before it is handled.
Data
FAA programs, packages, units and members from the integration seed.
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "Replace the settings, collide two administrators, and send an oversized document.",
"expect": "The first applies, the stale one is refused, the oversized one is refused naming the bound.",
"provenance": "proposed",
"source": "services-membership:tests/e2e/database-refusals.e2e.spec.ts#refuses 100 roles of 50 hundred-character fields 400 naming the 32768-byte bound, and saves nothing"
}
]
Expected
The first applies, the stale one is refused, the oversized one is refused naming the bound.
Data
FAA programs, packages, units and members from the integration seed.
The well-known FAA workspace fixtures, or a workspace the test builds from them.
Steps
[
{
"do": "Read the roster during an appointment's grace, after it ends, and as the successor before and after their start.",
"expect": "Answered, refused, refused, answered.",
"provenance": "test",
"source": [
"services-membership:tests/e2e/s12-expiring-appointment.e2e.spec.ts#answers Lee’s roster while the assignment is within its grace",
"services-membership:tests/e2e/s12-expiring-appointment.e2e.spec.ts#refuses Lee’s roster once the exclusive valid_until has passed",
"services-membership:tests/e2e/s12-expiring-appointment.e2e.spec.ts#refuses the successor before the assignment’s valid_from",
"services-membership:tests/e2e/s12-expiring-appointment.e2e.spec.ts#answers the successor from the assignment’s valid_from, with no end yet"
]
}
]
Expected
Answered, refused, refused, answered.
Data
FAA programs, packages, units and members from the integration seed.
An officer reaches a chapter whose member has just expired.
Steps
[
{
"do": "Read and list the member with grace scope disabled and enabled, then move beyond the grace end.",
"expect": "Enabled grace includes the member during grace; the member leaves that reach after grace ends.",
"provenance": "proposed",
"source": [
"services-membership:modules/memberships/tests/integration/db/membership-functions.integration.spec.ts#answers Sam grace, lapsed, then active across the lapse and rejoin (scenario 4)",
"services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#leaves a member in grace out when the roster rule excludes grace"
]
}
]
Expected
Enabled grace includes the member during grace; the member leaves that reach after grace ends.
Data
An isolated workspace with the specified membership, package, chapter and partner-port fixtures.
An officer reaches only one of a member’s two chapters.
Steps
[
{
"do": "Try to make that chapter primary when the other would lose its flag, then repeat as an officer reaching both.",
"expect": "The first request changes neither row; the second can change the primary designation.",
"provenance": "proposed",
"source": [
"services-membership:modules/memberships/tests/integration/services/affiliations.integration.spec.ts#makes an affiliation the primary of its type and the other one no longer",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses the Atlanta officer ending Jo’s Savannah row, out_of_scope naming Savannah"
]
}
]
Expected
The first request changes neither row; the second can change the primary designation.
Data
An isolated workspace with the specified membership, package, chapter and partner-port fixtures.
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
13Use the same reach for reading and updating a memberinteractionapiproposed
An officer can read one member but cannot reach a sibling chapter’s member.
Steps
[
{
"do": "Read both, then request allowed contact changes for both through the recording CRM port.",
"expect": "Only the reachable member’s allowed change reaches CRM; the other reads and updates as not found.",
"provenance": "proposed",
"source": [
"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",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses a field outside the list, field_not_allowed naming it, and sends nothing"
]
}
]
Expected
Only the reachable member’s allowed change reaches CRM; the other reads and updates as not found.
Data
An isolated workspace with the specified membership, package, chapter and partner-port fixtures.
An officer reaches a chapter containing a multi-chapter member.
Steps
[
{
"do": "List the officer’s roster, request its export, then withdraw the officer’s appointment before generation.",
"expect": "The export retains the originally captured membership set and adds no member outside that set.",
"provenance": "proposed",
"source": [
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#lists exactly the memberships IN{eastern} reaches, the same in one page and a page at a time",
"services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#captures the ids the requester’s set reaches at request time"
]
}
]
Expected
The export retains the originally captured membership set and adds no member outside that set.
Data
An isolated workspace with the specified membership, package, chapter and partner-port fixtures.