You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

238 lines
6.2 KiB

/**
* Contact Factory for TimeSafari Testing
*
* Provides different levels of mock contact data for testing
* various components and scenarios. Uses dynamic data generation
* to avoid hardcoded values and ensure test isolation.
*
* @author Matthew Raymer
*/
import { Contact, ContactMethod } from '@/db/tables/contacts'
import { createTestDataFactory } from '@/test/utils/componentTestUtils'
/**
* Create a simple mock contact for basic component testing
* Used for: LargeIdenticonModal, EntityIcon, basic display components
*/
export const createSimpleMockContact = (overrides = {}): Contact => ({
did: `did:ethr:test:${Date.now()}`,
name: `Test Contact ${Date.now()}`,
...overrides
})
/**
* Create a standard mock contact for most component testing
* Used for: ContactList, ContactEdit, ContactView components
*/
export const createStandardMockContact = (overrides = {}): Contact => ({
did: `did:ethr:test:${Date.now()}`,
name: `Test Contact ${Date.now()}`,
contactMethods: [
{ label: 'Email', type: 'EMAIL', value: 'test@example.com' },
{ label: 'Phone', type: 'SMS', value: '+1234567890' }
],
notes: 'Test contact notes',
seesMe: true,
registered: false,
...overrides
})
/**
* Create a complex mock contact for integration and service testing
* Used for: Full contact management, service integration tests
*/
export const createComplexMockContact = (overrides = {}): Contact => ({
did: `did:ethr:test:${Date.now()}`,
name: `Test Contact ${Date.now()}`,
contactMethods: [
{ label: 'Email', type: 'EMAIL', value: 'test@example.com' },
{ label: 'Phone', type: 'SMS', value: '+1234567890' },
{ label: 'WhatsApp', type: 'WHATSAPP', value: '+1234567890' }
],
notes: 'Test contact notes with special characters: éñü',
profileImageUrl: 'https://example.com/avatar.jpg',
publicKeyBase64: 'base64encodedpublickey',
nextPubKeyHashB64: 'base64encodedhash',
seesMe: true,
registered: true,
iViewContent: true,
...overrides
})
/**
* Create multiple contacts for list testing
* @param count - Number of contacts to create
* @param factory - Factory function to use (default: standard)
* @returns Array of mock contacts
*/
export const createMockContacts = (
count: number,
factory = createStandardMockContact
): Contact[] => {
return Array.from({ length: count }, (_, index) =>
factory({
did: `did:ethr:test:${index + 1}`,
name: `Test Contact ${index + 1}`
})
)
}
/**
* Create invalid contact data for error testing
* @returns Array of invalid contact objects
*/
export const createInvalidContacts = (): Partial<Contact>[] => [
{},
{ did: '' },
{ did: 'invalid-did' },
{ did: 'did:ethr:test', name: null as any },
{ did: 'did:ethr:test', contactMethods: 'invalid' as any },
{ did: 'did:ethr:test', contactMethods: [null] as any },
{ did: 'did:ethr:test', contactMethods: [{ invalid: 'data' }] as any }
]
/**
* Create contact with specific characteristics for testing
*/
export const createContactWithMethods = (methods: ContactMethod[]): Contact =>
createStandardMockContact({ contactMethods: methods })
export const createContactWithNotes = (notes: string): Contact =>
createStandardMockContact({ notes })
export const createContactWithName = (name: string): Contact =>
createStandardMockContact({ name })
export const createContactWithDid = (did: string): Contact =>
createStandardMockContact({ did })
export const createRegisteredContact = (): Contact =>
createStandardMockContact({ registered: true })
export const createUnregisteredContact = (): Contact =>
createStandardMockContact({ registered: false })
export const createContactThatSeesMe = (): Contact =>
createStandardMockContact({ seesMe: true })
export const createContactThatDoesntSeeMe = (): Contact =>
createStandardMockContact({ seesMe: false })
/**
* Create mock project data for testing
*/
export const createMockProject = (overrides = {}) => ({
id: `project-${Date.now()}`,
name: `Test Project ${Date.now()}`,
description: 'Test project description',
status: 'active',
createdAt: new Date(),
updatedAt: new Date(),
...overrides
})
/**
* Create mock account data for testing
*/
export const createMockAccount = (overrides = {}) => ({
id: `account-${Date.now()}`,
name: `Test Account ${Date.now()}`,
email: 'test@example.com',
balance: 100.00,
currency: 'USD',
createdAt: new Date(),
updatedAt: new Date(),
...overrides
})
/**
* Create mock transaction data for testing
*/
export const createMockTransaction = (overrides = {}) => ({
id: `transaction-${Date.now()}`,
amount: 50.00,
type: 'credit',
description: 'Test transaction',
status: 'completed',
createdAt: new Date(),
...overrides
})
/**
* Create mock user data for testing
*/
export const createMockUser = (overrides = {}) => ({
id: `user-${Date.now()}`,
username: `testuser${Date.now()}`,
email: 'test@example.com',
firstName: 'Test',
lastName: 'User',
isActive: true,
createdAt: new Date(),
updatedAt: new Date(),
...overrides
})
/**
* Create mock settings data for testing
*/
export const createMockSettings = (overrides = {}) => ({
theme: 'light',
language: 'en',
notifications: true,
autoSave: true,
privacy: {
profileVisibility: 'public',
dataSharing: false
},
...overrides
})
/**
* Create mock notification data for testing
*/
export const createMockNotification = (overrides = {}) => ({
id: `notification-${Date.now()}`,
type: 'info',
title: 'Test Notification',
message: 'This is a test notification',
isRead: false,
createdAt: new Date(),
...overrides
})
/**
* Create mock error data for testing
*/
export const createMockError = (overrides = {}) => ({
code: 'TEST_ERROR',
message: 'Test error message',
details: 'Test error details',
timestamp: new Date(),
...overrides
})
/**
* Create mock API response data for testing
*/
export const createMockApiResponse = (overrides = {}) => ({
success: true,
data: {},
message: 'Success',
timestamp: new Date(),
...overrides
})
/**
* Create mock pagination data for testing
*/
export const createMockPagination = (overrides = {}) => ({
page: 1,
limit: 10,
total: 100,
totalPages: 10,
hasNext: true,
hasPrev: false,
...overrides
})