@decaf-ts/utils
Version:
module management utils for decaf-ts
194 lines (193 loc) • 8.22 kB
TypeScript
import { MdTableDefinition } from "./md";
/**
* @interface AddAttachParams
* @description Parameters for adding an attachment to a report
* @summary Interface for attachment parameters
* @memberOf module:utils
*/
export interface AddAttachParams {
attach: string | Buffer;
description: string | object;
context?: any;
bufferFormat?: string;
}
/**
* @interface AddMsgParams
* @description Parameters for adding a message to a report
* @summary Interface for message parameters
* @memberOf module:utils
*/
export interface AddMsgParams {
message: string | object;
context?: any;
}
/**
* @typedef {("json"|"image"|"text"|"md")} PayloadType
* @description Types of payloads that can be handled
* @summary Union type for payload types
* @memberOf module:utils
*/
export type PayloadType = "json" | "image" | "text" | "md";
/**
* @description Environment variable key for Jest HTML reporters temporary directory path
* @summary Constant defining the environment variable key for Jest HTML reporters
* @const JestReportersTempPathEnvKey
* @memberOf module:utils
*/
export declare const JestReportersTempPathEnvKey = "JEST_HTML_REPORTERS_TEMP_DIR_PATH";
/**
* @description Test reporting utility class for managing test results and evidence
* @summary A comprehensive test reporter that handles various types of test artifacts including messages,
* attachments, data, images, tables, and graphs. It provides methods to report and store test evidence
* in different formats and manages dependencies for reporting functionality.
*
* @template T - Type of data being reported
* @param {string} [testCase="tests"] - Name of the test case
* @param {string} [basePath] - Base path for storing test reports
* @class
*
* @example
* ```typescript
* const reporter = new TestReporter('login-test');
*
* // Report test messages
* await reporter.reportMessage('Test Started', 'Login flow initiated');
*
* // Report test data
* await reporter.reportData('user-credentials', { username: 'test' }, 'json');
*
* // Report test results table
* await reporter.reportTable('test-results', {
* headers: ['Step', 'Status'],
* rows: [
* { Step: 'Login', Status: 'Pass' },
* { Step: 'Validation', Status: 'Pass' }
* ]
* });
*
* // Report test evidence
* await reporter.reportAttachment('Screenshot', screenshotBuffer);
* ```
*
* @mermaid
* sequenceDiagram
* participant Client
* participant TestReporter
* participant FileSystem
* participant Dependencies
*
* Client->>TestReporter: new TestReporter(testCase, basePath)
* TestReporter->>FileSystem: Create report directory
*
* alt Report Message
* Client->>TestReporter: reportMessage(title, message)
* TestReporter->>Dependencies: Import helpers
* TestReporter->>FileSystem: Store message
* else Report Data
* Client->>TestReporter: reportData(reference, data, type)
* TestReporter->>Dependencies: Process data
* TestReporter->>FileSystem: Store formatted data
* else Report Table
* Client->>TestReporter: reportTable(reference, tableDef)
* TestReporter->>Dependencies: Convert to MD format
* TestReporter->>FileSystem: Store table
* end
*/
export declare class TestReporter {
protected testCase: string;
protected basePath: string;
/**
* @description Function for adding messages to the test report
* @summary Static handler for processing and storing test messages
* @type {function(AddMsgParams): Promise<void>}
*/
protected static addMsgFunction: (params: AddMsgParams) => Promise<void>;
/**
* @description Function for adding attachments to the test report
* @summary Static handler for processing and storing test attachments
* @type {function(AddAttachParams): Promise<void>}
*/
protected static addAttachFunction: (params: AddAttachParams) => Promise<void>;
/**
* @description Map of dependencies required by the reporter
* @summary Stores the current state of dependencies
* @type {SimpleDependencyMap}
*/
private deps?;
constructor(testCase?: string, basePath?: string);
/**
* @description Imports required helper functions
* @summary Ensures all necessary dependencies are available and imports helper functions
* @return {Promise<void>} Promise that resolves when helpers are imported
*/
private importHelpers;
/**
* @description Reports a message to the test report
* @summary Adds a formatted message to the test report with an optional title
* @param {string} title - Title of the message
* @param {string | object} message - Content of the message
* @return {Promise<void>} Promise that resolves when the message is reported
*/
reportMessage(title: string, message: string | object): Promise<void>;
/**
* @description Reports an attachment to the test report
* @summary Adds a formatted message to the test report with an optional title
* @param {string} title - Title of the message
* @param {string | Buffer} attachment - Content of the message
* @return {Promise<void>} Promise that resolves when the message is reported
*/
reportAttachment(title: string, attachment: string | Buffer): Promise<void>;
/**
* @description Reports data with specified type
* @summary Processes and stores data in the test report with formatting
* @param {string} reference - Reference identifier for the data
* @param {string | number | object} data - Data to be reported
* @param {PayloadType} type - Type of the payload
* @param {boolean} [trim=false] - Whether to trim the data
* @return {Promise<void>} Promise that resolves when data is reported
*/
protected report(reference: string, data: string | number | object | Buffer, type: PayloadType, trim?: boolean): Promise<void>;
/**
* @description Reports data with a specified type
* @summary Wrapper method for reporting various types of data
* @param {string} reference - Reference identifier for the data
* @param {string | number | object} data - Data to be reported
* @param {PayloadType} [type="json"] - Type of the payload
* @param {boolean} [trim=false] - Whether to trim the data
* @return {Promise<void>} Promise that resolves when data is reported
*/
reportData(reference: string, data: string | number | object, type?: PayloadType, trim?: boolean): Promise<void>;
/**
* @description Reports a JSON object
* @summary Convenience method for reporting JSON objects
* @param {string} reference - Reference identifier for the object
* @param {object} json - JSON object to be reported
* @param {boolean} [trim=false] - Whether to trim the object
* @return {Promise<void>} Promise that resolves when object is reported
*/
reportObject(reference: string, json: object, trim?: boolean): Promise<void>;
/**
* @description Reports a table in markdown format
* @summary Converts and stores a table definition in markdown format
* @param {string} reference - Reference identifier for the table
* @param {MdTableDefinition} tableDef - Table definition object
* @return {Promise<void>} Promise that resolves when table is reported
*/
reportTable(reference: string, tableDef: MdTableDefinition): Promise<void>;
/**
* @description Reports a graph using Chart.js
* @summary Generates and stores a graph visualization
* @param {string} reference - Reference identifier for the graph
* @param {any} config - Chart.js configuration object
* @return {Promise<void>} Promise that resolves when graph is reported
*/
reportGraph(reference: string, config: any): Promise<void>;
/**
* @description Reports an image to the test report
* @summary Stores an image buffer in the test report
* @param {string} reference - Reference identifier for the image
* @param {Buffer} buffer - Image data buffer
* @return {Promise<void>} Promise that resolves when image is reported
*/
reportImage(reference: string, buffer: Buffer): Promise<void>;
}