From 16b5c3cfa81534b3e8095b8a8bb926d3bb084c6f Mon Sep 17 00:00:00 2001 From: Kyle Reese Date: Tue, 21 Jul 2026 09:52:03 -0400 Subject: [PATCH 1/2] Replace testmode card number --- README.md | 2 +- packages/cli/src/__tests__/cli.test.ts | 8 ++++---- .../spend-request/__tests__/spend-request.test.tsx | 2 +- .../cli/src/utils/__tests__/credential-output.test.ts | 2 +- .../sdk/src/resources/__tests__/spend-request.test.ts | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b9db7ae..7fedf60 100644 --- a/README.md +++ b/README.md @@ -231,7 +231,7 @@ A spend request moves through: **create** → **request approval** → **approve **Required fields for create:** `merchant_name`, `merchant_url`, `context`, `amount`. `payment_method_id` is optional — if omitted, your default payment method will be used, or the first eligible one if no default is set. **Constraints:** `context` must be at least 100 characters; `amount` must not exceed 500000 (cents); `currency` must be a 3-letter ISO code. The user has 10 minutes from when approval is requested to approve. Approved credentials (card or SPT) are valid for 12 hours from spend request creation. -**Test mode:** Pass `--test` to create testmode credentials (uses test card `4242424242424242`), useful for development and integration testing without real payment methods. +**Test mode:** Pass `--test` to create testmode credentials (uses test card `4000009990001984`), useful for development and integration testing without real payment methods. ```bash # Update before approval diff --git a/packages/cli/src/__tests__/cli.test.ts b/packages/cli/src/__tests__/cli.test.ts index e96b3ad..9183104 100644 --- a/packages/cli/src/__tests__/cli.test.ts +++ b/packages/cli/src/__tests__/cli.test.ts @@ -703,7 +703,7 @@ describe('production mode', () => { brand: 'Visa', exp_month: 12, exp_year: 2027, - number: '4242424242424242', + number: '4000009990001984', }, }); @@ -720,7 +720,7 @@ describe('production mode', () => { expect(request.status).toBe('approved'); const card = request.card as Record; expect(card.brand).toBe('Visa'); - expect(card.number).toBe('4242424242424242'); + expect(card.number).toBe('4000009990001984'); }); it('returns card with billing_address and valid_until when present', async () => { @@ -732,7 +732,7 @@ describe('production mode', () => { brand: 'Visa', exp_month: 12, exp_year: 2027, - number: '4242424242424242', + number: '4000009990001984', cvc: '123', billing_address: { name: 'Jane Doe', @@ -759,7 +759,7 @@ describe('production mode', () => { const request = output[0]; expect(request.status).toBe('approved'); const card = request.card as Record; - expect(card.number).toBe('4242424242424242'); + expect(card.number).toBe('4000009990001984'); expect(card.valid_until).toBe('2025-06-15T06:13:20Z'); const billingAddress = card.billing_address as Record; expect(billingAddress.name).toBe('Jane Doe'); diff --git a/packages/cli/src/commands/spend-request/__tests__/spend-request.test.tsx b/packages/cli/src/commands/spend-request/__tests__/spend-request.test.tsx index bc9c7fc..1ffa731 100644 --- a/packages/cli/src/commands/spend-request/__tests__/spend-request.test.tsx +++ b/packages/cli/src/commands/spend-request/__tests__/spend-request.test.tsx @@ -200,7 +200,7 @@ describe('spend-request', () => { const request = makeSpendRequest({ card: { id: 'card_1', - number: '4242424242424242', + number: '4000009990001984', brand: 'visa', exp_month: 12, exp_year: 2030, diff --git a/packages/cli/src/utils/__tests__/credential-output.test.ts b/packages/cli/src/utils/__tests__/credential-output.test.ts index a45fc57..fb60449 100644 --- a/packages/cli/src/utils/__tests__/credential-output.test.ts +++ b/packages/cli/src/utils/__tests__/credential-output.test.ts @@ -17,7 +17,7 @@ describe('writeCredentialFile', () => { it('writes JSON file with 0600 permissions', async () => { const filePath = path.join(tmpDir, 'card.json'); - const data = { number: '4242424242424242', cvc: '123' }; + const data = { number: '4000009990001984', cvc: '123' }; const result = await writeCredentialFile(filePath, data, false); expect(result).toBe(filePath); const contents = JSON.parse(await fs.readFile(filePath, 'utf-8')); diff --git a/packages/sdk/src/resources/__tests__/spend-request.test.ts b/packages/sdk/src/resources/__tests__/spend-request.test.ts index d3f6d7a..83372a7 100644 --- a/packages/sdk/src/resources/__tests__/spend-request.test.ts +++ b/packages/sdk/src/resources/__tests__/spend-request.test.ts @@ -363,7 +363,7 @@ describe('SpendRequestResource', () => { brand: 'Visa', exp_month: 12, exp_year: 2027, - number: '4242424242424242', + number: '4000009990001984', }, }; mockFetchResponse(200, approvedResponse); @@ -376,7 +376,7 @@ describe('SpendRequestResource', () => { brand: 'Visa', exp_month: 12, exp_year: 2027, - number: '4242424242424242', + number: '4000009990001984', }); }); From 4505783197f23d8f69bad58d3efb98600fd58a8a Mon Sep 17 00:00:00 2001 From: Kyle Reese Date: Tue, 21 Jul 2026 09:54:36 -0400 Subject: [PATCH 2/2] Update readme for testmode --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7fedf60..607f308 100644 --- a/README.md +++ b/README.md @@ -231,7 +231,7 @@ A spend request moves through: **create** → **request approval** → **approve **Required fields for create:** `merchant_name`, `merchant_url`, `context`, `amount`. `payment_method_id` is optional — if omitted, your default payment method will be used, or the first eligible one if no default is set. **Constraints:** `context` must be at least 100 characters; `amount` must not exceed 500000 (cents); `currency` must be a 3-letter ISO code. The user has 10 minutes from when approval is requested to approve. Approved credentials (card or SPT) are valid for 12 hours from spend request creation. -**Test mode:** Pass `--test` to create testmode credentials (uses test card `4000009990001984`), useful for development and integration testing without real payment methods. +**Test mode:** Pass `--test` to create a testmode SpendRequest. A testmode SpendRequest will return test payment credentials (e.g test card `4000009990001984`) rather than a real payment credential. Testmode SpendRequests will not charge the underlying payment method of the SpendRequest. This is useful for development and integration testing without real payment methods. ```bash # Update before approval