From 95b906f7ea9994dd18bcdaf51d0719cf3649b593 Mon Sep 17 00:00:00 2001 From: Sylvia Wang Date: Tue, 21 Jul 2026 11:46:53 -0400 Subject: [PATCH 1/3] add transaction_id and activity_url to SpendRequest --- .../__tests__/spend-request.test.tsx | 88 +++++++++++++++++++ .../src/commands/spend-request/retrieve.tsx | 36 ++++++++ packages/sdk/src/types/index.ts | 2 + 3 files changed, 126 insertions(+) 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 52cd153..183e98b 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 @@ -234,6 +234,94 @@ describe('spend-request', () => { }); }); + describe('activity_url', () => { + it('RetrieveSpendRequest shows activity_url in finalized phase', async () => { + const request = makeSpendRequest({ + status: 'succeeded', + activity_url: 'https://activity.link.com/tx_123', + }); + const repo = makeMockRepo(request); + + const { lastFrame } = render( + {}} + />, + ); + + await vi.waitFor(() => { + const frame = lastFrame(); + expect(frame).toContain('Activity URL'); + expect(frame).toContain('https://activity.link.com/tx_123'); + }); + }); + + it('RetrieveSpendRequest shows link_transaction_id in finalized phase', async () => { + const request = makeSpendRequest({ + status: 'succeeded', + link_transaction_id: 'ltxn_abc123', + }); + const repo = makeMockRepo(request); + + const { lastFrame } = render( + {}} + />, + ); + + await vi.waitFor(() => { + const frame = lastFrame(); + expect(frame).toContain('Transaction ID'); + expect(frame).toContain('ltxn_abc123'); + }); + }); + + it('RetrieveSpendRequest omits activity_url when absent in finalized phase', async () => { + const request = makeSpendRequest({ status: 'succeeded' }); + const repo = makeMockRepo(request); + + const { lastFrame } = render( + {}} + />, + ); + + await vi.waitFor(() => { + const frame = lastFrame(); + expect(frame).toContain('terminal status'); + expect(frame).not.toContain('Activity URL'); + }); + }); + + it('RetrieveSpendRequest shows activity_url in approved/success phase', async () => { + const request = makeSpendRequest({ + status: 'approved', + activity_url: 'https://activity.link.com/tx_456', + }); + const repo = makeMockRepo(request); + + const { lastFrame } = render( + {}} + />, + ); + + await vi.waitFor(() => { + const frame = lastFrame(); + expect(frame).toContain('Activity URL'); + expect(frame).toContain('https://activity.link.com/tx_456'); + }); + }); + + }); + describe('sanitization', () => { it('CreateSpendRequest sanitizes merchant_name and line_items', async () => { const request = makeSpendRequest(); diff --git a/packages/cli/src/commands/spend-request/retrieve.tsx b/packages/cli/src/commands/spend-request/retrieve.tsx index 0716923..94b2b43 100644 --- a/packages/cli/src/commands/spend-request/retrieve.tsx +++ b/packages/cli/src/commands/spend-request/retrieve.tsx @@ -287,6 +287,24 @@ export const RetrieveSpendRequest: React.FC = ({ )} )} + {request?.link_transaction_id && ( + + + Transaction ID:{' '} + {request.link_transaction_id} + + + )} + {request?.activity_url && ( + + + Activity URL:{' '} + + {request.activity_url} + + + + )} ); @@ -387,6 +405,24 @@ export const RetrieveSpendRequest: React.FC = ({ )} )} + {request?.link_transaction_id && ( + + + Transaction ID:{' '} + {request.link_transaction_id} + + + )} + {request?.activity_url && ( + + + Activity URL:{' '} + + {request.activity_url} + + + + )} {request?.shared_payment_token && ( diff --git a/packages/sdk/src/types/index.ts b/packages/sdk/src/types/index.ts index cceee7b..a9c9c68 100644 --- a/packages/sdk/src/types/index.ts +++ b/packages/sdk/src/types/index.ts @@ -132,6 +132,8 @@ export interface SpendRequest { shared_payment_token?: SharedPaymentToken; link_pay_token?: string; payment_status_details?: PaymentStatusDetails | null; + link_transaction_id?: string; + activity_url?: string; created_at: string; updated_at: string; } From c02d6f9f2f779ad573fddb46d7b37d3689b62052 Mon Sep 17 00:00:00 2001 From: Sylvia Wang Date: Tue, 21 Jul 2026 15:03:56 -0400 Subject: [PATCH 2/3] scope to only finalized succeeded state --- .../__tests__/spend-request.test.tsx | 18 ++++++++--------- .../src/commands/spend-request/retrieve.tsx | 20 +------------------ 2 files changed, 10 insertions(+), 28 deletions(-) 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 183e98b..41d7dbb 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 @@ -279,8 +279,11 @@ describe('spend-request', () => { }); }); - it('RetrieveSpendRequest omits activity_url when absent in finalized phase', async () => { - const request = makeSpendRequest({ status: 'succeeded' }); + it('RetrieveSpendRequest omits activity_url on failed status even when present', async () => { + const request = makeSpendRequest({ + status: 'failed', + activity_url: 'https://activity.link.com/tx_123', + }); const repo = makeMockRepo(request); const { lastFrame } = render( @@ -298,11 +301,8 @@ describe('spend-request', () => { }); }); - it('RetrieveSpendRequest shows activity_url in approved/success phase', async () => { - const request = makeSpendRequest({ - status: 'approved', - activity_url: 'https://activity.link.com/tx_456', - }); + it('RetrieveSpendRequest omits activity_url when absent in finalized phase', async () => { + const request = makeSpendRequest({ status: 'succeeded' }); const repo = makeMockRepo(request); const { lastFrame } = render( @@ -315,8 +315,8 @@ describe('spend-request', () => { await vi.waitFor(() => { const frame = lastFrame(); - expect(frame).toContain('Activity URL'); - expect(frame).toContain('https://activity.link.com/tx_456'); + expect(frame).toContain('terminal status'); + expect(frame).not.toContain('Activity URL'); }); }); diff --git a/packages/cli/src/commands/spend-request/retrieve.tsx b/packages/cli/src/commands/spend-request/retrieve.tsx index 94b2b43..95a1336 100644 --- a/packages/cli/src/commands/spend-request/retrieve.tsx +++ b/packages/cli/src/commands/spend-request/retrieve.tsx @@ -295,7 +295,7 @@ export const RetrieveSpendRequest: React.FC = ({ )} - {request?.activity_url && ( + {request?.status === 'succeeded' && request?.activity_url && ( Activity URL:{' '} @@ -405,24 +405,6 @@ export const RetrieveSpendRequest: React.FC = ({ )} )} - {request?.link_transaction_id && ( - - - Transaction ID:{' '} - {request.link_transaction_id} - - - )} - {request?.activity_url && ( - - - Activity URL:{' '} - - {request.activity_url} - - - - )} {request?.shared_payment_token && ( From 8108c1ca2196aa8353a537a06292384231495222 Mon Sep 17 00:00:00 2001 From: Sylvia Wang Date: Wed, 22 Jul 2026 09:20:23 -0400 Subject: [PATCH 3/3] fix formatting --- .../commands/spend-request/__tests__/spend-request.test.tsx | 1 - packages/cli/src/commands/spend-request/retrieve.tsx | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) 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 41d7dbb..fffd85a 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 @@ -319,7 +319,6 @@ describe('spend-request', () => { expect(frame).not.toContain('Activity URL'); }); }); - }); describe('sanitization', () => { diff --git a/packages/cli/src/commands/spend-request/retrieve.tsx b/packages/cli/src/commands/spend-request/retrieve.tsx index 95a1336..32ad208 100644 --- a/packages/cli/src/commands/spend-request/retrieve.tsx +++ b/packages/cli/src/commands/spend-request/retrieve.tsx @@ -290,8 +290,7 @@ export const RetrieveSpendRequest: React.FC = ({ {request?.link_transaction_id && ( - Transaction ID:{' '} - {request.link_transaction_id} + Transaction ID: {request.link_transaction_id} )}