---
id: ATS-CMT-MTG-016
scope: CAP-CMT-MTG-016
product_area: committees
module: meetings
revision: 1
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
- id: ATS-CMT-MTG-016-01
  title: An opening only advertises its own live committee’s seat
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-01
  preconditions: Two committees, one dissolved.
  steps: Create openings for another committee’s seat, a seat with the wrong position, a window closing before it opens, no places, and on the dissolved committee.
  expected: All are refused and nothing is left behind; a proper one takes its seat’s position.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#refuses a seat of another committee
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#refuses a position that is not the seat’s
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#refuses a window that closes before it opens
  - services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#refuses a count of none (400)
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#creates a draft for the seat, taking the seat’s position
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0394.spec.ts#CMT-ACC-0394
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0395.spec.ts#CMT-ACC-0395
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#refuses a seat of another committee
- id: ATS-CMT-MTG-016-02
  title: An opening moves only as its lifecycle allows
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-02
  preconditions: A draft opening.
  steps: Publish, publish again, close, publish the closed one, and cancel a draft.
  expected: Publish and close succeed; the second publish and publishing the closed one are refused and leave it unchanged.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/unit/services/opening-lifecycle.spec.ts#answers the whole grid of statuses and actions as the table says
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#refuses to publish an open opening again
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#refuses to publish a closed opening
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0392.spec.ts#CMT-ACC-0392
  provenance: test
  source: services-committees:modules/recruitment/tests/unit/services/opening-lifecycle.spec.ts#answers the whole grid of statuses and actions as the table says
- id: ATS-CMT-MTG-016-03
  title: A stale opening change is refused
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-03
  preconditions: Two administrators reading one opening.
  steps: Both save a change.
  expected: The second is refused, re-reads and recovers.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#refuses a replace against a stale version
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0414.spec.ts#CMT-ACC-0414
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#refuses a replace against a stale version
- id: ATS-CMT-MTG-016-04
  title: The chair and liaison hear of a published opening
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-04
  preconditions: A committee with a chair and a staff liaison.
  steps: Publish an opening.
  expected: Each is told once and a published event is recorded.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#tells the committee’s chair (its President) and its staff liaison, once each
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#states committees.opening.published with the opening as Volunteers reads it
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#tells the committee’s chair (its President) and its staff liaison, once each
- id: ATS-CMT-MTG-016-05
  title: Two appointments fill a two-place opening, and nothing else does
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-05
  preconditions: A two-place director opening and a one-place seat opening.
  steps: Start an appointment in the seat, a director appointment, a pending offer and a staff liaison; deliver one start twice.
  expected: The seat opening fills; the director opening counts one and stays open; the offer, liaison and the repeat change nothing.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/unit/services/fill-rule.spec.ts#counts the appointment and makes a one-place opening full
  - services-committees:modules/recruitment/tests/unit/services/fill-rule.spec.ts#offers nothing to a staff liaison, adviser or observer
  - services-committees:modules/recruitment/tests/unit/services/fill-rule.spec.ts#changes nothing when the same appointment’s start is delivered again
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#closes the seat’s opening as filled, by Sam’s appointment
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#counts Sam against the two director places and keeps that opening open
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0391.spec.ts#CMT-ACC-0391
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0415.spec.ts#CMT-ACC-0415
  provenance: test
  source: services-committees:modules/recruitment/tests/unit/services/fill-rule.spec.ts#counts the appointment and makes a one-place opening full
- id: ATS-CMT-MTG-016-06
  title: The directory listing decides who sees an opening
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-06
  preconditions: A public board’s opening, a portal-only one and a draft.
  steps: List openings publicly, as a portal member and as a stranger.
  expected: The public list shows only the public one; the portal shows both published ones; the stranger is refused the portal-only one; the draft is never shown.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#shows anyone, through the public route, the public board’s opening alone
  - services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#shows a portal member both published openings, public and portal-only, and not the draft
  - services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#refuses a stranger the portal-only opening, as one that does not exist (404)
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0398.spec.ts#CMT-ACC-0398
  provenance: test
  source: services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#shows anyone, through the public route, the public board’s opening alone
- id: ATS-CMT-MTG-016-07
  title: Interest is one row per member and opening
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-07
  preconditions: A published opening and a portal member.
  steps: Say interested with a note, again with another note, again with none.
  expected: One interest exists, its note replaced each time and cleared by the last.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#records the member’s interest (201)
  - services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#keeps one interest when it is said again, with the new note
  - services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#shows staff the interest with its note
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0400.spec.ts#CMT-ACC-0400
  provenance: test
  source: services-committees:modules/recruitment/tests/e2e/openings.e2e.spec.ts#records the member’s interest (201)
- id: ATS-CMT-MTG-016-08
  title: An opening honours its own window
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-08
  preconditions: An opening whose deadline passed and one opening next month.
  steps: Read the first and start an appointment for each.
  expected: Today the first still reads open and both fill.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0399.spec.ts#CMT-ACC-0399
  provenance: test
  source: react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0399.spec.ts#CMT-ACC-0399
- id: ATS-CMT-MTG-016-09
  title: A dissolved board’s openings leave the website
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-09
  preconditions: A board with a published and a draft opening.
  steps: Dissolve the board and list openings publicly.
  expected: Both openings are cancelled and the public list no longer shows them.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/dissolved-recruitment.integration.spec.ts#cancels the published and the draft opening
  - services-committees:modules/recruitment/tests/integration/services/dissolved-recruitment.integration.spec.ts#no longer lists the opening publicly or in the portal
  - services-committees:modules/recruitment/tests/unit/services/dissolved-recruitment.spec.ts#cancels the draft and open openings, and no other
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0416.spec.ts#CMT-ACC-0416
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/dissolved-recruitment.integration.spec.ts#cancels the published and the draft opening
- id: ATS-CMT-MTG-016-10
  title: A text-only edit keeps the rest of the opening
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-10
  preconditions: A published opening with a seat, two places and a window.
  steps: Change only its text; then clear its close date.
  expected: The text changes and everything else is kept; the close date is cleared.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/edits.integration.spec.ts#keeps the seat, position, places, window and link the text-only edit did not carry
  - services-committees:modules/recruitment/tests/integration/services/edits.integration.spec.ts#clears the close date it carried as null and keeps the open date, the places and the description
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0393.spec.ts#CMT-ACC-0393
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/edits.integration.spec.ts#keeps the seat, position, places, window and link the text-only edit did not carry
- id: ATS-CMT-MTG-016-11
  title: Another association sees no opening
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-11
  preconditions: An opening in one workspace.
  steps: Read and list it from another.
  expected: Nothing is found.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#answers it from another tenant as one that does not exist
  - services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#lists none of it from another tenant
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0402.spec.ts#CMT-ACC-0402
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#answers it from another tenant as one that does not exist
- id: ATS-CMT-MTG-016-12
  title: A unit-scoped grant does not publish an opening
  level: api
  proves:
  - BR-CAP-CMT-MTG-016-12
  preconditions: A chair granted openings management for their unit only.
  steps: Publish their own committee’s opening.
  expected: It is refused; the same key held association-wide succeeds.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0404.spec.ts#CMT-ACC-0404
  provenance: test
  source: react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0404.spec.ts#CMT-ACC-0404
- id: ATS-CMT-MTG-016-13
  title: 'Journey end state: the opening fills once, however often the appointment’s start is reported'
  level: api
  proves:
  - AS-JNY-CMT-MTG-005-02
  preconditions: The journey’s earlier steps have run.
  steps: Run the journey to this point and read the records.
  expected: The opening fills once, however often the appointment’s start is reported.
  negative: false
  data_needs: The journey’s fixtures in a disposable workspace
  bound_to:
  - 'services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#changes neither opening when the same start is delivered again (premise: the replay was delivered)'
  provenance: test
  source: 'services-committees:modules/recruitment/tests/integration/services/openings.integration.spec.ts#changes neither opening when the same start is delivered again (premise: the replay was delivered)'
- id: ATS-CMT-MTG-016-14
  title: 'Journey end state: a filled opening no longer shows on the website or in the portal'
  level: api
  proves:
  - AS-JNY-CMT-MTG-005-03
  preconditions: The journey’s earlier steps have run.
  steps: Run the journey to this point and read the records.
  expected: A filled opening no longer shows on the website or in the portal.
  negative: false
  data_needs: The journey’s fixtures in a disposable workspace
  bound_to:
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0391.spec.ts#CMT-ACC-0391
  provenance: test
  source: react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0391.spec.ts#CMT-ACC-0391
evidence:
- 'services-committees at 36129c24: openings routes and schemas, openings, interests and portal persistence, opening lifecycle, fill rule and subscriber, notices, dissolved recruitment, openings and interests tables, CMTE-M1 and CMTE-M5 records'
- 'react-console at baf6dae3: acceptance inventory CAP-CMT-REC-001 to 006, 009, 010, 020, 021 and the recruitment journeys cited'
---

# Advertise a committee opening and see who is interested: Acceptance Test Set

## Coverage

| Rule | Proved by |
|---|---|
| `BR-CAP-CMT-MTG-016-01` | `ATS-CMT-MTG-016-01` |
| `BR-CAP-CMT-MTG-016-02` | `ATS-CMT-MTG-016-02` |
| `BR-CAP-CMT-MTG-016-03` | `ATS-CMT-MTG-016-03` |
| `BR-CAP-CMT-MTG-016-04` | `ATS-CMT-MTG-016-04` |
| `BR-CAP-CMT-MTG-016-05` | `ATS-CMT-MTG-016-05` |
| `BR-CAP-CMT-MTG-016-06` | `ATS-CMT-MTG-016-06` |
| `BR-CAP-CMT-MTG-016-07` | `ATS-CMT-MTG-016-07` |
| `BR-CAP-CMT-MTG-016-08` | `ATS-CMT-MTG-016-08` |
| `BR-CAP-CMT-MTG-016-09` | `ATS-CMT-MTG-016-09` |
| `BR-CAP-CMT-MTG-016-10` | `ATS-CMT-MTG-016-10` |
| `BR-CAP-CMT-MTG-016-11` | `ATS-CMT-MTG-016-11` |
| `BR-CAP-CMT-MTG-016-12` | `ATS-CMT-MTG-016-12` |
