import assert from "node:assert/strict"; import test from "node:test"; import { OPERATOR_QUEUE_REASON, operatorQueueActionBlocks, type OperatorQueueFacts, type OperatorQueuePermissions } from "../src/features/operator/operatorQueueModel.ts"; const everything: OperatorQueueFacts = { retryable: 2, outcomeUnknown: 1, queueableUnattempted: 3, queued: 4, paused: 5, cancellable: 14 }; const allPermissions: OperatorQueuePermissions = { canRead: true, canControl: true, canRetry: true, canQueue: true, canReconcile: true }; test("enables every fixed queue action when state and permission allow it", () => { assert.deepEqual(operatorQueueActionBlocks(everything, allPermissions), { details: null, pause: null, resume: null, retry: null, "queue-unsent": null, reconcile: null, cancel: null }); }); test("retains every unavailable action with a state-specific explanation", () => { assert.deepEqual( operatorQueueActionBlocks( { retryable: 0, outcomeUnknown: 0, queueableUnattempted: 0, queued: 0, paused: 0, cancellable: 0 }, allPermissions ), { details: null, pause: OPERATOR_QUEUE_REASON.noQueued, resume: OPERATOR_QUEUE_REASON.noPaused, retry: OPERATOR_QUEUE_REASON.noFailed, "queue-unsent": OPERATOR_QUEUE_REASON.noUnsent, reconcile: OPERATOR_QUEUE_REASON.noUnknown, cancel: OPERATOR_QUEUE_REASON.noCancellable } ); }); test("permission explanations take precedence over queue state", () => { const noPermissions: OperatorQueuePermissions = { canRead: false, canControl: false, canRetry: false, canQueue: false, canReconcile: false }; const blocks = operatorQueueActionBlocks(everything, noPermissions); assert.deepEqual( Object.values(blocks), Array.from({ length: 7 }, () => OPERATOR_QUEUE_REASON.permissionDenied) ); });