Skip to main content
Glama
mock-data.tsβ€’11.2 kB
/** * Centralized mock data patterns for universal tool tests * * This file follows the mock factory pattern from /test/utils/mock-factories/ * and provides consistent test data structures across universal test files. * * IMPORTANT: This file contains ONLY test data and should never be imported * by production code. It follows the clean architecture separation enforced * in the project. */ import { UniversalResourceType, DetailedInfoType, RelationshipType, ContentSearchType, TimeframeType, BatchOperationType, UniversalSearchParams, UniversalRecordDetailsParams, UniversalCreateParams, UniversalUpdateParams, UniversalDeleteParams, UniversalAttributesParams, UniversalDetailedInfoParams, AdvancedSearchParams, RelationshipSearchParams, ContentSearchParams, TimeframeSearchParams, BatchOperationsParams, } from '../../../../../src/handlers/tool-configs/universal/types.js'; import { TEST_DATA_PATTERNS } from './test-constants.js'; // Base mock record structure following Attio API format export interface MockRecord { id: { record_id: string; }; values: Record<string, Array<{ value: any; [key: string]: any }>>; } // Base mock error structure export interface MockError { message: string; code?: string; status?: number; } /** * Mock Record Factories * These follow the mock factory pattern and create consistent test data */ export const MockRecordFactory = { /** * Create a mock company record */ createCompany: ( overrides: Partial<{ id: string; name: string; website: string; industry: string; location: string; }> = {} ): MockRecord => { const timestamp = TEST_DATA_PATTERNS.timestamp(); const id = overrides.id || `comp-${TEST_DATA_PATTERNS.randomId()}`; return { id: { record_id: id }, values: { name: [{ value: overrides.name || `Test Company ${timestamp}` }], website: [ { value: overrides.website || `https://test-${timestamp}.com` }, ], industry: [{ value: overrides.industry || 'Technology' }], ...(overrides.location && { location: [{ value: overrides.location }], }), }, }; }, /** * Create a mock person record */ createPerson: ( overrides: Partial<{ id: string; name: string; email: string; company?: string; }> = {} ): MockRecord => { const timestamp = TEST_DATA_PATTERNS.timestamp(); const id = overrides.id || `person-${TEST_DATA_PATTERNS.randomId()}`; return { id: { record_id: id }, values: { name: [{ value: overrides.name || `Test Person ${timestamp}` }], email_addresses: [ { value: overrides.email || `test-${timestamp}@example.com`, }, ], ...(overrides.company && { company: [{ value: overrides.company }], }), }, }; }, /** * Create a mock task record */ createTask: ( overrides: Partial<{ id: string; title: string; content: string; status?: string; }> = {} ): MockRecord => { const timestamp = TEST_DATA_PATTERNS.timestamp(); const id = overrides.id || `task-${TEST_DATA_PATTERNS.randomId()}`; return { id: { record_id: id }, values: { title: [{ value: overrides.title || `Test Task ${timestamp}` }], content: [ { value: overrides.content || `Test task content ${timestamp}` }, ], status: [{ value: overrides.status || 'open' }], }, }; }, /** * Create multiple mock records of the same type */ createMultiple: <T extends MockRecord>( factory: () => T, count: number ): T[] => { return Array(count) .fill(0) .map(() => factory()); }, /** * Create advanced company record with more fields */ createAdvancedCompany: ( overrides: Partial<{ id: string; name: string; website: string; industry: string; location: string; employees?: number; founded?: string; }> = {} ): MockRecord => { const base = MockRecordFactory.createCompany(overrides); if (overrides.employees !== undefined) { base.values.employees = [{ value: overrides.employees }]; } if (overrides.founded) { base.values.founded = [{ value: overrides.founded }]; } return base; }, }; /** * Mock Parameter Factories * These create consistent parameter objects for different operations */ export const MockParamsFactory = { /** * Create mock search parameters */ createSearchParams: ( overrides: Partial<UniversalSearchParams> = {} ): UniversalSearchParams => ({ resource_type: UniversalResourceType.COMPANIES, query: 'test', limit: 10, ...overrides, }), /** * Create mock record details parameters */ createDetailsParams: ( overrides: Partial<UniversalRecordDetailsParams> = {} ): UniversalRecordDetailsParams => ({ resource_type: UniversalResourceType.COMPANIES, record_id: 'test-record-id', ...overrides, }), /** * Create mock create parameters */ createCreateParams: ( overrides: Partial<UniversalCreateParams> = {} ): UniversalCreateParams => ({ resource_type: UniversalResourceType.COMPANIES, record_data: { name: 'Test Company', website: 'https://test.com', }, return_details: true, ...overrides, }), /** * Create mock update parameters */ createUpdateParams: ( overrides: Partial<UniversalUpdateParams> = {} ): UniversalUpdateParams => ({ resource_type: UniversalResourceType.COMPANIES, record_id: 'test-record-id', record_data: { name: 'Updated Test Company', }, return_details: true, ...overrides, }), /** * Create mock delete parameters */ createDeleteParams: ( overrides: Partial<UniversalDeleteParams> = {} ): UniversalDeleteParams => ({ resource_type: UniversalResourceType.COMPANIES, record_id: 'test-record-id', ...overrides, }), /** * Create mock advanced search parameters */ createAdvancedSearchParams: ( overrides: Partial<AdvancedSearchParams> = {} ): AdvancedSearchParams => ({ resource_type: UniversalResourceType.COMPANIES, query: 'technology', filters: [ { attribute: { slug: 'industry' }, condition: 'equals', value: 'Technology', }, ] as any, sort_by: 'name', sort_order: 'asc', limit: 20, ...overrides, }), /** * Create mock relationship search parameters */ createRelationshipSearchParams: ( overrides: Partial<RelationshipSearchParams> = {} ): RelationshipSearchParams => ({ relationship_type: RelationshipType.PEOPLE_TO_COMPANY, source_id: 'person-123', target_resource_type: UniversalResourceType.COMPANIES, ...overrides, }), /** * Create mock content search parameters */ createContentSearchParams: ( overrides: Partial<ContentSearchParams> = {} ): ContentSearchParams => ({ resource_type: UniversalResourceType.COMPANIES, content_type: ContentSearchType.NOTES, search_query: 'important meeting', ...overrides, }), /** * Create mock timeframe search parameters */ createTimeframeSearchParams: ( overrides: Partial<TimeframeSearchParams> = {} ): TimeframeSearchParams => ({ resource_type: UniversalResourceType.COMPANIES, timeframe_type: TimeframeType.CREATED, start_date: '2024-01-01T00:00:00.000Z', end_date: '2024-01-31T23:59:59.999Z', ...overrides, }), /** * Create mock batch operations parameters */ createBatchOperationsParams: ( overrides: Partial<BatchOperationsParams> = {} ): BatchOperationsParams => ({ resource_type: UniversalResourceType.COMPANIES, operation_type: BatchOperationType.CREATE, records: [ { name: 'Batch Test Company 1', website: 'https://batch1.com', }, { name: 'Batch Test Company 2', website: 'https://batch2.com', }, ], ...overrides, }), }; /** * Mock Response Factories * These create consistent response objects that match API responses */ export const MockResponseFactory = { /** * Create a successful search response */ createSearchResponse: (records: MockRecord[] = []): MockRecord[] => records, /** * Create a successful details response */ createDetailsResponse: (record?: MockRecord): MockRecord => record || MockRecordFactory.createCompany(), /** * Create a successful delete response */ createDeleteResponse: ( recordId: string = 'test-record-id' ): { success: true; record_id: string } => ({ success: true, record_id: recordId, }), /** * Create a batch operation response */ createBatchResponse: ( results: Array<{ success: boolean; result?: any; error?: string }> ) => results, /** * Create date range response (for date utils) */ createDateRangeResponse: (start?: string, end?: string) => ({ start: start || '2024-01-01T00:00:00.000Z', end: end || '2024-01-31T23:59:59.999Z', }), }; /** * Mock Error Factories * These create consistent error objects for testing error scenarios */ export const MockErrorFactory = { /** * Create a generic API error */ createApiError: ( message: string = 'API error', code?: string ): MockError => ({ message, ...(code && { code }), status: 500, }), /** * Create a validation error */ createValidationError: ( message: string = 'Validation failed' ): MockError => ({ message, code: 'VALIDATION_ERROR', status: 400, }), /** * Create a not found error */ createNotFoundError: (resourceType: string = 'record'): MockError => ({ message: `${resourceType} not found`, code: 'NOT_FOUND', status: 404, }), /** * Create a rate limit error */ createRateLimitError: (): MockError => ({ message: 'Rate limit exceeded', code: 'RATE_LIMIT', status: 429, }), }; /** * Integration Test Data Factories * These create data specifically for integration and performance tests */ export const IntegrationDataFactory = { /** * Generate unique test identifiers for integration tests */ generateTestIdentifiers: () => { const timestamp = Date.now(); const randomId = Math.random().toString(36).substring(7); return { timestamp, randomId, companyName: `Universal Test Company ${timestamp}-${randomId}`, personEmail: `universal-test-${timestamp}-${randomId}@example.com`, domain: `universal-test-${timestamp}-${randomId}.com`, personName: `Universal Test Person ${timestamp}`, }; }, /** * Create performance test records */ createPerformanceTestRecords: ( count: number, prefix: string = 'Perf Test' ) => { const timestamp = Date.now(); return Array(count) .fill(0) .map((_, i) => ({ name: `${prefix} Company ${count}-${timestamp}-${i}`, website: `https://${prefix.toLowerCase().replace(/\s+/g, '')}${count}-${timestamp}-${i}.com`, industry: 'Technology', })); }, };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kesslerio/attio-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server