113 lines
4.2 KiB
Swift
113 lines
4.2 KiB
Swift
//
|
|
// STPPaymentCardTextFieldViewModelTest.swift
|
|
// StripeiOS Tests
|
|
//
|
|
// Created by Jack Flintermann on 7/16/15.
|
|
// Copyright (c) 2015 Stripe, Inc. All rights reserved.
|
|
//
|
|
|
|
import XCTest
|
|
|
|
@testable@_spi(STP) import Stripe
|
|
@testable@_spi(STP) import StripeCore
|
|
@testable@_spi(STP) import StripePayments
|
|
@testable@_spi(STP) import StripePaymentSheet
|
|
@testable@_spi(STP) import StripePaymentsUI
|
|
|
|
class STPPaymentCardTextFieldViewModelTest: XCTestCase {
|
|
var viewModel: STPPaymentCardTextFieldViewModel?
|
|
|
|
override func setUp() {
|
|
super.setUp()
|
|
viewModel = STPPaymentCardTextFieldViewModel()
|
|
}
|
|
|
|
func testCardNumber() {
|
|
let tests = [
|
|
["", ""],
|
|
["4242", "4242"],
|
|
["4242424242424242", "4242424242424242"],
|
|
["4242 4242 4242 4242", "4242424242424242"],
|
|
["4242xxx4242", "42424242"],
|
|
["12345678901234567890", "1234567890123456789"],
|
|
]
|
|
for test in tests {
|
|
viewModel?.cardNumber = test[0]
|
|
XCTAssertEqual(viewModel?.cardNumber, test[1])
|
|
}
|
|
}
|
|
|
|
func testRawExpiration() {
|
|
// swiftlint:disable:next large_tuple
|
|
let tests: [(String, String, String, String, STPCardValidationState)] = [
|
|
("", "", "", "", .incomplete),
|
|
("12/23", "12/23", "12", "23", .valid),
|
|
("1223", "12/23", "12", "23", .valid),
|
|
("1", "1", "1", "", .incomplete),
|
|
("2", "02/", "02", "", .incomplete),
|
|
("12", "12/", "12", "", .incomplete),
|
|
("12/2", "12/2", "12", "2", .incomplete),
|
|
("99/23", "99", "99", "23", .invalid),
|
|
("10/12", "10/12", "10", "12", .invalid),
|
|
("12*23", "12/23", "12", "23", .valid),
|
|
("12/*", "12/", "12", "", .incomplete),
|
|
("*", "", "", "", .incomplete),
|
|
]
|
|
for test in tests {
|
|
viewModel?.rawExpiration = test.0
|
|
XCTAssertEqual(viewModel?.rawExpiration, test.1)
|
|
XCTAssertEqual(viewModel?.expirationMonth, test.2)
|
|
XCTAssertEqual(viewModel?.expirationYear, test.3)
|
|
XCTAssertEqual(viewModel?.validationStateForExpiration(), test.4)
|
|
}
|
|
}
|
|
|
|
func testCVC() {
|
|
let tests = [["1", "1"], ["1234", "1234"], ["12345", "1234"], ["1x", "1"]]
|
|
for test in tests {
|
|
viewModel?.cvc = test[0]
|
|
XCTAssertEqual(viewModel?.cvc, test[1])
|
|
}
|
|
}
|
|
|
|
func testValidity() {
|
|
viewModel?.cardNumber = "4242424242424242"
|
|
viewModel?.rawExpiration = "12/24"
|
|
viewModel?.cvc = "123"
|
|
XCTAssertTrue(viewModel!.isValid)
|
|
|
|
viewModel?.cvc = "12"
|
|
XCTAssertFalse(viewModel!.isValid)
|
|
}
|
|
|
|
func testCompressedCardNumber() {
|
|
viewModel?.cardNumber = nil
|
|
// Should use default placeholder
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "4242")
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: "1234567812345678"), "5678")
|
|
|
|
viewModel?.cardNumber = "424212345678"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "5678")
|
|
viewModel?.cardNumber = "42421234567"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "567")
|
|
viewModel?.cardNumber = "4242123456"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "56")
|
|
viewModel?.cardNumber = "424212345"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "5")
|
|
viewModel?.cardNumber = "42421234"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "1234")
|
|
|
|
viewModel?.cardNumber = "12"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "12")
|
|
|
|
viewModel?.cardNumber = "36227206271667"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "1667")
|
|
viewModel?.cardNumber = "3622720627166"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "166")
|
|
viewModel?.cardNumber = "36227206271"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "1")
|
|
viewModel?.cardNumber = "3622720627"
|
|
XCTAssertEqual(viewModel?.compressedCardNumber(withPlaceholder: nil), "720627")
|
|
}
|
|
}
|