@mbc-cqrs-serverless/core
Version:
CQRS and event base core
137 lines (136 loc) • 4.52 kB
TypeScript
/**
* AWS Mock Manager
*
* Provides standardized setup and teardown for AWS SDK mock clients
* in integration tests. This eliminates repetitive mock configuration
* across test files and ensures consistent mock behavior.
*
* Usage:
* import { AWSMockManager, createDynamoDBMock } from './utilities/aws-mock-manager'
*
* // Option 1: Use individual mock creators
* const { mock, client, reset, restore } = createDynamoDBMock()
*
* // Option 2: Use the manager for multiple services
* const manager = new AWSMockManager()
* const dynamoDB = manager.getDynamoDB()
* const s3 = manager.getS3()
*
* beforeEach(() => manager.resetAll())
* afterAll(() => manager.restoreAll())
*/
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { S3Client } from '@aws-sdk/client-s3';
import { SESv2Client } from '@aws-sdk/client-sesv2';
import { SFNClient } from '@aws-sdk/client-sfn';
import { SNSClient } from '@aws-sdk/client-sns';
import { SQSClient } from '@aws-sdk/client-sqs';
import { AwsClientStub } from 'aws-sdk-client-mock';
/**
* Configuration options for mock clients
*/
export interface MockClientOptions {
region?: string;
maxAttempts?: number;
retryMode?: 'standard' | 'adaptive';
}
/**
* Result from creating a mock client
*/
export interface MockClientResult<TClient> {
/** The mock client stub for configuring responses */
mock: AwsClientStub<TClient>;
/** The actual client instance configured with the mock */
client: TClient;
/** Reset the mock to clear all configured behaviors */
reset: () => void;
/** Restore the mock and destroy the client */
restore: () => void;
}
/**
* Creates a mocked DynamoDB client
*/
export declare function createDynamoDBMock(options?: MockClientOptions): MockClientResult<DynamoDBClient>;
/**
* Creates a mocked S3 client
*/
export declare function createS3Mock(options?: MockClientOptions): MockClientResult<S3Client>;
/**
* Creates a mocked SQS client
*/
export declare function createSQSMock(options?: MockClientOptions): MockClientResult<SQSClient>;
/**
* Creates a mocked SNS client
*/
export declare function createSNSMock(options?: MockClientOptions): MockClientResult<SNSClient>;
/**
* Creates a mocked Step Functions client
*/
export declare function createSFNMock(options?: MockClientOptions): MockClientResult<SFNClient>;
/**
* Creates a mocked SES v2 client
*/
export declare function createSESMock(options?: MockClientOptions): MockClientResult<SESv2Client>;
/**
* Manages multiple AWS mock clients for test suites
*/
export declare class AWSMockManager {
private dynamoDB?;
private s3?;
private sqs?;
private sns?;
private sfn?;
private ses?;
private options;
constructor(options?: MockClientOptions);
/**
* Gets or creates the DynamoDB mock
*/
getDynamoDB(): MockClientResult<DynamoDBClient>;
/**
* Gets or creates the S3 mock
*/
getS3(): MockClientResult<S3Client>;
/**
* Gets or creates the SQS mock
*/
getSQS(): MockClientResult<SQSClient>;
/**
* Gets or creates the SNS mock
*/
getSNS(): MockClientResult<SNSClient>;
/**
* Gets or creates the Step Functions mock
*/
getSFN(): MockClientResult<SFNClient>;
/**
* Gets or creates the SES mock
*/
getSES(): MockClientResult<SESv2Client>;
/**
* Resets all active mocks
*/
resetAll(): void;
/**
* Restores all mocks and destroys clients
*/
restoreAll(): void;
}
/**
* Creates a standard test setup with beforeEach/afterAll hooks
* for use with Jest describe blocks
*/
export declare function setupAWSMocks(services: Array<'dynamodb' | 's3' | 'sqs' | 'sns' | 'sfn' | 'ses'>, options?: MockClientOptions): {
manager: AWSMockManager;
beforeEachHook: () => void;
afterAllHook: () => void;
};
/**
* Quick setup function that returns individual mocks for common patterns
*/
export declare function createTestMocks<T extends Array<'dynamodb' | 's3' | 'sqs' | 'sns' | 'sfn' | 'ses'>>(services: T, options?: MockClientOptions): {
[K in T[number]]: K extends 'dynamodb' ? MockClientResult<DynamoDBClient> : K extends 's3' ? MockClientResult<S3Client> : K extends 'sqs' ? MockClientResult<SQSClient> : K extends 'sns' ? MockClientResult<SNSClient> : K extends 'sfn' ? MockClientResult<SFNClient> : K extends 'ses' ? MockClientResult<SESv2Client> : never;
} & {
resetAll: () => void;
restoreAll: () => void;
};