export type Tier = 'guest' | 'member' | 'premium'; // TODO: 아래 컴포넌트를 GuestCheckout / MemberCheckout / PremiumCheckout 세 개로 분리하고, // CheckoutSummary 는 tier 에 따라 셋 중 하나를 렌더하는 dispatcher 로 만들어라. export function CheckoutSummary({ tier, subtotal }: { tier: Tier; subtotal: number }) { const isPremium = tier === 'premium'; const isMember = tier === 'member' || tier === 'premium'; const isGuest = tier === 'guest'; const shippingThreshold = isPremium ? 50 : isMember ? 100 : Infinity; const freeShipping = subtotal >= shippingThreshold; const shippingCost = freeShipping ? 0 : isPremium ? 4.99 : isMember ? 7.99 : 12.99; const discountRate = isPremium ? 0.15 : isMember ? 0.05 : 0; const discount = subtotal * discountRate; const days = isPremium ? '1-2' : isMember ? '3-5' : '7-10'; const total = subtotal - discount + shippingCost; return ( <div data-testid="checkout"> <div data-testid="discount">{discount.toFixed(2)}</div> <div data-testid="shipping">{shippingCost.toFixed(2)}</div> <div data-testid="days">{days}</div> <div data-testid="total">{total.toFixed(2)}</div> <div data-testid="banner"> {isGuest && 'Checking out as guest'} {isMember && !isPremium && `Member discount ${(discountRate * 100).toFixed(0)}%`} {isPremium && 'Premium Member — 15% off + free express'} </div> </div> ); }
Tests