Skip to content

Commit 97e1b2e

Browse files
committed
Test RecieptPrintingCoordinator
1 parent 1d6d5bd commit 97e1b2e

File tree

6 files changed

+160
-38
lines changed

6 files changed

+160
-38
lines changed

Hardware/Hardware/CardReader/CardPresentTransactionDetails.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,26 @@ public struct CardPresentTransactionDetails: Codable, Equatable {
2828

2929
/// (Only applicable to EMV payments) The authorization data from the card issuer.
3030
public let emvAuthData: String?
31+
32+
public init(last4: String,
33+
expMonth: Int,
34+
expYear: Int,
35+
cardholderName: String?,
36+
brand: CardBrand,
37+
fingerprint: String,
38+
generatedCard: String?,
39+
receipt: ReceiptDetails?,
40+
emvAuthData: String?) {
41+
self.last4 = last4
42+
self.expMonth = expMonth
43+
self.expYear = expYear
44+
self.cardholderName = cardholderName
45+
self.brand = brand
46+
self.fingerprint = fingerprint
47+
self.generatedCard = generatedCard
48+
self.receipt = receipt
49+
self.emvAuthData = emvAuthData
50+
}
3151
}
3252

3353
extension CardPresentTransactionDetails {

Hardware/Hardware/Printer/CardPresentReceiptParameters.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// Encapsulates the information necessary to print a receipt for a
22
/// card present payment
3-
public struct CardPresentReceiptParameters: Codable {
3+
public struct CardPresentReceiptParameters: Codable, Equatable {
44
/// The total amount
55
public let amount: UInt
66

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@
373373
02F6800925807CD300C3BAD2 /* GridStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02F6800825807CD300C3BAD2 /* GridStackView.swift */; };
374374
02FE89C7231FAA4100E85EF8 /* MainTabBarControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02FE89C6231FAA4100E85EF8 /* MainTabBarControllerTests.swift */; };
375375
03AA165E2719B7EF005CCB7B /* ReceiptPrintingCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03AA165D2719B7EF005CCB7B /* ReceiptPrintingCoordinator.swift */; };
376-
03AA16602719B83D005CCB7B /* RecieptPrintingCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03AA165F2719B83D005CCB7B /* RecieptPrintingCoordinatorTests.swift */; };
376+
03AA16602719B83D005CCB7B /* ReceiptPrintingCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03AA165F2719B83D005CCB7B /* ReceiptPrintingCoordinatorTests.swift */; };
377377
247CE89C2583402A00F9D9D1 /* Embassy in Frameworks */ = {isa = PBXBuildFile; productRef = 247CE89B2583402A00F9D9D1 /* Embassy */; };
378378
247CE8A6258340E600F9D9D1 /* ScreenshotImages.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 247CE8A5258340E600F9D9D1 /* ScreenshotImages.xcassets */; };
379379
24C5AC7625A53021008FD769 /* Embassy in Frameworks */ = {isa = PBXBuildFile; productRef = 247CE89B2583402A00F9D9D1 /* Embassy */; };
@@ -1810,7 +1810,7 @@
18101810
02F6800825807CD300C3BAD2 /* GridStackView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GridStackView.swift; sourceTree = "<group>"; };
18111811
02FE89C6231FAA4100E85EF8 /* MainTabBarControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarControllerTests.swift; sourceTree = "<group>"; };
18121812
03AA165D2719B7EF005CCB7B /* ReceiptPrintingCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptPrintingCoordinator.swift; sourceTree = "<group>"; };
1813-
03AA165F2719B83D005CCB7B /* RecieptPrintingCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecieptPrintingCoordinatorTests.swift; sourceTree = "<group>"; };
1813+
03AA165F2719B83D005CCB7B /* ReceiptPrintingCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptPrintingCoordinatorTests.swift; sourceTree = "<group>"; };
18141814
247CE8A5258340E600F9D9D1 /* ScreenshotImages.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ScreenshotImages.xcassets; sourceTree = "<group>"; };
18151815
24C579D124F476300076E1B4 /* Woo-Alpha.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Woo-Alpha.entitlements"; sourceTree = "<group>"; };
18161816
24F98C4F2502AEE200F49B68 /* EventLogging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventLogging.swift; sourceTree = "<group>"; };
@@ -6263,7 +6263,7 @@
62636263
E12AF69A26BA8B2000C371C1 /* CardPresentPaymentsOnboardingUseCaseTests.swift */,
62646264
D810F8F72639EDE900437C67 /* CardPresentPaymentsModalViewControllerTests.swift */,
62656265
31E906A226CC91A70099A985 /* CardReaderConnectionControllerTests.swift */,
6266-
03AA165F2719B83D005CCB7B /* RecieptPrintingCoordinatorTests.swift */,
6266+
03AA165F2719B83D005CCB7B /* ReceiptPrintingCoordinatorTests.swift */,
62676267
);
62686268
path = CardPresentPayments;
62696269
sourceTree = "<group>";
@@ -8107,7 +8107,7 @@
81078107
26FE09E124DB8FA000B9BDF5 /* SurveyCoordinatorControllerTests.swift in Sources */,
81088108
0277AEAB256CAA5300F45C4A /* MockShippingLabelAddress.swift in Sources */,
81098109
D83F593D225B4B5000626E75 /* ManualTrackingViewControllerTests.swift in Sources */,
8110-
03AA16602719B83D005CCB7B /* RecieptPrintingCoordinatorTests.swift in Sources */,
8110+
03AA16602719B83D005CCB7B /* ReceiptPrintingCoordinatorTests.swift in Sources */,
81118111
CEEC9B6621E7C5200055EEF0 /* AppRatingManagerTests.swift in Sources */,
81128112
263EB409242C58EA00F3A15F /* ProductFormActionsFactoryTests.swift in Sources */,
81138113
02BA23C022EE9DAF009539E7 /* AsyncDictionaryTests.swift in Sources */,
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import XCTest
2+
import TestKit
3+
import Yosemite
4+
import Hardware
5+
6+
@testable import WooCommerce
7+
8+
class ReceiptPrintingCoordinatorTests: XCTestCase {
9+
func test_printReceipt_logs_receiptPrintTapped_analyticEvent() {
10+
// Given
11+
ServiceLocator.setAnalytics(WooAnalytics(analyticsProvider: MockAnalyticsProvider()))
12+
let order = MockOrders().makeOrder()
13+
let params = CardPresentReceiptParameters.makeParams()
14+
15+
// When
16+
ReceiptPrintingCoordinator.printReceipt(for: order, params: params)
17+
18+
// Then
19+
let analytics = ServiceLocator.analytics.analyticsProvider as! MockAnalyticsProvider
20+
let receivedEvents = analytics.receivedEvents
21+
22+
XCTAssert(receivedEvents.contains(WooAnalyticsStat.receiptPrintTapped.rawValue))
23+
}
24+
25+
func test_printReceipt_sends_print_receiptAction() throws {
26+
// Given
27+
let order = MockOrders().makeOrder()
28+
let params = CardPresentReceiptParameters.makeParams()
29+
30+
let storesManager = MockStoresManager(sessionManager: .makeForTesting(authenticated: true))
31+
storesManager.reset()
32+
33+
ServiceLocator.setStores(storesManager)
34+
35+
assertEmpty(storesManager.receivedActions)
36+
37+
// When
38+
ReceiptPrintingCoordinator.printReceipt(for: order, params: params)
39+
40+
//Then
41+
XCTAssertEqual(storesManager.receivedActions.count, 1)
42+
43+
let action = try XCTUnwrap(storesManager.receivedActions.first as? ReceiptAction)
44+
switch action {
45+
case .print(let actionOrder, let actionParams, completion: _):
46+
XCTAssertEqual(actionOrder, order)
47+
XCTAssertEqual(actionParams, params)
48+
default:
49+
XCTFail("Print Receipt failed to dispatch .print action")
50+
}
51+
}
52+
53+
func test_printReceipt_success_logs_receiptPrintSuccess_analyticEvent() throws {
54+
try assertAnalyticLogged(.receiptPrintSuccess, for: .success)
55+
}
56+
57+
func test_printReceipt_cancel_logs_receiptPrintCanceled_analyticEvent() throws {
58+
try assertAnalyticLogged(.receiptPrintCanceled, for: .cancel)
59+
}
60+
61+
func test_printReceipt_fail_logs_receiptPrintFailed_analyticEvent() throws {
62+
let error = NSError(domain: "errordomain", code: 123, userInfo: nil)
63+
try assertAnalyticLogged(.receiptPrintFailed, for: .failure(error))
64+
}
65+
}
66+
67+
extension ReceiptPrintingCoordinatorTests {
68+
func assertAnalyticLogged(_ analytic: WooAnalyticsStat, for printingResult: PrintingResult) throws {
69+
// Given
70+
let order = MockOrders().makeOrder()
71+
let params = CardPresentReceiptParameters.makeParams()
72+
73+
let storesManager = MockStoresManager(sessionManager: .makeForTesting(authenticated: true))
74+
ServiceLocator.setStores(storesManager)
75+
ServiceLocator.setAnalytics(WooAnalytics(analyticsProvider: MockAnalyticsProvider()))
76+
77+
// When
78+
ReceiptPrintingCoordinator.printReceipt(for: order, params: params)
79+
80+
//Then
81+
let action = try XCTUnwrap(storesManager.receivedActions.first as? ReceiptAction)
82+
switch action {
83+
case .print(order: _, parameters: _, let completion):
84+
completion(printingResult)
85+
86+
let analytics = ServiceLocator.analytics.analyticsProvider as! MockAnalyticsProvider
87+
let receivedEvents = analytics.receivedEvents
88+
89+
XCTAssert(receivedEvents.contains(analytic.rawValue))
90+
default:
91+
XCTFail("Print Receipt failed to dispatch .print action")
92+
}
93+
}
94+
}
95+
96+
extension CardPresentReceiptParameters {
97+
static func makeParams(amount: UInt = 123,
98+
formattedAmount: String = "0.00",
99+
currency: String = "USD",
100+
date: Date = Date(timeIntervalSince1970: TimeInterval(1630000000)), //Thu Aug 26 2021 17:46:40 GMT+0000
101+
storeName: String? = "My store",
102+
cardDetails: CardPresentTransactionDetails = CardPresentTransactionDetails.makeDetails(),
103+
orderID: Int64? = 12345) -> CardPresentReceiptParameters {
104+
CardPresentReceiptParameters(amount: amount,
105+
formattedAmount: formattedAmount,
106+
currency: currency,
107+
date: date,
108+
storeName: storeName,
109+
cardDetails: cardDetails,
110+
orderID: orderID)
111+
}
112+
}
113+
114+
extension CardPresentTransactionDetails {
115+
static func makeDetails(last4: String = "0000",
116+
expMonth: Int = 1,
117+
expYear: Int = 31,
118+
cardholderName: String? = nil,
119+
brand: CardBrand = .unknown,
120+
fingerprint: String = "y29834",
121+
generatedCard: String? = "1230",
122+
receipt: ReceiptDetails? = nil,
123+
emvAuthData: String? = nil) -> CardPresentTransactionDetails {
124+
CardPresentTransactionDetails(last4: last4,
125+
expMonth: expMonth,
126+
expYear: expYear,
127+
cardholderName: cardholderName,
128+
brand: brand,
129+
fingerprint: fingerprint,
130+
generatedCard: generatedCard,
131+
receipt: receipt,
132+
emvAuthData: emvAuthData)
133+
}
134+
}

WooCommerce/WooCommerceTests/ViewRelated/CardPresentPayments/RecieptPrintingCoordinatorTests.swift

Lines changed: 0 additions & 33 deletions
This file was deleted.

Yosemite/Yosemite/Model/Model.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ public typealias PaymentParameters = Hardware.PaymentIntentParameters
129129
public typealias PaymentIntent = Hardware.PaymentIntent
130130
public typealias PrintingResult = Hardware.PrintingResult
131131
public typealias CardPresentReceiptParameters = Hardware.CardPresentReceiptParameters
132+
public typealias CardPresentTransactionDetails = Hardware.CardPresentTransactionDetails
132133
public typealias WCPayAccount = Networking.WCPayAccount
133134
public typealias WCPayAccountStatusEnum = Networking.WCPayAccountStatusEnum
134135
public typealias WCPayCustomer = Networking.WCPayCustomer

0 commit comments

Comments
 (0)