From acf67020d5fcecc4f208a4ffcf3c90d2f20aa754 Mon Sep 17 00:00:00 2001 From: David Estes Date: Thu, 20 Oct 2022 13:11:59 -0700 Subject: [PATCH] Add csabol's tests --- .../STPPaymentMethodBillingDetails.swift | 12 + Tests/Tests/STPPaymentCardTextFieldTest.m | 329 ++++++++++++++++++ 2 files changed, 341 insertions(+) diff --git a/StripePayments/StripePayments/API Bindings/Models/PaymentMethods/STPPaymentMethodBillingDetails.swift b/StripePayments/StripePayments/API Bindings/Models/PaymentMethods/STPPaymentMethodBillingDetails.swift index 236662b456..1133fcf8c6 100644 --- a/StripePayments/StripePayments/API Bindings/Models/PaymentMethods/STPPaymentMethodBillingDetails.swift +++ b/StripePayments/StripePayments/API Bindings/Models/PaymentMethods/STPPaymentMethodBillingDetails.swift @@ -119,3 +119,15 @@ public class STPPaymentMethodBillingDetails: NSObject, STPAPIResponseDecodable, return billingDetails } } + +/// :nodoc: +extension STPPaymentMethodBillingDetails { + /// Convenience initializer for creating an `STPPaymentMethodBillingDetails` instance with a postal and country code + @objc convenience init(postalCode: String, countryCode: String? = Locale.autoupdatingCurrent.regionCode) { + self.init() + let address = STPPaymentMethodAddress() + address.postalCode = postalCode + address.country = countryCode + self.address = address + } +} diff --git a/Tests/Tests/STPPaymentCardTextFieldTest.m b/Tests/Tests/STPPaymentCardTextFieldTest.m index cd3d4496dc..48e5167cc1 100644 --- a/Tests/Tests/STPPaymentCardTextFieldTest.m +++ b/Tests/Tests/STPPaymentCardTextFieldTest.m @@ -553,6 +553,335 @@ XCTAssertNotEqualObjects(@"number 2", sut.paymentMethodParams.card.number, @"caller changed their copy after setCardParams:"); } + +// MARK: - paymentMethodParams + +- (void)testSetCard_numberUnknown_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"1"; + card.number = number; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField errorImageForCardBrand:STPCardBrandUnknown]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqual(sut.expirationField.text.length, (NSUInteger)0); + XCTAssertEqual(sut.cvcField.text.length, (NSUInteger)0); + XCTAssertNil(sut.currentFirstResponderField); +} + +- (void)testSetCard_expiration_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + card.expMonth = @(10); + card.expYear = @(99); + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandUnknown]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqual(sut.numberField.text.length, (NSUInteger)0); + XCTAssertEqualObjects(sut.expirationField.text, @"10/99"); + XCTAssertEqual(sut.cvcField.text.length, (NSUInteger)0); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + +- (void)testSetCard_CVC_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *cvc = @"123"; + card.cvc = cvc; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandUnknown]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqual(sut.numberField.text.length, (NSUInteger)0); + XCTAssertEqual(sut.expirationField.text.length, (NSUInteger)0); + XCTAssertEqualObjects(sut.cvcField.text, cvc); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + +- (void)testSetCard_numberVisa_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"424242"; + card.number = number; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandVisa]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqual(sut.expirationField.text.length, (NSUInteger)0); + XCTAssertEqual(sut.cvcField.text.length, (NSUInteger)0); + XCTAssertEqualObjects(sut.cvcField.placeholder, @"CVC"); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + +- (void)testSetCard_numberVisaInvalid_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"4242111111111111"; + card.number = number; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField errorImageForCardBrand:STPCardBrandVisa]); + + XCTAssertTrue([expectedImgData isEqualToData:imgData]); +} + +- (void)testSetCard_numberAmex_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"378282"; + card.number = number; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandAmex]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqual(sut.cvcField.text.length, (NSUInteger)0); + XCTAssertEqualObjects(sut.cvcField.placeholder, @"CVV"); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + +- (void)testSetCard_numberAmexInvalid_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"378282246311111"; + card.number = number; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField errorImageForCardBrand:STPCardBrandAmex]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); +} + +- (void)testSetCard_numberAndExpiration_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"4242424242424242"; + card.number = number; + card.expMonth = @(10); + card.expYear = @(99); + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandVisa]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqualObjects(sut.expirationField.text, @"10/99"); + XCTAssertEqual(sut.cvcField.text.length, (NSUInteger)0); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + +- (void)testSetCard_partialNumberAndExpiration_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"424242"; + card.number = number; + card.expMonth = @(10); + card.expYear = @(99); + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandVisa]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqualObjects(sut.expirationField.text, @"10/99"); + XCTAssertEqual(sut.cvcField.text.length, (NSUInteger)0); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + +- (void)testSetCard_numberAndCVC_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"378282246310005"; + NSString *cvc = @"123"; + card.number = number; + card.cvc = cvc; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandAmex]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqual(sut.expirationField.text.length, (NSUInteger)0); + XCTAssertEqualObjects(sut.cvcField.text, cvc); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + +- (void)testSetCard_expirationAndCVC_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *cvc = @"123"; + card.expMonth = @(10); + card.expYear = @(99); + card.cvc = cvc; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandUnknown]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqual(sut.numberField.text.length, (NSUInteger)0); + XCTAssertEqualObjects(sut.expirationField.text, @"10/99"); + XCTAssertEqualObjects(sut.cvcField.text, cvc); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + +- (void)testSetCard_completeCardCountryWithoutPostal_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + sut.countryCode = @"BZ"; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"4242424242424242"; + NSString *cvc = @"123"; + card.number = number; + card.expMonth = @(10); + card.expYear = @(99); + card.cvc = cvc; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandVisa]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqualObjects(sut.expirationField.text, @"10/99"); + XCTAssertEqualObjects(sut.cvcField.text, cvc); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertTrue(sut.isValid); +} + +- (void)testSetCard_completeCardNoPostal_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + sut.postalCodeEntryEnabled = NO; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"4242424242424242"; + NSString *cvc = @"123"; + card.number = number; + card.expMonth = @(10); + card.expYear = @(99); + card.cvc = cvc; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandVisa]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqualObjects(sut.expirationField.text, @"10/99"); + XCTAssertEqualObjects(sut.cvcField.text, cvc); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertTrue(sut.isValid); +} + +- (void)testSetCard_completeCard_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + NSString *number = @"4242424242424242"; + NSString *cvc = @"123"; + card.number = number; + card.expMonth = @(10); + card.expYear = @(99); + card.cvc = cvc; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:[[STPPaymentMethodBillingDetails alloc] initWithPostalCode:@"90210" countryCode:@"US"] metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandVisa]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqualObjects(sut.numberField.text, number); + XCTAssertEqualObjects(sut.expirationField.text, @"10/99"); + XCTAssertEqualObjects(sut.cvcField.text, cvc); + XCTAssertNil(sut.currentFirstResponderField); + BOOL isvalid = sut.isValid; + XCTAssertTrue(isvalid); + + + STPPaymentMethodParams *paymentMethodParams = sut.paymentMethodParams; + XCTAssertNotNil(paymentMethodParams); + + STPPaymentMethodCardParams *sutCardParams = paymentMethodParams.card; + XCTAssertNotNil(sutCardParams); + + XCTAssertEqualObjects(sutCardParams.number, card.number); + XCTAssertEqualObjects(sutCardParams.expMonth, card.expMonth); + XCTAssertEqualObjects(sutCardParams.expYear, card.expYear); + XCTAssertEqualObjects(sutCardParams.cvc, card.cvc); + + STPPaymentMethodBillingDetails *sutBillingDetails = paymentMethodParams.billingDetails; + XCTAssertNotNil(sutBillingDetails); + + STPPaymentMethodAddress *sutAddress = sutBillingDetails.address; + XCTAssertNotNil(sutAddress); + + XCTAssertEqualObjects(sutAddress.postalCode, @"90210"); + XCTAssertEqualObjects(sutAddress.country, @"US"); +} + +- (void)testSetCard_empty_pm { + STPPaymentCardTextField *sut = [STPPaymentCardTextField new]; + sut.numberField.text = @"4242424242424242"; + sut.cvcField.text = @"123"; + sut.expirationField.text = @"10/99"; + STPPaymentMethodCardParams *card = [STPPaymentMethodCardParams new]; + [sut setPaymentMethodParams:[[STPPaymentMethodParams alloc] initWithCard:card billingDetails:nil metadata:nil]]; + + NSData *imgData = UIImagePNGRepresentation(sut.brandImageView.image); + NSData *expectedImgData = UIImagePNGRepresentation([STPPaymentCardTextField brandImageForCardBrand:STPCardBrandUnknown]); + + XCTAssertNotNil(sut.focusedTextFieldForLayout); + XCTAssertTrue(sut.focusedTextFieldForLayout.integerValue == STPCardFieldTypeNumber); + XCTAssertTrue([expectedImgData isEqualToData:imgData]); + XCTAssertEqual(sut.numberField.text.length, (NSUInteger)0); + XCTAssertEqual(sut.expirationField.text.length, (NSUInteger)0); + XCTAssertEqual(sut.cvcField.text.length, (NSUInteger)0); + XCTAssertNil(sut.currentFirstResponderField); + XCTAssertFalse(sut.isValid); +} + @end @interface STPPaymentCardTextFieldUITests : XCTestCase