///
import { WorkflowDefinition } from '@smithers-orchestrator/driver/WorkflowDefinition';
type CoverableWorkflow = WorkflowDefinition | {
readonly default: WorkflowDefinition;
};
type WorkflowCoverageApproval = {
readonly approved: boolean;
readonly note?: string;
readonly decidedBy?: string;
readonly optionKey?: string;
readonly output?: unknown;
};
type WorkflowCoverageApprovalValue = boolean | "approve" | "deny" | WorkflowCoverageApproval;
type WorkflowCoverageApprovalResolver = (context: WorkflowCoverageTaskContext) => WorkflowCoverageApprovalValue | Promise;
type WorkflowCoverageEventResolver = (context: WorkflowCoverageEventContext) => unknown | Promise;
type WorkflowCoverageTaskContext = {
readonly nodeId: string;
readonly label?: string;
readonly iteration: number;
readonly input: unknown;
readonly passIndex: number;
};
type WorkflowCoverageEventContext = WorkflowCoverageTaskContext & {
readonly eventName: string;
readonly correlationId?: string;
};
type WorkflowCoverageOptions = {
readonly input?: unknown;
readonly inputs?: readonly unknown[];
readonly mocks?: Readonly>;
readonly approvals?: WorkflowCoverageApprovalValue | WorkflowCoverageApprovalResolver | Readonly>;
readonly signals?: Readonly>;
readonly events?: Readonly>;
readonly maxLoopIterations?: number;
readonly expectedNodes?: readonly string[];
readonly allowUnreached?: readonly string[];
readonly executeCompute?: boolean;
readonly executeSideEffects?: boolean;
readonly rootDir?: string;
readonly workflowPath?: string | null;
readonly assert?: boolean;
};
type WorkflowCoverageValidation = {
readonly passIndex: number;
readonly nodeId: string;
readonly iteration: number;
readonly valid: boolean;
readonly message?: string;
};
type WorkflowCoverageDecision = {
readonly passIndex: number;
readonly nodeId: string;
readonly iteration: number;
readonly approved: boolean;
readonly note?: string;
readonly decidedBy?: string;
};
type WorkflowCoverageFailure = {
readonly passIndex: number;
readonly nodeId?: string;
readonly code?: string;
readonly message: string;
readonly cause: unknown;
};
type WorkflowCoveragePass = {
readonly passIndex: number;
readonly input: unknown;
readonly status: string;
readonly executed: string[];
readonly outputs: Record;
readonly taskOutputs: Record;
readonly finalOutput: unknown;
readonly definedNodes: string[];
readonly unexecuted: string[];
readonly validations: WorkflowCoverageValidation[];
readonly approvals: WorkflowCoverageDecision[];
readonly errors: WorkflowCoverageFailure[];
readonly unusedMocks: string[];
readonly warnings: string[];
};
type WorkflowCoverageResult = {
readonly status: "finished" | "failed";
readonly passes: WorkflowCoveragePass[];
readonly executed: string[];
readonly outputs: Record;
readonly taskOutputs: Record;
readonly finalOutputs: unknown[];
readonly definedNodes: string[];
readonly coveredNodes: string[];
readonly unexecuted: string[];
readonly unreached: string[];
readonly validations: WorkflowCoverageValidation[];
readonly approvals: WorkflowCoverageDecision[];
readonly errors: WorkflowCoverageFailure[];
readonly allowUnreached: string[];
};
declare class WorkflowCoverageError extends Error {
readonly result: WorkflowCoverageResult;
constructor(message: string, result: WorkflowCoverageResult);
}
declare function coverWorkflow(workflowModule: CoverableWorkflow, options?: WorkflowCoverageOptions): Promise;
declare function expectFullCoverage(result: WorkflowCoverageResult): WorkflowCoverageResult;
export { type CoverableWorkflow, type WorkflowCoverageApproval, type WorkflowCoverageApprovalResolver, type WorkflowCoverageApprovalValue, type WorkflowCoverageDecision, WorkflowCoverageError, type WorkflowCoverageEventContext, type WorkflowCoverageEventResolver, type WorkflowCoverageFailure, type WorkflowCoverageOptions, type WorkflowCoveragePass, type WorkflowCoverageResult, type WorkflowCoverageTaskContext, type WorkflowCoverageValidation, coverWorkflow, expectFullCoverage };