@@ -38,6 +38,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
3838 let order = MockOrders ( ) . empty ( ) . copy ( refunds: refundItems)
3939
4040 let details = RefundConfirmationViewModel . Details ( order: order,
41+ charge: nil ,
4142 amount: " 0.0 " ,
4243 refundsShipping: false ,
4344 refundsFees: false ,
@@ -64,6 +65,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
6465
6566 let order = MockOrders ( ) . empty ( )
6667 let details = RefundConfirmationViewModel . Details ( order: order,
68+ charge: nil ,
6769 amount: " 130.3473 " ,
6870 refundsShipping: false ,
6971 refundsFees: false ,
@@ -82,6 +84,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
8284 let order = MockOrders ( ) . empty ( ) . copy ( paymentMethodID: " stipe " , paymentMethodTitle: " Stripe " )
8385 let gateway = PaymentGateway ( siteID: 123 , gatewayID: " stripe " , title: " Stripe " , description: " " , enabled: true , features: [ . refunds] )
8486 let details = RefundConfirmationViewModel . Details ( order: order,
87+ charge: nil ,
8588 amount: " " ,
8689 refundsShipping: false ,
8790 refundsFees: false ,
@@ -98,11 +101,39 @@ final class RefundConfirmationViewModelTests: XCTestCase {
98101 XCTAssertEqual ( row. text, order. paymentMethodTitle)
99102 }
100103
104+ func test_viewModel_includes_card_details_in_refundVia_values_when_charge_is_available( ) throws {
105+ // Given
106+ let order = MockOrders ( ) . empty ( ) . copy ( paymentMethodID: " stipe " , paymentMethodTitle: " Stripe " )
107+ let paymentMethodDetails = WCPayCardPresentPaymentDetails ( brand: . mastercard, last4: " 6292 " , funding: . credit, receipt: . fake( ) )
108+ let charge = WCPayCharge . fake ( ) . copy ( paymentMethodDetails: . cardPresent( details: paymentMethodDetails) )
109+ let gateway = PaymentGateway ( siteID: 123 , gatewayID: " stripe " , title: " Stripe " , description: " " , enabled: true , features: [ . refunds] )
110+ let details = RefundConfirmationViewModel . Details ( order: order,
111+ charge: charge,
112+ amount: " " ,
113+ refundsShipping: false ,
114+ refundsFees: false ,
115+ items: [ ] ,
116+ paymentGateway: gateway)
117+
118+ // When
119+ let viewModel = RefundConfirmationViewModel ( details: details)
120+
121+ // We expect the Refund Via row to be the last item in the last row.
122+ let row = try XCTUnwrap ( viewModel. sections. last? . rows. last as? RefundConfirmationViewModel . TitleAndBodyRow )
123+
124+ // Then
125+ XCTAssertEqual ( row. title, order. paymentMethodTitle)
126+ let body = try XCTUnwrap ( row. body)
127+ XCTAssert ( body. contains ( " Mastercard " ) )
128+ XCTAssert ( body. contains ( " 6292 " ) )
129+ }
130+
101131 func test_viewModel_has_manual_refundVia_values_when_using_a_gateway_that_does_not_support_refunds( ) throws {
102132 // Given
103133 let order = MockOrders ( ) . empty ( ) . copy ( paymentMethodID: " stipe " , paymentMethodTitle: " Stripe " )
104134 let gateway = PaymentGateway ( siteID: 123 , gatewayID: " stripe " , title: " Stripe " , description: " " , enabled: true , features: [ ] )
105135 let details = RefundConfirmationViewModel . Details ( order: order,
136+ charge: nil ,
106137 amount: " " ,
107138 refundsShipping: false ,
108139 refundsFees: false ,
@@ -126,6 +157,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
126157 // Given
127158 let order = MockOrders ( ) . empty ( )
128159 let details = RefundConfirmationViewModel . Details ( order: order,
160+ charge: nil ,
129161 amount: " 100.0 " ,
130162 refundsShipping: false ,
131163 refundsFees: false ,
@@ -162,6 +194,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
162194 // Given
163195 let order = MockOrders ( ) . empty ( )
164196 let details = RefundConfirmationViewModel . Details ( order: order,
197+ charge: nil ,
165198 amount: " 100.0 " ,
166199 refundsShipping: false ,
167200 refundsFees: false ,
@@ -201,6 +234,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
201234 let order = MockOrders ( ) . empty ( ) . copy ( paymentMethodID: " stipe " , paymentMethodTitle: " Stripe " )
202235 let gateway = PaymentGateway ( siteID: 123 , gatewayID: " stripe " , title: " Stripe " , description: " " , enabled: true , features: [ . refunds] )
203236 let details = RefundConfirmationViewModel . Details ( order: order,
237+ charge: nil ,
204238 amount: " 100.0 " ,
205239 refundsShipping: true ,
206240 refundsFees: true ,
@@ -230,6 +264,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
230264 let order = MockOrders ( ) . empty ( ) . copy ( paymentMethodID: " stipe " , paymentMethodTitle: " Stripe " )
231265 let gateway = PaymentGateway ( siteID: 123 , gatewayID: " stripe " , title: " Stripe " , description: " " , enabled: true , features: [ . products] )
232266 let details = RefundConfirmationViewModel . Details ( order: order,
267+ charge: nil ,
233268 amount: " 100.0 " ,
234269 refundsShipping: true ,
235270 refundsFees: true ,
@@ -257,6 +292,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
257292 // Given
258293 let order = MockOrders ( ) . empty ( )
259294 let details = RefundConfirmationViewModel . Details ( order: order,
295+ charge: nil ,
260296 amount: " 100.0 " ,
261297 refundsShipping: false ,
262298 refundsFees: false ,
@@ -295,6 +331,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
295331 // Given
296332 let order = MockOrders ( ) . makeOrder ( )
297333 let details = RefundConfirmationViewModel . Details ( order: order,
334+ charge: nil ,
298335 amount: " 0.0 " ,
299336 refundsShipping: false ,
300337 refundsFees: false ,
@@ -315,6 +352,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
315352 let order = MockOrders ( ) . empty ( ) . copy ( orderID: 123 , total: " 100.0 " , paymentMethodID: " stripe " )
316353 let gateway = PaymentGateway ( siteID: 234 , gatewayID: " stripe " , title: " Stripe " , description: " " , enabled: true , features: [ ] )
317354 let details = RefundConfirmationViewModel . Details ( order: order,
355+ charge: nil ,
318356 amount: " 100.0 " ,
319357 refundsShipping: false ,
320358 refundsFees: false ,
@@ -339,6 +377,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
339377 let order = MockOrders ( ) . empty ( ) . copy ( orderID: 123 , total: " 120.0 " , paymentMethodID: " stripe " )
340378 let gateway = PaymentGateway ( siteID: 234 , gatewayID: " stripe " , title: " Stripe " , description: " " , enabled: true , features: [ ] )
341379 let details = RefundConfirmationViewModel . Details ( order: order,
380+ charge: nil ,
342381 amount: " 100.0 " ,
343382 refundsShipping: false ,
344383 refundsFees: false ,
@@ -362,6 +401,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
362401 // Given
363402 let order = MockOrders ( ) . empty ( )
364403 let details = RefundConfirmationViewModel . Details ( order: order,
404+ charge: nil ,
365405 amount: " 100.0 " ,
366406 refundsShipping: false ,
367407 refundsFees: false ,
@@ -396,6 +436,7 @@ final class RefundConfirmationViewModelTests: XCTestCase {
396436 // Given
397437 let order = MockOrders ( ) . empty ( )
398438 let details = RefundConfirmationViewModel . Details ( order: order,
439+ charge: nil ,
399440 amount: " 100.0 " ,
400441 refundsShipping: false ,
401442 refundsFees: false ,
0 commit comments