UNPKG

@mbc-cqrs-serverless/core

Version:
137 lines (136 loc) 4.52 kB
/** * 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; };