Skip to content

Commit 60a2e9f

Browse files
authored
Merge pull request #3513 from SalesforceCommerceCloud/rvishwanathbhat/order-confirmation-hide-sfp-payment-details
@W-19799923: Remove payment details on order confirmation page for SFP orders
2 parents e790ab4 + 8bd53bd commit 60a2e9f

File tree

2 files changed

+40
-202
lines changed

2 files changed

+40
-202
lines changed

packages/template-retail-react-app/app/pages/checkout/confirmation.jsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ const CheckoutConfirmation = () => {
7070
enabled: !!orderNo && onClient
7171
}
7272
)
73+
7374
const {currency} = useCurrency()
7475
const itemIds = order?.productItems.map((item) => item.productId)
7576
const {data: products} = useProducts({parameters: {ids: itemIds?.join(',')}})
@@ -507,11 +508,13 @@ const CheckoutConfirmation = () => {
507508
<AddressDisplay address={order.billingAddress} />
508509
</Stack>
509510

510-
{order.paymentInstruments[0].paymentMethodId ===
511+
{order.paymentInstruments?.[0]?.paymentMethodId ===
511512
'Salesforce Payments' ? (
512-
<SFPaymentsOrderSummary
513-
paymentInstrument={order.paymentInstruments[0]}
514-
/>
513+
order.paymentInstruments?.[0]?.c_paymentReference_type ? (
514+
<SFPaymentsOrderSummary
515+
paymentInstrument={order.paymentInstruments[0]}
516+
/>
517+
) : null
515518
) : (
516519
<Stack spacing={1}>
517520
<Heading as="h3" fontSize="sm">

packages/template-retail-react-app/app/pages/checkout/confirmation.test.js

Lines changed: 33 additions & 198 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,17 @@ describe('Account form', () => {
313313

314314
describe('Salesforce Payments Integration', () => {
315315
const mockSFPaymentsOrder = {
316+
...mockOrder,
317+
paymentInstruments: [
318+
{
319+
amount: 82.56,
320+
paymentInstrumentId: 'sfp123',
321+
paymentMethodId: 'Salesforce Payments'
322+
}
323+
]
324+
}
325+
326+
const mockSFPaymentsOrderWithType = {
316327
...mockOrder,
317328
paymentInstruments: [
318329
{
@@ -326,164 +337,61 @@ describe('Salesforce Payments Integration', () => {
326337
]
327338
}
328339

329-
beforeEach(() => {
340+
test('does not render payment details for Salesforce Payments orders when c_paymentReference_type is missing', async () => {
330341
global.server.use(
331342
rest.get('*/orders/:orderId', (req, res, ctx) => {
332343
return res(ctx.delay(0), ctx.json(mockSFPaymentsOrder))
333344
})
334345
)
335-
})
336346

337-
test('renders SFPaymentsOrderSummary for Salesforce Payments orders', async () => {
338347
renderWithProviders(<MockedComponent />)
339348

340-
// Wait for the page to load
341349
await screen.findByText(mockSFPaymentsOrder.orderNo)
342350

343-
// Check that Payment Details section exists
344-
const paymentDetailsHeading = screen.getByText('Payment Details')
345-
expect(paymentDetailsHeading).toBeInTheDocument()
346-
347-
// The SFPaymentsOrderSummary should render instead of credit card display
348-
const creditCardHeading = await screen.findByRole('heading', {name: /credit card/i})
349-
expect(creditCardHeading).toBeInTheDocument()
350-
})
351-
352-
test('displays Visa payment information for Salesforce Payments', async () => {
353-
renderWithProviders(<MockedComponent />)
354-
355-
await screen.findByText(mockSFPaymentsOrder.orderNo)
356-
357-
// Check for Visa brand name
358-
expect(await screen.findByText('Visa')).toBeInTheDocument()
359-
360-
// Check for last 4 digits with masked format
361-
expect(screen.getByText(/4242/)).toBeInTheDocument()
362-
})
363-
364-
test('renders different payment types for Salesforce Payments', async () => {
365-
const mockOrderWithKlarna = {
366-
...mockOrder,
367-
paymentInstruments: [
368-
{
369-
amount: 82.56,
370-
paymentInstrumentId: 'sfp-klarna',
371-
paymentMethodId: 'Salesforce Payments',
372-
c_paymentReference_type: 'klarna'
373-
}
374-
]
375-
}
376-
377-
global.server.use(
378-
rest.get('*/orders/:orderId', (req, res, ctx) => {
379-
return res(ctx.delay(0), ctx.json(mockOrderWithKlarna))
380-
})
381-
)
382-
383-
renderWithProviders(<MockedComponent />)
384-
385-
await screen.findByText(mockOrderWithKlarna.orderNo)
386-
387-
// Check for Klarna heading
388-
expect(await screen.findByText('Klarna')).toBeInTheDocument()
389-
})
390-
391-
test('displays MasterCard payment information for Salesforce Payments', async () => {
392-
const mockOrderWithMasterCard = {
393-
...mockOrder,
394-
paymentInstruments: [
395-
{
396-
amount: 82.56,
397-
paymentInstrumentId: 'sfp-mc',
398-
paymentMethodId: 'Salesforce Payments',
399-
c_paymentReference_type: 'card',
400-
c_paymentReference_brand: 'mastercard',
401-
c_paymentReference_last4: '5454'
402-
}
403-
]
404-
}
405-
406-
global.server.use(
407-
rest.get('*/orders/:orderId', (req, res, ctx) => {
408-
return res(ctx.delay(0), ctx.json(mockOrderWithMasterCard))
409-
})
410-
)
411-
412-
renderWithProviders(<MockedComponent />)
413-
414-
await screen.findByText(mockOrderWithMasterCard.orderNo)
415-
416-
// Check for MasterCard brand name
417-
expect(await screen.findByText('MasterCard')).toBeInTheDocument()
351+
// Payment Details section should exist
352+
expect(screen.getByText('Payment Details')).toBeInTheDocument()
418353

419-
// Check for last 4 digits
420-
expect(screen.getByText(/5454/)).toBeInTheDocument()
354+
// No payment method details should be shown for SFP orders when c_paymentReference_type is missing
355+
expect(screen.queryByRole('heading', {name: /credit card/i})).not.toBeInTheDocument()
421356
})
422357

423-
test('displays SEPA Debit payment information for Salesforce Payments', async () => {
424-
const mockOrderWithSEPA = {
425-
...mockOrder,
426-
paymentInstruments: [
427-
{
428-
amount: 82.56,
429-
paymentInstrumentId: 'sfp-sepa',
430-
paymentMethodId: 'Salesforce Payments',
431-
c_paymentReference_type: 'sepa_debit',
432-
c_paymentReference_last4: '9012'
433-
}
434-
]
435-
}
436-
358+
test('renders SFPaymentsOrderSummary for Salesforce Payments orders when c_paymentReference_type exists', async () => {
437359
global.server.use(
438360
rest.get('*/orders/:orderId', (req, res, ctx) => {
439-
return res(ctx.delay(0), ctx.json(mockOrderWithSEPA))
361+
return res(ctx.delay(0), ctx.json(mockSFPaymentsOrderWithType))
440362
})
441363
)
442364

443365
renderWithProviders(<MockedComponent />)
444366

445-
await screen.findByText(mockOrderWithSEPA.orderNo)
367+
await screen.findByText(mockSFPaymentsOrderWithType.orderNo)
446368

447-
// Check for SEPA Debit heading
448-
expect(await screen.findByText('SEPA Debit')).toBeInTheDocument()
369+
// Payment Details section should exist
370+
expect(screen.getByText('Payment Details')).toBeInTheDocument()
449371

450-
// Check for last 4 digits
451-
expect(screen.getByText(/9012/)).toBeInTheDocument()
372+
// SFPaymentsOrderSummary should render when c_paymentReference_type is available
373+
expect(await screen.findByRole('heading', {name: /credit card/i})).toBeInTheDocument()
374+
expect(screen.getByText('Visa')).toBeInTheDocument()
375+
expect(screen.getByText(/4242/)).toBeInTheDocument()
452376
})
453377

454-
test('displays Bancontact payment information for Salesforce Payments', async () => {
455-
const mockOrderWithBancontact = {
456-
...mockOrder,
457-
paymentInstruments: [
458-
{
459-
amount: 82.56,
460-
paymentInstrumentId: 'sfp-bancontact',
461-
paymentMethodId: 'Salesforce Payments',
462-
c_paymentReference_type: 'bancontact',
463-
c_paymentReference_bankName: 'ING Bank',
464-
c_paymentReference_last4: '1234'
465-
}
466-
]
467-
}
468-
378+
test('renders billing address for Salesforce Payments orders', async () => {
469379
global.server.use(
470380
rest.get('*/orders/:orderId', (req, res, ctx) => {
471-
return res(ctx.delay(0), ctx.json(mockOrderWithBancontact))
381+
return res(ctx.delay(0), ctx.json(mockSFPaymentsOrder))
472382
})
473383
)
474384

475385
renderWithProviders(<MockedComponent />)
476386

477-
await screen.findByText(mockOrderWithBancontact.orderNo)
478-
479-
// Check for Bancontact heading
480-
expect(await screen.findByText('Bancontact')).toBeInTheDocument()
387+
await screen.findByText(mockSFPaymentsOrder.orderNo)
481388

482-
// Check for bank name
483-
expect(screen.getByText('ING Bank')).toBeInTheDocument()
389+
// Billing address should be shown
390+
expect(screen.getByRole('heading', {name: /billing address/i})).toBeInTheDocument()
484391

485-
// Check for last 4 digits
486-
expect(screen.getByText(/1234/)).toBeInTheDocument()
392+
// Check that billing address is displayed
393+
const addresses = screen.getAllByText(/123 Walnut Place/)
394+
expect(addresses.length).toBeGreaterThan(0)
487395
})
488396

489397
test('still renders traditional credit card display for non-SF Payments orders', async () => {
@@ -501,78 +409,5 @@ describe('Salesforce Payments Integration', () => {
501409
expect(await screen.findByText('Credit Card')).toBeInTheDocument()
502410
expect(screen.getByText('Visa')).toBeInTheDocument()
503411
expect(screen.getByText(/1111/)).toBeInTheDocument()
504-
expect(screen.getByText(/1\/2040/)).toBeInTheDocument()
505-
})
506-
507-
test('renders billing address alongside Salesforce Payments details', async () => {
508-
renderWithProviders(<MockedComponent />)
509-
510-
await screen.findByText(mockSFPaymentsOrder.orderNo)
511-
512-
// Check for billing address heading
513-
const billingAddressHeading = screen.getByRole('heading', {name: /billing address/i})
514-
expect(billingAddressHeading).toBeInTheDocument()
515-
516-
// Check that billing address is displayed (use getAllByText since address appears in multiple places)
517-
const addresses = screen.getAllByText(/123 Walnut Place/)
518-
expect(addresses.length).toBeGreaterThan(0)
519-
520-
// Verify Payment Details heading exists
521-
expect(screen.getByText('Payment Details')).toBeInTheDocument()
522-
})
523-
524-
test('displays Afterpay/Clearpay payment information for Salesforce Payments', async () => {
525-
const mockOrderWithAfterpay = {
526-
...mockOrder,
527-
paymentInstruments: [
528-
{
529-
amount: 82.56,
530-
paymentInstrumentId: 'sfp-afterpay',
531-
paymentMethodId: 'Salesforce Payments',
532-
c_paymentReference_type: 'afterpay_clearpay'
533-
}
534-
]
535-
}
536-
537-
global.server.use(
538-
rest.get('*/orders/:orderId', (req, res, ctx) => {
539-
return res(ctx.delay(0), ctx.json(mockOrderWithAfterpay))
540-
})
541-
)
542-
543-
renderWithProviders(<MockedComponent />)
544-
545-
await screen.findByText(mockOrderWithAfterpay.orderNo)
546-
547-
// Check for Afterpay/Clearpay heading
548-
expect(await screen.findByText('Afterpay/Clearpay')).toBeInTheDocument()
549-
})
550-
551-
test('displays iDEAL payment information for Salesforce Payments', async () => {
552-
const mockOrderWithIdeal = {
553-
...mockOrder,
554-
paymentInstruments: [
555-
{
556-
amount: 82.56,
557-
paymentInstrumentId: 'sfp-ideal',
558-
paymentMethodId: 'Salesforce Payments',
559-
c_paymentReference_type: 'ideal',
560-
c_paymentReference_bank: 'rabobank'
561-
}
562-
]
563-
}
564-
565-
global.server.use(
566-
rest.get('*/orders/:orderId', (req, res, ctx) => {
567-
return res(ctx.delay(0), ctx.json(mockOrderWithIdeal))
568-
})
569-
)
570-
571-
renderWithProviders(<MockedComponent />)
572-
573-
await screen.findByText(mockOrderWithIdeal.orderNo)
574-
575-
// Check for iDEAL heading
576-
expect(await screen.findByText('iDEAL')).toBeInTheDocument()
577412
})
578413
})

0 commit comments

Comments
 (0)