UNPKG

@dbs-portal/core-api

Version:

HTTP client and API utilities for DBS Portal

183 lines 4.77 kB
/** * MSW response building utilities */ import { HttpResponse } from 'msw'; /** * Create a mock HTTP response from API response data */ export function createMockResponse(apiResponse, options = {}) { const status = options.status || (apiResponse.success ? 200 : 400); const headers = { 'Content-Type': 'application/json', ...options.headers, }; return HttpResponse.json(apiResponse, { status, headers }); } /** * Create a success response */ export function createSuccessResponse(data, message = 'Success', options = {}) { const apiResponse = { success: true, data, message, meta: { timestamp: new Date().toISOString(), requestId: generateRequestId(), version: '1.0.0', ...options.meta, }, }; return createMockResponse(apiResponse, options); } /** * Create an error response */ export function createErrorResponse(error, options = {}) { const apiError = typeof error === 'string' ? { code: 'GENERIC_ERROR', message: error } : error; const apiResponse = { success: false, message: apiError.message, errors: [apiError], meta: { timestamp: new Date().toISOString(), requestId: generateRequestId(), version: '1.0.0', ...options.meta, }, }; return createMockResponse(apiResponse, { status: options.status || 400, ...(options.headers && { headers: options.headers }), }); } /** * Create a validation error response */ export function createValidationErrorResponse(errors, options = {}) { const apiErrors = errors.map(error => ({ code: error.code || 'VALIDATION_ERROR', message: error.message, field: error.field, })); const apiResponse = { success: false, message: 'Validation failed', errors: apiErrors, meta: { timestamp: new Date().toISOString(), requestId: generateRequestId(), version: '1.0.0', ...options.meta, }, }; return createMockResponse(apiResponse, { status: options.status || 422, ...(options.headers && { headers: options.headers }), }); } /** * Create a not found response */ export function createNotFoundResponse(resource = 'Resource', options = {}) { return createErrorResponse({ code: 'NOT_FOUND', message: `${resource} not found`, }, { status: 404, ...options, }); } /** * Create an unauthorized response */ export function createUnauthorizedResponse(message = 'Unauthorized', options = {}) { return createErrorResponse({ code: 'UNAUTHORIZED', message, }, { status: 401, ...options, }); } /** * Create a forbidden response */ export function createForbiddenResponse(message = 'Forbidden', options = {}) { return createErrorResponse({ code: 'FORBIDDEN', message, }, { status: 403, ...options, }); } /** * Create a server error response */ export function createServerErrorResponse(message = 'Internal server error', options = {}) { return createErrorResponse({ code: 'INTERNAL_ERROR', message, }, { status: 500, ...options, }); } /** * Mock response builder class */ export class MockResponseBuilderImpl { responseData = null; statusCode = 200; responseHeaders = {}; // private responseDelay: number | [number, number] | null = null responseError = null; data(data) { this.responseData = data; return this; } status(code) { this.statusCode = code; return this; } headers(headers) { this.responseHeaders = { ...this.responseHeaders, ...headers }; return this; } delay(_ms) { // TODO: Implement delay functionality return this; } error(error) { this.responseError = error; return this; } build() { if (this.responseError) { return createErrorResponse(this.responseError, { status: this.statusCode, headers: this.responseHeaders, }); } return createSuccessResponse(this.responseData, 'Success', { status: this.statusCode, headers: this.responseHeaders, }); } } /** * Create a response builder */ export function createResponseBuilder() { return new MockResponseBuilderImpl(); } /** * Generate a unique request ID */ function generateRequestId() { return `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; } //# sourceMappingURL=response-builder.js.map