This commit is contained in:
David Estes 2021-02-16 17:08:13 -08:00
parent dcf6a04ec1
commit 05d59f51e6
1 changed files with 11 additions and 11 deletions

View File

@ -33,7 +33,7 @@
@interface STPApplePayContext(Testing) <PKPaymentAuthorizationControllerDelegate> @interface STPApplePayContext(Testing) <PKPaymentAuthorizationControllerDelegate>
@property (nonatomic, nullable) PKPaymentAuthorizationController *viewController; @property (nonatomic, nullable) PKPaymentAuthorizationController *authorizationController;
@end @end
@interface STPApplePayContextFunctionalTest : XCTestCase @interface STPApplePayContextFunctionalTest : XCTestCase
@ -51,16 +51,16 @@
// Stub dismissViewControllerAnimated: to just call its completion block // Stub dismissViewControllerAnimated: to just call its completion block
XCTestExpectation *didDismissVC = [self expectationWithDescription:@"viewController dismissed"]; XCTestExpectation *didDismissVC = [self expectationWithDescription:@"viewController dismissed"];
id mockVC = OCMClassMock([PKPaymentAuthorizationController class]); id mockC = OCMClassMock([PKPaymentAuthorizationController class]);
OCMStub([mockVC dismissViewControllerAnimated:YES completion:[OCMArg any]]).andDo(^(NSInvocation *invocation) { OCMStub([mockC dismissWithCompletion:[OCMArg any]]).andDo(^(NSInvocation *invocation) {
__unsafe_unretained void (^dismissCompletion)(void); __unsafe_unretained void (^dismissCompletion)(void);
[invocation getArgument:&dismissCompletion atIndex:3]; [invocation getArgument:&dismissCompletion atIndex:2];
dismissCompletion(); dismissCompletion();
[didDismissVC fulfill]; [didDismissVC fulfill];
}); });
self.context = [[STPApplePayContext alloc] initWithPaymentRequest:[STPFixtures applePayRequest] delegate:self.delegate]; self.context = [[STPApplePayContext alloc] initWithPaymentRequest:[STPFixtures applePayRequest] delegate:self.delegate];
self.context.apiClient = self.apiClient; self.context.apiClient = self.apiClient;
self.context.viewController = mockVC; self.context.authorizationController = mockC;
} }
- (void)testCompletesManualConfirmationPaymentIntent { - (void)testCompletesManualConfirmationPaymentIntent {
@ -195,12 +195,12 @@
// Cancelling Apple Pay *before* the context attempts to confirms the PI... // Cancelling Apple Pay *before* the context attempts to confirms the PI...
STPTestApplePayContextDelegate *delegate = self.delegate; STPTestApplePayContextDelegate *delegate = self.delegate;
delegate.didCreatePaymentMethodDelegateMethod = ^(__unused STPPaymentMethod *paymentMethod, __unused PKPayment *paymentInformation, STPIntentClientSecretCompletionBlock completion) { delegate.didCreatePaymentMethodDelegateMethod = ^(__unused STPPaymentMethod *paymentMethod, __unused PKPayment *paymentInformation, STPIntentClientSecretCompletionBlock completion) {
[self.context paymentAuthorizationControllerDidFinish:self.context.viewController]; // Simulate cancel before passing PI to the context [self.context paymentAuthorizationControllerDidFinish:self.context.authorizationController]; // Simulate cancel before passing PI to the context
// ...should never retrieve the PI (b/c it is cancelled before) // ...should never retrieve the PI (b/c it is cancelled before)
completion(@"A 'client secret' that triggers an exception if fetched", nil); completion(@"A 'client secret' that triggers an exception if fetched", nil);
}; };
[self.context paymentAuthorizationController:self.context.viewController [self.context paymentAuthorizationController:self.context.authorizationController
didAuthorizePayment:[STPFixtures simulatorApplePayPayment] didAuthorizePayment:[STPFixtures simulatorApplePayPayment]
handler:^(PKPaymentAuthorizationResult * __unused _Nonnull result) {}]; // Simulate user tapping 'Pay' button in Apple Pay handler:^(PKPaymentAuthorizationResult * __unused _Nonnull result) {}]; // Simulate user tapping 'Pay' button in Apple Pay
@ -220,7 +220,7 @@
// Cancelling Apple Pay *after* the context attempts to confirms the PI... // Cancelling Apple Pay *after* the context attempts to confirms the PI...
id apiClientMock = OCMPartialMock(self.apiClient); id apiClientMock = OCMPartialMock(self.apiClient);
OCMStub([apiClientMock confirmPaymentIntentWithParams:[OCMArg any] completion:[OCMArg any]]).andForwardToRealObject().andDo(^(NSInvocation *__unused invocation) { OCMStub([apiClientMock confirmPaymentIntentWithParams:[OCMArg any] completion:[OCMArg any]]).andForwardToRealObject().andDo(^(NSInvocation *__unused invocation) {
[self.context paymentAuthorizationControllerDidFinish:self.context.viewController]; // Simulate cancel after PI confirm begins [self.context paymentAuthorizationControllerDidFinish:self.context.authorizationController]; // Simulate cancel after PI confirm begins
}); });
__block NSString *clientSecret; __block NSString *clientSecret;
@ -233,7 +233,7 @@
}]; }];
}; };
[self.context paymentAuthorizationController:self.context.viewController [self.context paymentAuthorizationController:self.context.authorizationController
didAuthorizePayment:[STPFixtures simulatorApplePayPayment] didAuthorizePayment:[STPFixtures simulatorApplePayPayment]
handler:^(PKPaymentAuthorizationResult * __unused _Nonnull result) {}]; // Simulate user tapping 'Pay' button in Apple Pay handler:^(PKPaymentAuthorizationResult * __unused _Nonnull result) {}]; // Simulate user tapping 'Pay' button in Apple Pay
@ -261,10 +261,10 @@
// When the user taps 'Pay', PKPaymentAuthorizationController calls `didAuthorizePayment:completion:` // When the user taps 'Pay', PKPaymentAuthorizationController calls `didAuthorizePayment:completion:`
// After you call its completion block, it calls `paymentAuthorizationControllerDidFinish:` // After you call its completion block, it calls `paymentAuthorizationControllerDidFinish:`
XCTestExpectation *didCallAuthorizePaymentCompletion = [self expectationWithDescription:@"ApplePayContext called completion block of paymentAuthorizationController:didAuthorizePayment:completion:"]; XCTestExpectation *didCallAuthorizePaymentCompletion = [self expectationWithDescription:@"ApplePayContext called completion block of paymentAuthorizationController:didAuthorizePayment:completion:"];
[self.context paymentAuthorizationController:self.context.viewController didAuthorizePayment:[STPFixtures simulatorApplePayPayment] handler:^(PKPaymentAuthorizationResult * _Nonnull result) { [self.context paymentAuthorizationController:self.context.authorizationController didAuthorizePayment:[STPFixtures simulatorApplePayPayment] handler:^(PKPaymentAuthorizationResult * _Nonnull result) {
XCTAssertEqual(expectedStatus, result.status); XCTAssertEqual(expectedStatus, result.status);
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
[self.context paymentAuthorizationControllerDidFinish:self.context.viewController]; [self.context paymentAuthorizationControllerDidFinish:self.context.authorizationController];
[didCallAuthorizePaymentCompletion fulfill]; [didCallAuthorizePaymentCompletion fulfill];
}); });
}]; }];