---
id: ATS-MBR-MEM-015
scope: CAP-MBR-MEM-015
product_area: membership
module: memberships
revision: 1
status: proposed
approved_by:
approved_at:
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-MBR-MEM-015-01
    title: "A grant reaches its unit and the units below, never a sibling or parent"
    level: unit
    proves:
      - BR-CAP-MBR-MEM-015-01
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "Evaluate what ALL, NONE, a region grant and a chapter grant reach."
    expected: "ALL every unit, NONE nothing, a region its chapters, a chapter neither its sibling nor its parent."
    negative: false
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
    provenance: test
    source: "services-membership:modules/memberships/tests/unit/unit-scope.spec.ts#reaches every unit and every chain with ALL"
  - id: ATS-MBR-MEM-015-02
    title: "A membership's units on a date come from its ties and identity in force"
    level: api
    proves:
      - BR-CAP-MBR-MEM-015-02
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "Compute the chain for affiliation-only, identity-only, both, transferred, pending and cancelled cases on three dates; compare the database with the rule."
    expected: "The database and the rule agree for every membership; pending and cancelled terms add nothing."
    negative: false
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
    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"
  - id: ATS-MBR-MEM-015-03
    title: "Officers' lists are complete pages of their own members"
    level: api
    proves:
      - BR-CAP-MBR-MEM-015-03
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "List as ALL, Eastern, Atlanta, Western and NONE, whole and a page at a time."
    expected: "Each set's members exactly, the same however paged."
    negative: false
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
    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"
  - id: ATS-MBR-MEM-015-04
    title: "Out-of-scope members are not found; visible members mark each tie"
    level: api
    proves:
      - BR-CAP-MBR-MEM-015-04
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "The Atlanta officer reads Jo and Sam; the Eastern officer reads Jo."
    expected: "Atlanta sees Jo with Savannah out of scope and does not find Sam; Eastern sees both ties in scope."
    negative: false
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
    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"
  - id: ATS-MBR-MEM-015-05
    title: "Members in grace stay in scope only when the workspace says so"
    level: api
    proves:
      - BR-CAP-MBR-MEM-015-05
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "Read Gil, in grace, with the roster rule off and on, and after grace ends."
    expected: "Out with the rule off; in, in his term's last-day units, with it on; out once grace ends."
    negative: false
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
    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"
  - id: ATS-MBR-MEM-015-06
    title: "Each tie change checks its own units, visibility first"
    level: api
    proves:
      - BR-CAP-MBR-MEM-015-07
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "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."
    expected: "The first three refused out_of_scope naming the outside unit; the last not found, before the version is checked; staff may do all."
    negative: true
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
    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"
  - id: ATS-MBR-MEM-015-07
    title: "No officer reaches a workspace-level operation"
    level: api
    proves:
      - BR-CAP-MBR-MEM-015-08
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "An officer with broad unit grants terminates, creates, suspends, sweeps and configures."
    expected: "Each is refused before it is handled."
    negative: true
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
    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"
  - id: ATS-MBR-MEM-015-08
    title: "Scope settings are replaced whole at the version read, within their bound"
    level: api
    proves:
      - BR-CAP-MBR-MEM-015-09
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "Replace the settings, collide two administrators, and send an oversized document."
    expected: "The first applies, the stale one is refused, the oversized one is refused naming the bound."
    negative: true
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
      - "services-membership:tests/acceptance/security/MBR-ACC-0458.acceptance.ts#MBR-ACC-0458"
    provenance: test
    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"
  - id: ATS-MBR-MEM-015-09
    title: "Authority starts and ends with the appointment"
    level: api
    proves:
      - BR-CAP-MBR-MEM-015-10
    preconditions: "The well-known FAA workspace fixtures, or a workspace the test builds from them."
    steps: "Read the roster during an appointment's grace, after it ends, and as the successor before and after their start."
    expected: "Answered, refused, refused, answered."
    negative: false
    data_needs: "FAA programs, packages, units and members from the integration seed."
    bound_to:
      - "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"
    provenance: test
    source: "services-membership:tests/e2e/s12-expiring-appointment.e2e.spec.ts#answers Lee’s roster while the assignment is within its grace"
evidence:
  - "services-membership at 5994c270e8a37a30f848e99ba5b5ee6b87c08893: the capability sources and the bound test files."
---

# Give officers their own units' members and nothing else: Acceptance Test Set

## Coverage

| Rule | Proved by |
|---|---|
| `BR-CAP-MBR-MEM-015-01` | `ATS-MBR-MEM-015-01` |
| `BR-CAP-MBR-MEM-015-02` | `ATS-MBR-MEM-015-02` |
| `BR-CAP-MBR-MEM-015-03` | `ATS-MBR-MEM-015-03` |
| `BR-CAP-MBR-MEM-015-04` | `ATS-MBR-MEM-015-04` |
| `BR-CAP-MBR-MEM-015-05` | `ATS-MBR-MEM-015-05` |
| `BR-CAP-MBR-MEM-015-06` | no scenario: `FND-MBR-MEM-051` |
| `BR-CAP-MBR-MEM-015-07` | `ATS-MBR-MEM-015-06` |
| `BR-CAP-MBR-MEM-015-08` | `ATS-MBR-MEM-015-07` |
| `BR-CAP-MBR-MEM-015-09` | `ATS-MBR-MEM-015-08` |
| `BR-CAP-MBR-MEM-015-10` | `ATS-MBR-MEM-015-09` |
| `BR-CAP-MBR-MEM-015-11` | no scenario: `FND-MBR-MEM-052` |
