---
id: TST-ACC-TRX-132
title: Invoice actions suite
kind: unit
product_area: accounting
module: transactions
revision: 1
status: draft
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
repository: services-accounting
files:
  - modules/transactions/tests/unit/actions/invoice-actions.spec.js
implements:
  - ATS-ACC-TRX-016-01
implements_parts:
  - scenario: ATS-ACC-TRX-016-01
    assertion: 'it offers a draft issue, void and delete, none held back'
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/unit/actions/invoice-actions.spec.js#it
      offers a draft issue, void and delete, none held back
  - scenario: ATS-ACC-TRX-016-01
    assertion: 'it offers an issued pro forma convert, void and delete'
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/unit/actions/invoice-actions.spec.js#it
      offers an issued pro forma convert, void and delete
  - scenario: ATS-ACC-TRX-016-01
    assertion: >-
      it lists issue, void and delete on a draft locked against updates and
      deletes, each with the lock’s refusal as disabled_reason
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/unit/actions/invoice-actions.spec.js#it
      lists issue, void and delete on a draft locked against updates and
      deletes, each with the lock’s refusal as disabled_reason
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 1
isolation: In-memory fixtures and test-controlled collaborators.
provenance: test
source: >-
  services-accounting:modules/transactions/tests/unit/actions/invoice-actions.spec.js
evidence:
  - provenance: test
    source: >-
      services-accounting:modules/transactions/tests/unit/actions/invoice-actions.spec.js
    assertion_titles:
      - an invoice’s actions
      - 'the state table, for a caller holding every action’s permission'
      - 'offers a draft issue, void and delete, none held back'
      - offers an open invoice with nothing applied void alone
      - 'offers an issued pro forma convert, void and delete'
      - a locked record
      - >-
        lists issue, void and delete on a draft locked against updates and
        deletes, each with the lock’s refusal as disabled_reason
      - >-
        holds convert and void back on an issued pro forma locked against
        updates and deletes, and its delete
      - >-
        does not hold an invoice locked against deletes only back, but its
        delete
    imports:
      - 'const { expect } = require(''chai'');'
      - >-
        const { makeCaller } =
        require('@rhythmsoftware/macroservice-authorization/security-context');
      - 'const { moment } = require(''@rhythmsoftware/macroservice-time/moment'');'
      - >-
        const { INVOICE_ACTIONS } =
        require('../../../services/actions/invoice-actions');
      - >-
        const { availableActionsOf } =
        require('../../../services/actions/record-actions');
    test_double_declarations: []
---

# Invoice actions suite

## Verification Boundary

The suite exercises financial calculations and input contracts in an isolated test process. Registration records the existing executable file; it does not report a run or establish product approval.

## What This Suite Proves

Its cited assertions contribute evidence for action lists explain lifecycle and protection. The structured assertion bindings identify which parts of combined scenarios it executes.

## What It Does Not Prove

Pure calculations and doubled collaborators do not establish database persistence, route authorization or deployed behavior. An unbound feature chain remains proposed, and this registration carries no execution result.

## Real Dependencies and Test Doubles

The imported calculation or contract runs with the fixtures and collaborators declared by the test. The evidence register retains those declarations so the boundaries can be inspected.

## Must Not Be Doubled

The calculation or contract being asserted must remain real; replacing it with a predetermined result removes this suite’s evidence.
