import type { CardFields } from '@commerce/types/customer/card' import type { AddressFields } from '@commerce/types/customer/address' import type { CommercejsCheckoutCapture } from '../types/checkout' /** * Creates a checkout payload suitable for test checkouts. * 1. Hard-codes the payment values for the Commerce.js test gateway. * 2. Hard-codes the email until an email field exists on the checkout form. * 3. Gets as much as much checkout info as possible from the checkout form, and uses fallback values. */ export function normalizeTestCheckout({ paymentInfo, shippingInfo, shippingOption, }: { paymentInfo?: CardFields shippingInfo?: AddressFields shippingOption: string }): CommercejsCheckoutCapture { const firstName = shippingInfo?.firstName || paymentInfo?.firstName || 'Nextjs' const lastName = shippingInfo?.lastName || paymentInfo?.lastName || 'Commerce' const fullName = `${firstName} ${lastName}` const postalCode = shippingInfo?.zipCode || paymentInfo?.zipCode || '94103' const street = shippingInfo?.streetNumber || paymentInfo?.streetNumber || 'Test Street' const townCity = shippingInfo?.city || paymentInfo?.city || 'Test Town' return { payment: { gateway: 'test_gateway', card: { number: '4242 4242 4242 4242', expiry_month: '01', expiry_year: '2024', cvc: '123', postal_zip_code: postalCode, }, }, customer: { email: 'nextcommerce@test.com', firstname: firstName, lastname: lastName, }, shipping: { name: fullName, street, town_city: townCity, country: 'US', }, billing: { name: fullName, street, town_city: townCity, postal_zip_code: postalCode, county_state: 'California', country: 'US', }, fulfillment: { shipping_method: shippingOption, }, } }