Skip to content

ATS-MBR-STR-012Offer membership through an Accounting product: Capability Test Specification

Markdown

ATS-MBR-STR-012

Offer membership through an Accounting product: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaMembershipModuleOrganizational Structure, Membership Configuration and TermsRevision2

Read atservices-membership 5994c270react-console baf6dae3

Coverage

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

Test Scenarios

15 scenarios proving CAP-MBR-STR-012; 7 bound to an existing test.

01 Invalid product identities leave no packagevalidationapinegativetest
Proves
BR-CAP-MBR-STR-012-01 AS-JNY-MBR-STR-004-02
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Attempt package creation without identity, with an absent product and with the wrong product type.
Expected
Each attempt returns its validation problem and creates no extension.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses a package create that names no product id: there is no name to make one from
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses a package whose product Accounting does not have, 400
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses a package on a product of another type, 400
services-membership:tests/acceptance/configuration/MBR-ACC-0099.acceptance.ts#MBR-ACC-0099: A package is created as the extension of a product Accounting already holds: no id, an unknown product, a product of another type and the product's own fields are each refused, and the created package answers the product's name, status, visibility and audiences
Source
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses a package create that names no product id: there is no name to make one from
02 Shared product fields remain Accounting-ownedboundaryapinegativetest
Proves
BR-CAP-MBR-STR-012-02
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Submit a package name and separately read an existing package.
Expected
The write rejects the shared field while the read returns product name, status and visibility.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses the common fields a package no longer carries of its own (they are the product’s)
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › extends a product of type membership_package and answers the product’s name, status and visibility as the package’s
Source
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses the common fields a package no longer carries of its own (they are the product’s)
03 Product retirement affects package availabilitytransitionapinegativetest
Proves
BR-CAP-MBR-STR-012-03
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Make the product inactive, inspect the active package list and attempt a staff renewal.
Expected
The extension no longer appears active and the renewal fails.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › lists packages with the product’s fields and filters is_active by the product’s status
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses a renewal term on a package whose product Accounting deactivated
services-membership:tests/acceptance/configuration/MBR-ACC-0091.acceptance.ts#MBR-ACC-0091: A package follows its Accounting product: when Accounting deactivates, retires or deletes the product the package answers that status, sells no term and writes nothing in Membership
Source
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › lists packages with the product’s fields and filters is_active by the product’s status
04 A product cannot receive a second package extensioninvariantapinegativetest
Proves
BR-CAP-MBR-STR-012-04
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Repeat creation under an already extended product identity.
Expected
The existing extension remains and duplicate creation fails.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses a second extension of the same product: the package id is the product id
Source
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses a second extension of the same product: the package id is the product id
05 Package classification matches its programvalidationapinegativetest
Proves
BR-CAP-MBR-STR-012-05 INV-DOM-MBR-STR-004-01
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Submit one program with another program’s classification.
Expected
The classification field is named in the refusal and no package is retained.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a package of a type of another program 400 naming membership_type_id, and writes no package nor unit rule
Source
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a package of a type of another program 400 naming membership_type_id, and writes no package nor unit rule
06 Renewal targets cannot be self or cross-programvalidationapinegativetest
Proves
BR-CAP-MBR-STR-012-06
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Compare renewal targets pointing to the package itself and to a different program’s package.
Expected
Both cases report an invalid renewal target.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a package renewing into itself 400 naming renews_into_package_id
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a package renewing into another program’s package 400 naming renews_into_package_id
Source
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a package renewing into itself 400 naming renews_into_package_id
07 Policy-set references require an existing setvalidationapinegativetest
Proves
BR-CAP-MBR-STR-012-08
Preconditions
An isolated Membership-licensed workspace contains the relevant records, with caller permissions selected for the case.
Steps
Create an otherwise valid package with an absent policy set.
Expected
The response names the policy-set field and rejects creation.
Data
The FAA example records or equivalent records prepared within the isolated workspace.
Bound to
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a change policy set that does not exist 400 naming change_policy_set_id
Source
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a change policy set that does not exist 400 naming change_policy_set_id
08 Removing an unused extension preserves its producttransitionapiproposed
Proves
BR-CAP-MBR-STR-012-09
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Create an unused package extension and remove it at the version just read; inspect the underlying product.
Expected
The package is absent and the product retains its identity and shared fields.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:modules/configuration/services/persistence/configuration-store.ts:configurationStore
09 Package presentation has a zero display positionedgeapinegativeproposed
Proves
BR-CAP-MBR-STR-012-10
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Read extensions whose underlying products have different labels and inspect their returned display positions.
Expected
Both extension answers carry zero display position.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:modules/structure/ports/accounting-products.ts:accountingProductsFromTables
10 An empty filtered package page still continuesboundaryapiproposed
Proves
BR-CAP-MBR-STR-012-11
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Prepare three package references with inactive products on the first page and an active product on a later page; follow the active-only cursor.
Expected
The empty first answer supplies a cursor; continuation eventually reaches the active example.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:modules/configuration/services/persistence/membership-packages.ts:listMembershipPackages
11 Invalid grants roll back the package aggregateinteractionapiproposed
Proves
BR-CAP-MBR-STR-012-05 BR-CAP-MBR-STR-013-02
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Create a package with a valid primary program and a grant paired with another program’s type.
Expected
The refusal names the grant classification and leaves no package or child rows.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a package of a type of another program 400 naming membership_type_id, and writes no package nor unit rule,services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a grant whose type is not of the granted program 400 naming grants: membership_type_id, and writes no package
12 Package references protect stored change policiesinteractionapiproposed
Proves
BR-CAP-MBR-STR-012-08 BR-CAP-MBR-STR-014-01
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Save a policy set, reference it from a package and try deleting the policy set at its current version.
Expected
The package remains readable and the referenced policy set cannot be removed.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a change policy set that does not exist 400 naming change_policy_set_id,services-membership:modules/configuration/services/configuration/configuration-records.ts:policySetResource
13 A partial offering edit validates the complete term ruleinteractionapiproposed
Proves
BR-CAP-MBR-STR-012-01 BR-CAP-MBR-STR-015-02
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Save an annual anniversary package, change only its basis to calendar without the required month and then submit a valid combined correction.
Expected
The incomplete combined rule fails without altering the package; the valid correction saves and computes the sample dates.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses a package whose product Accounting does not have, 400,services-membership:modules/configuration/services/configuration/configuration-records.ts:packageResource
14 Accounting activity changes both kinds of extension readsinteractionapiproposed
Proves
BR-CAP-MBR-STR-012-02 BR-CAP-MBR-STR-008-03
Preconditions
An isolated workspace contains the records and current versions needed for the case.
Steps
Prepare package and dues extensions, retire their underlying products and read each extension.
Expected
Both answers reflect Accounting activity without copying product state into Membership configuration.
Data
Separate fixture records for the accepted and refused operations.
Source
services-membership:tests/e2e/packages-as-products.e2e.spec.ts#packages as products, through the API › refuses the common fields a package no longer carries of its own (they are the product’s),services-membership:modules/structure/tests/unit/accounting-products.spec.ts#the Accounting products port › answers a product Accounting no longer has as its id, inactive, hidden, with no product status
15 Workspace authority gates this capabilitypermissionapinegativeproposed
Proves
BR-CAP-MBR-STR-019-02
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.