import type {
PaymentAdapter,
ChargeOperations,
RefundOperations,
WebhookOperations,
HealthStatus,
ProviderCapabilities,
} from '@squaredr/paykit'
export class MockAdapter implements PaymentAdapter {
readonly name = 'mock'
readonly capabilities: ProviderCapabilities = {
charges: true,
authAndCapture: true,
refunds: true,
partialRefunds: true,
subscriptions: false,
savedPaymentMethods: false,
hostedCheckout: false,
embeddableUI: false,
payouts: false,
multiCurrency: true,
directDebit: false,
webhooks: true,
threeDS: false,
}
// Track calls for assertions
public chargesCreated: any[] = []
public refundsCreated: any[] = []
async initialize() {}
async healthCheck(): Promise<HealthStatus> {
return { healthy: true, latencyMs: 1 }
}
charges: ChargeOperations = {
create: async (params) => {
this.chargesCreated.push(params)
return {
id: `mock_ch_${Date.now()}`,
providerId: `mock_pi_${Date.now()}`,
provider: 'mock',
amount: params.amount,
currency: params.currency,
status: 'succeeded',
clientSecret: 'mock_secret_123',
metadata: params.metadata || {},
createdAt: new Date(),
updatedAt: new Date(),
_raw: {},
}
},
retrieve: async (id) => ({
id,
providerId: id,
provider: 'mock',
amount: 5000,
currency: 'usd',
status: 'succeeded',
clientSecret: 'mock_secret_123',
metadata: {},
createdAt: new Date(),
updatedAt: new Date(),
_raw: {},
}),
capture: async (id) => ({
id,
providerId: id,
provider: 'mock',
amount: 5000,
currency: 'usd',
status: 'succeeded',
metadata: {},
createdAt: new Date(),
updatedAt: new Date(),
_raw: {},
}),
cancel: async (id) => ({
id,
providerId: id,
provider: 'mock',
amount: 5000,
currency: 'usd',
status: 'canceled',
metadata: {},
createdAt: new Date(),
updatedAt: new Date(),
_raw: {},
}),
list: async () => ({ data: [], hasMore: false }),
}
// Implement refunds, webhooks, etc. as needed
refunds: RefundOperations = {
create: async (params) => {
this.refundsCreated.push(params)
return {
id: `mock_re_${Date.now()}`,
providerId: `mock_re_${Date.now()}`,
provider: 'mock',
chargeId: params.chargeId,
amount: params.amount || 5000,
currency: 'usd',
status: 'succeeded',
createdAt: new Date(),
_raw: {},
}
},
retrieve: async (id) => ({
id,
providerId: id,
provider: 'mock',
chargeId: 'mock_ch_1',
amount: 5000,
currency: 'usd',
status: 'succeeded',
createdAt: new Date(),
_raw: {},
}),
list: async () => ({ data: [], hasMore: false }),
}
// Stub other required operations...
customers: any = {}
paymentMethods: any = {}
webhooks: WebhookOperations = {
verify: () => true,
parse: (payload) => ({
id: 'mock_evt_1',
provider: 'mock',
type: 'charge.succeeded',
providerType: 'mock.charge.succeeded',
data: JSON.parse(typeof payload === 'string' ? payload : payload.toString()),
createdAt: new Date(),
_raw: {},
}),
}
}