@@ -267,82 +267,3 @@ enum CardPresentPaymentServiceError: Error {
267267 case incompleteAddressConnectionError
268268 case couldNotCancelPayment
269269}
270-
271- import Hardware // [!] Temporarily here. Import needed for `CardReaderInput` for now.
272-
273- /// Mock CardPresentPaymentService for screenshot tests.
274- /// Simulates a connected card reader and emits payment events in the correct sequence.
275- final class CardPresentPaymentServiceScreenshotMock: CardPresentPaymentFacade {
276- let paymentEventPublisher : AnyPublisher < CardPresentPaymentEvent , Never >
277- let readerConnectionStatusPublisher : AnyPublisher < CardPresentPaymentReaderConnectionStatus , Never >
278- let cardReaderUpdateStatePublisher : AnyPublisher < CardReaderSoftwareUpdateState , Never >
279-
280- private let paymentEventSubject = PassthroughSubject < CardPresentPaymentEvent , Never > ( )
281-
282- init ( ) {
283- // Set up payment event publisher
284- paymentEventPublisher = paymentEventSubject
285- . receive ( on: DispatchQueue . main)
286- . eraseToAnyPublisher ( )
287-
288- // Always return a connected card reader for screenshots
289- let mockReader = CardPresentPaymentCardReader (
290- name: " Simulated POS E " ,
291- batteryLevel: 0.5 ,
292- softwareVersion: " 1.00.03.34-SZZZ_Generic_v45-300001 "
293- )
294- readerConnectionStatusPublisher = Just ( . connected( mockReader) )
295- . receive ( on: DispatchQueue . main)
296- . eraseToAnyPublisher ( )
297-
298- // No updates needed for screenshots
299- cardReaderUpdateStatePublisher = Just ( . none)
300- . receive ( on: DispatchQueue . main)
301- . eraseToAnyPublisher ( )
302- }
303-
304- func connectReader( using connectionMethod: CardReaderConnectionMethod ) async throws -> CardPresentPaymentReaderConnectionResult {
305- // Return connected reader immediately
306- let mockReader = CardPresentPaymentCardReader (
307- name: " Simulated POS E " ,
308- batteryLevel: 0.5 ,
309- softwareVersion: " 1.00.03.34-SZZZ_Generic_v45-300001 "
310- )
311- return . connected( mockReader)
312- }
313-
314- func disconnectReader( ) async {
315- // No-op for screenshots
316- }
317-
318- func updateCardReaderSoftware( ) async throws {
319- // No-op for screenshots
320- }
321-
322- func collectPayment( for order: Order , using connectionMethod: CardReaderConnectionMethod , channel: PaymentChannel ) async throws -> CardPresentPaymentResult {
323-
324- // 1. Validating order
325- paymentEventSubject. send ( . show( eventDetails: . validatingOrder( cancelPayment: { } ) ) )
326- try await Task . sleep ( nanoseconds: 100_000_000 ) // 0.1 seconds
327-
328- // 2. Preparing reader
329- paymentEventSubject. send ( . show( eventDetails: . preparingForPayment( cancelPayment: { } ) ) )
330- try await Task . sleep ( nanoseconds: 100_000_000 ) // 0.1 seconds
331-
332- // 3. Ready to accept card
333- let inputMethods : CardReaderInput = [ . tap, . swipe, . insert]
334- paymentEventSubject. send ( . show( eventDetails: . tapSwipeOrInsertCard( inputMethods: inputMethods, cancelPayment: { } ) ) )
335-
336- try await Task . sleep ( nanoseconds: 3_000_000_000 ) // 3 seconds, give it some time for the screenshot
337-
338- return . success( CardPresentPaymentTransaction ( ) )
339- }
340-
341- func cancelPayment( ) {
342- // No-op for screenshots
343- }
344-
345- func cancelPayment( ) async throws {
346- // No-op for screenshots
347- }
348- }
0 commit comments