From ec2a5313b2eed65d7e3f1046950a4f081bd937fb Mon Sep 17 00:00:00 2001 From: David Estes Date: Fri, 30 Aug 2019 16:30:09 -0700 Subject: [PATCH] Updates based on feedback, add UI Test --- LocalizationTester/ViewController.m | 26 +++++++++++++++++++ .../LocalizationTesterUITests.m | 10 +++++++ .../PublicHeaders/STPPaymentConfiguration.h | 6 ++--- Stripe/STPAddCardViewController.m | 2 +- Stripe/STPAddressViewModel.h | 2 ++ Stripe/STPPaymentConfiguration+Private.h | 1 + Stripe/STPPaymentConfiguration.m | 14 +++++++++- Stripe/STPShippingAddressViewController.m | 3 ++- 8 files changed, 58 insertions(+), 6 deletions(-) diff --git a/LocalizationTester/ViewController.m b/LocalizationTester/ViewController.m index b2e21382e6a..dfe18ed411f 100644 --- a/LocalizationTester/ViewController.m +++ b/LocalizationTester/ViewController.m @@ -24,6 +24,7 @@ typedef NS_ENUM(NSInteger, LocalizedScreen) { LocalizedScreenPaymentOptionsVCLoading, LocalizedScreenShippingAddressVC, LocalizedScreenShippingAddressVCBadAddress, + LocalizedScreenShippingAddressVCCountryOutsideAvailable, LocalizedScreenShippingAddressVCDelivery, LocalizedScreenShippingAddressVCContact, }; @@ -46,6 +47,8 @@ typedef NS_ENUM(NSInteger, LocalizedScreen) { return @"Shipping Address VC"; case LocalizedScreenShippingAddressVCBadAddress: return @"Shipping Address VC Bad Address"; + case LocalizedScreenShippingAddressVCCountryOutsideAvailable: + return @"Shipping Address VC Country Outside Available"; case LocalizedScreenShippingAddressVCDelivery: return @"Shipping Address VC for Delivery"; case LocalizedScreenShippingAddressVCContact: @@ -74,6 +77,7 @@ - (void)viewDidLoad { @(LocalizedScreenPaymentOptionsVCLoading), @(LocalizedScreenShippingAddressVC), @(LocalizedScreenShippingAddressVCBadAddress), + @(LocalizedScreenShippingAddressVCCountryOutsideAvailable), @(LocalizedScreenShippingAddressVCDelivery), @(LocalizedScreenShippingAddressVCContact), ]; @@ -269,6 +273,28 @@ - (void)tableView:(__unused UITableView *)tableView didSelectRowAtIndexPath:(__u } break; + case LocalizedScreenShippingAddressVCCountryOutsideAvailable: + { + STPPaymentConfiguration *configuration = [[STPPaymentConfiguration alloc] init]; + configuration.requiredShippingAddressFields = [NSSet setWithObjects:STPContactFieldPostalAddress, STPContactFieldEmailAddress, STPContactFieldPhoneNumber, STPContactFieldName, nil]; + configuration.availableCountries = [NSSet setWithArray:@[@"BT"]]; + STPUserInformation *prefilledInfo = [[STPUserInformation alloc] init]; + STPAddress *billingAddress = [[STPAddress alloc] init]; + billingAddress.name = @"Test"; + billingAddress.country = @"GB"; + prefilledInfo.billingAddress = billingAddress; + + STPShippingAddressViewController *shippingAddressVC = [[STPShippingAddressViewController alloc] initWithConfiguration:configuration + theme:[STPTheme defaultTheme] + currency:@"usd" + shippingAddress:nil + selectedShippingMethod:nil + prefilledInformation:prefilledInfo]; + shippingAddressVC.delegate = self; + vc = shippingAddressVC; + } + break; + case LocalizedScreenShippingAddressVCDelivery: { STPPaymentConfiguration *configuration = [[STPPaymentConfiguration alloc] init]; diff --git a/LocalizationTesterUITests/LocalizationTesterUITests.m b/LocalizationTesterUITests/LocalizationTesterUITests.m index 7bd3440efb7..b76e6a4067d 100644 --- a/LocalizationTesterUITests/LocalizationTesterUITests.m +++ b/LocalizationTesterUITests/LocalizationTesterUITests.m @@ -111,6 +111,16 @@ - (void)testVisitAll { [[errorAlert.buttons elementBoundByIndex:0] tap]; // dismiss alert [app.navigationBars.buttons[@"CoreViewControllerCancelIdentifier"] tap]; +#pragma mark - Visit the Shipping Address VC Country Outside Available Countries + [tablesQuery.staticTexts[@"Shipping Address VC Country Outside Available"] tap]; + [self _waitForElementToAppear:app.navigationBars.buttons[@"ShippingViewControllerNextButtonIdentifier"]]; + + // Fill out the shipping Info + [tablesQuery.buttons[@"ShippingAddressViewControllerUseBillingButton"] tap]; + [self _takeScreenShotNamed:@"Shipping Address VC Country Outside Available"]; + + [app.navigationBars.buttons[@"CoreViewControllerCancelIdentifier"] tap]; + #pragma mark - Visit the Shipping Info VC for Delivery [tablesQuery.staticTexts[@"Shipping Address VC for Delivery"] tap]; [self _waitForElementToAppear:app.navigationBars.buttons[@"ShippingViewControllerNextButtonIdentifier"]]; diff --git a/Stripe/PublicHeaders/STPPaymentConfiguration.h b/Stripe/PublicHeaders/STPPaymentConfiguration.h index c44256b7719..cb4a8498705 100644 --- a/Stripe/PublicHeaders/STPPaymentConfiguration.h +++ b/Stripe/PublicHeaders/STPPaymentConfiguration.h @@ -81,10 +81,10 @@ NS_ASSUME_NONNULL_BEGIN The set of countries supported when entering an address. This property accepts a set of ISO 2-character country codes. - The default value is nil, which will display all known countries. Setting this - property will limit the available countries to your selected set. + The default value is all known countries. Setting this property will limit + the available countries to your selected set. */ -@property (nonatomic, copy, nullable, readwrite) NSSet *availableCountries; +@property (nonatomic, copy, null_resettable, readwrite) NSSet *availableCountries; /** The name of your company, for displaying to the user during payment flows. For diff --git a/Stripe/STPAddCardViewController.m b/Stripe/STPAddCardViewController.m index 424867c4950..a700b862b84 100644 --- a/Stripe/STPAddCardViewController.m +++ b/Stripe/STPAddCardViewController.m @@ -93,7 +93,7 @@ - (void)commonInitWithConfiguration:(STPPaymentConfiguration *)configuration { _shippingAddress = nil; _hasUsedShippingAddress = NO; _apiClient = [[STPAPIClient alloc] initWithConfiguration:configuration]; - _addressViewModel = [[STPAddressViewModel alloc] initWithRequiredBillingFields:configuration.requiredBillingAddressFields availableCountries:configuration.availableCountries]; + _addressViewModel = [[STPAddressViewModel alloc] initWithRequiredBillingFields:configuration.requiredBillingAddressFields availableCountries:configuration._availableCountries]; _addressViewModel.delegate = self; self.title = STPLocalizedString(@"Add a Card", @"Title for Add a Card view"); diff --git a/Stripe/STPAddressViewModel.h b/Stripe/STPAddressViewModel.h index d2e7909818c..7799d8c4eb9 100644 --- a/Stripe/STPAddressViewModel.h +++ b/Stripe/STPAddressViewModel.h @@ -30,6 +30,8 @@ - (instancetype)initWithRequiredBillingFields:(STPBillingAddressFields)requiredBillingAddressFields; - (instancetype)initWithRequiredShippingFields:(NSSet *)requiredShippingAddressFields; + +/* The default value of availableCountries is nil, which will allow all known countries. */ - (instancetype)initWithRequiredBillingFields:(STPBillingAddressFields)requiredBillingAddressFields availableCountries:(NSSet *)availableCountries; - (instancetype)initWithRequiredShippingFields:(NSSet *)requiredShippingAddressFields availableCountries:(NSSet *)availableCountries; - (STPAddressFieldTableViewCell *)cellAtIndex:(NSInteger)index; diff --git a/Stripe/STPPaymentConfiguration+Private.h b/Stripe/STPPaymentConfiguration+Private.h index ddeb7e1fd1a..d2c50a86bee 100644 --- a/Stripe/STPPaymentConfiguration+Private.h +++ b/Stripe/STPPaymentConfiguration+Private.h @@ -11,6 +11,7 @@ @interface STPPaymentConfiguration () @property (nonatomic, assign, readonly) BOOL applePayEnabled; +@property (nonatomic, assign, readonly) NSSet *_availableCountries; @end diff --git a/Stripe/STPPaymentConfiguration.m b/Stripe/STPPaymentConfiguration.m index d930afb5287..2ea0544e91a 100644 --- a/Stripe/STPPaymentConfiguration.m +++ b/Stripe/STPPaymentConfiguration.m @@ -56,6 +56,18 @@ - (BOOL)applePayEnabled { [Stripe deviceSupportsApplePay]; } +- (NSSet *)availableCountries { + if (_availableCountries == nil) { + return [NSSet setWithArray:[NSLocale ISOCountryCodes]]; + } else { + return _availableCountries; + } +} + +- (NSSet *)_availableCountries { + return _availableCountries; +} + #pragma mark - Description - (NSString *)description { @@ -144,7 +156,7 @@ - (id)copyWithZone:(__unused NSZone *)zone { copy.companyName = self.companyName; copy.appleMerchantIdentifier = self.appleMerchantIdentifier; copy.canDeletePaymentOptions = self.canDeletePaymentOptions; - copy.availableCountries = self.availableCountries; + copy.availableCountries = _availableCountries; return copy; } diff --git a/Stripe/STPShippingAddressViewController.m b/Stripe/STPShippingAddressViewController.m index 1e7a9a6cb59..f3289b28e07 100644 --- a/Stripe/STPShippingAddressViewController.m +++ b/Stripe/STPShippingAddressViewController.m @@ -16,6 +16,7 @@ #import "STPImageLibrary+Private.h" #import "STPLocalizationUtils.h" #import "STPPaymentActivityIndicatorView.h" +#import "STPPaymentConfiguration+Private.h" #import "STPPaymentContext+Private.h" #import "STPSectionHeaderView.h" #import "STPShippingMethodsViewController.h" @@ -87,7 +88,7 @@ - (instancetype)initWithConfiguration:(STPPaymentConfiguration *)configuration _selectedShippingMethod = selectedShippingMethod; _billingAddress = prefilledInformation.billingAddress; _hasUsedBillingAddress = NO; - _addressViewModel = [[STPAddressViewModel alloc] initWithRequiredShippingFields:configuration.requiredShippingAddressFields availableCountries:configuration.availableCountries]; + _addressViewModel = [[STPAddressViewModel alloc] initWithRequiredShippingFields:configuration.requiredShippingAddressFields availableCountries:configuration._availableCountries]; _addressViewModel.delegate = self; if (shippingAddress != nil) { _addressViewModel.address = shippingAddress;