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>
@property (nonatomic, nullable) PKPaymentAuthorizationController *viewController;
@property (nonatomic, nullable) PKPaymentAuthorizationController *authorizationController;
@end
@interface STPApplePayContextFunctionalTest : XCTestCase
@ -51,16 +51,16 @@
// Stub dismissViewControllerAnimated: to just call its completion block
XCTestExpectation *didDismissVC = [self expectationWithDescription:@"viewController dismissed"];
id mockVC = OCMClassMock([PKPaymentAuthorizationController class]);
OCMStub([mockVC dismissViewControllerAnimated:YES completion:[OCMArg any]]).andDo(^(NSInvocation *invocation) {
id mockC = OCMClassMock([PKPaymentAuthorizationController class]);
OCMStub([mockC dismissWithCompletion:[OCMArg any]]).andDo(^(NSInvocation *invocation) {
__unsafe_unretained void (^dismissCompletion)(void);
[invocation getArgument:&dismissCompletion atIndex:3];
[invocation getArgument:&dismissCompletion atIndex:2];
dismissCompletion();
[didDismissVC fulfill];
});
self.context = [[STPApplePayContext alloc] initWithPaymentRequest:[STPFixtures applePayRequest] delegate:self.delegate];
self.context.apiClient = self.apiClient;
self.context.viewController = mockVC;
self.context.authorizationController = mockC;
}
- (void)testCompletesManualConfirmationPaymentIntent {
@ -195,12 +195,12 @@
// Cancelling Apple Pay *before* the context attempts to confirms the PI...
STPTestApplePayContextDelegate *delegate = self.delegate;
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)
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]
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...
id apiClientMock = OCMPartialMock(self.apiClient);
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;
@ -233,7 +233,7 @@
}];
};
[self.context paymentAuthorizationController:self.context.viewController
[self.context paymentAuthorizationController:self.context.authorizationController
didAuthorizePayment:[STPFixtures simulatorApplePayPayment]
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:`
// After you call its completion block, it calls `paymentAuthorizationControllerDidFinish:`
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);
dispatch_async(dispatch_get_main_queue(), ^{
[self.context paymentAuthorizationControllerDidFinish:self.context.viewController];
[self.context paymentAuthorizationControllerDidFinish:self.context.authorizationController];
[didCallAuthorizePaymentCompletion fulfill];
});
}];