@@ -566,8 +566,122 @@ private struct CashPaymentButton: View {
566566}
567567
568568#if DEBUG
569- #Preview {
569+ #Preview( " Card Reader Not Connected " ) {
570570 TotalsView ( )
571- . environment ( POSPreviewHelpers . makePreviewAggregateModel ( ) )
571+ . environment ( POSPreviewHelpers . makePreviewAggregateModel (
572+ cardPresentPaymentService: CardPresentPaymentPreviewService ( connectionStatus: . disconnected)
573+ ) )
574+ }
575+
576+ #Preview( " Card Reader Connected " ) {
577+ TotalsView ( )
578+ . environment ( POSPreviewHelpers . makePreviewAggregateModel (
579+ cardPresentPaymentService: CardPresentPaymentPreviewService (
580+ connectionStatus: . connected( CardPresentPaymentCardReader ( name: " Reader " , batteryLevel: 0.85 ) )
581+ )
582+ ) )
583+ }
584+
585+ #Preview( " Validating Order " ) {
586+ let aggregateModel = POSPreviewHelpers . makePreviewAggregateModel (
587+ cardPresentPaymentService: CardPresentPaymentPreviewService (
588+ connectionStatus: . connected( CardPresentPaymentCardReader ( name: " Reader " , batteryLevel: 0.85 ) )
589+ )
590+ )
591+ Task { @MainActor in
592+ aggregateModel. setPreviewState (
593+ paymentState: PointOfSalePaymentState ( card: . validatingOrder, cash: . idle) ,
594+ inlineMessage: . validatingOrder( viewModel: PointOfSaleCardPresentPaymentValidatingOrderMessageViewModel ( ) )
595+ )
596+ }
597+ return TotalsView ( )
598+ . environment ( aggregateModel)
599+ }
600+
601+ #Preview( " Accepting Card " ) {
602+ let aggregateModel = POSPreviewHelpers . makePreviewAggregateModel (
603+ cardPresentPaymentService: CardPresentPaymentPreviewService (
604+ connectionStatus: . connected( CardPresentPaymentCardReader ( name: " Reader " , batteryLevel: 0.85 ) )
605+ )
606+ )
607+ Task { @MainActor in
608+ aggregateModel. setPreviewState (
609+ paymentState: PointOfSalePaymentState ( card: . acceptingCard, cash: . idle) ,
610+ inlineMessage: . tapSwipeOrInsertCard( viewModel: PointOfSaleCardPresentPaymentTapSwipeInsertCardMessageViewModel ( inputMethods: [ ] ) )
611+ )
612+ }
613+ return TotalsView ( )
614+ . environment ( aggregateModel)
572615}
616+
617+ #Preview( " Processing Payment " ) {
618+ let aggregateModel = POSPreviewHelpers . makePreviewAggregateModel (
619+ cardPresentPaymentService: CardPresentPaymentPreviewService (
620+ connectionStatus: . connected( CardPresentPaymentCardReader ( name: " Reader " , batteryLevel: 0.85 ) )
621+ )
622+ )
623+ Task { @MainActor in
624+ aggregateModel. setPreviewState (
625+ paymentState: PointOfSalePaymentState ( card: . processingPayment, cash: . idle) ,
626+ inlineMessage: . processing( viewModel: PointOfSaleCardPresentPaymentProcessingMessageViewModel ( ) )
627+ )
628+ }
629+ return TotalsView ( )
630+ . environment ( aggregateModel)
631+ }
632+
633+ #Preview( " Card Payment Successful " ) {
634+ let aggregateModel = POSPreviewHelpers . makePreviewAggregateModel (
635+ cardPresentPaymentService: CardPresentPaymentPreviewService (
636+ connectionStatus: . connected( CardPresentPaymentCardReader ( name: " Reader " , batteryLevel: 0.85 ) )
637+ )
638+ )
639+ Task { @MainActor in
640+ aggregateModel. setPreviewState (
641+ paymentState: PointOfSalePaymentState ( card: . cardPaymentSuccessful, cash: . idle) ,
642+ inlineMessage: . paymentSuccess( viewModel: PointOfSalePaymentSuccessViewModel ( formattedOrderTotal: " $12.00 " , paymentMethod: . card) )
643+ )
644+ }
645+ return TotalsView ( )
646+ . environment ( aggregateModel)
647+ }
648+
649+ #Preview( " Display Reader Message " ) {
650+ let aggregateModel = POSPreviewHelpers . makePreviewAggregateModel (
651+ cardPresentPaymentService: CardPresentPaymentPreviewService (
652+ connectionStatus: . connected( CardPresentPaymentCardReader ( name: " Reader " , batteryLevel: 0.85 ) )
653+ )
654+ )
655+ Task { @MainActor in
656+ aggregateModel. setPreviewState (
657+ paymentState: PointOfSalePaymentState ( card: . processingPayment, cash: . idle) ,
658+ inlineMessage: . displayReaderMessage( viewModel: PointOfSaleCardPresentPaymentDisplayReaderMessageMessageViewModel ( message: " Remove card " ) )
659+ )
660+ }
661+ return TotalsView ( )
662+ . environment ( aggregateModel)
663+ }
664+
665+ #Preview( " Payment Error " ) {
666+ let aggregateModel = POSPreviewHelpers . makePreviewAggregateModel (
667+ cardPresentPaymentService: CardPresentPaymentPreviewService (
668+ connectionStatus: . connected( CardPresentPaymentCardReader ( name: " Reader " , batteryLevel: 0.85 ) )
669+ )
670+ )
671+ Task { @MainActor in
672+ aggregateModel. setPreviewState (
673+ paymentState: PointOfSalePaymentState ( card: . paymentError, cash: . idle) ,
674+ inlineMessage: . paymentError( viewModel: PointOfSaleCardPresentPaymentErrorMessageViewModel (
675+ error: NSError ( domain: " CardPaymentError " , code: 1001 , userInfo: [ NSLocalizedDescriptionKey: " Card declined " ] ) ,
676+ tryPaymentAgainButtonAction: { } ,
677+ backToCheckoutButtonAction: { }
678+ ) )
679+ )
680+ }
681+ return TotalsView ( )
682+ . environment ( aggregateModel)
683+ }
684+
685+ #endif
686+
573687#endif
0 commit comments