/** * Shared mock data factories for tests. * * NOTE: `vi.mock()` calls must live in each test file (hoisting requirement). * These helpers only build data objects — no mocking side-effects. */ /** Build a minimal `App.Locals` object. Pass a user to simulate an authenticated request. */ export function createLocals(user?: { id: string; name: string; email: string }): App.Locals { return { session: user ? ({ id: 'session-1', userId: user.id, expiresAt: new Date(Date.now() + 86_400_000) } as App.Locals['session']) : (undefined as unknown as App.Locals['session']), user: user as unknown as App.Locals['user'] }; } /** Build a `Request` whose `.formData()` resolves to the given key/value pairs. */ export function createFormRequest(fields: Record): Request { const fd = new FormData(); for (const [k, v] of Object.entries(fields)) fd.append(k, v); return new Request('http://localhost', { method: 'POST', body: fd }); } /** Minimal user object with sensible defaults. */ export function mockUser(overrides?: Record) { return { id: 'user-1', name: 'Jane Doe', email: 'jane@example.com', emailVerified: true, image: null, createdAt: new Date(), updatedAt: new Date(), roleId: null, ...overrides }; } /** User that also has a profile (and optionally a role). */ export function mockUserWithProfile(overrides?: Record) { return mockUser({ profile: { id: 'profile-1', userId: 'user-1', firstName: 'Jane', lastName: 'Doe', phoneNumber: '555-0100' }, ...overrides }); } /** User with profile that includes addresses. */ export function mockUserWithProfileAndAddresses(overrides?: Record) { return mockUser({ profile: { id: 'profile-1', userId: 'user-1', firstName: 'Jane', lastName: 'Doe', phoneNumber: '5550100', addresses: [ { id: 'addr-1', profileId: 'profile-1', street: '123 Main St', city: 'Dallas', state: 'TX', postalCode: '75001', country: 'US' } ] }, ...overrides }); } /** Minimal license key object. */ export function mockLicenseKey(overrides?: Record) { return { id: 'key-1', key: 'AAAA-BBBB-CCCC-DDDD', active: true, level: 'standard', userId: 'user-1', ...overrides }; } /** Minimal proclamation object with relations. */ export function mockProclamation(overrides?: Record) { return { id: 'proc-1', name: 'Test Proclamation', content: '

Test content

', solfeggioFrequencyId: 1, categoryId: 1, price: 0.99, solfeggioFrequency: { id: 1, name: 'UT', value: 396 }, category: { id: 1, name: 'Healing', parentId: null, parent: null }, ...overrides }; } /** Minimal proclamation category. */ export function mockCategory(overrides?: Record) { return { id: 1, name: 'Healing', parentId: null, ...overrides }; } /** Build a URL object for use with PageServerLoad. */ export function createUrl(path: string, params?: Record): URL { const url = new URL(path, 'http://localhost'); if (params) { for (const [k, v] of Object.entries(params)) { url.searchParams.set(k, v); } } return url; }