Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions packages/payments/worldremit/src/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,23 @@
import { smokeTest } from '@profullstack/sh1pt-core/testing';
import { describe, expect, it } from 'vitest';
import adapter from './index.js';

// worldremit is a payouts adapter, not a checkout provider — supports[] is
// intentionally empty (the interface's supports field enumerates buyer-side
// currencies/methods). requireSupports skipped.
smokeTest(adapter, { idPrefix: 'payment', requireSupports: false });

describe('payment-worldremit payout validation', () => {
it('rejects missing payout recipients before returning a transfer id', async () => {
await expect(adapter.payout(' ', 1000, 'USD', {})).rejects.toThrow('recipient accountId is required');
});

it('rejects invalid payout amounts before returning a transfer id', async () => {
await expect(adapter.payout('recipient-1', 0, 'USD', {})).rejects.toThrow('positive finite number');
await expect(adapter.payout('recipient-1', Number.NaN, 'USD', {})).rejects.toThrow('positive finite number');
});

it('rejects malformed payout currencies before returning a transfer id', async () => {
await expect(adapter.payout('recipient-1', 1000, 'US', {})).rejects.toThrow('3-letter ISO code');
});
});
4 changes: 4 additions & 0 deletions packages/payments/worldremit/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ export default definePayment<Config>({
return { type: 'unknown', payload: JSON.parse(rawBody) };
},
async payout(accountId, amount, currency) {
const recipient = accountId.trim();
if (!recipient) throw new Error('WorldRemit payout recipient accountId is required');
if (!Number.isFinite(amount) || amount <= 0) throw new Error('WorldRemit payout amount must be a positive finite number');
if (!/^[a-z]{3}$/i.test(currency)) throw new Error('WorldRemit payout currency must be a 3-letter ISO code');
// TODO: quote → create transfer → pay via saved funding source
return { id: `wr_${Date.now()}` };
},
Expand Down
Loading