         // ...and we should mark a 15 digit number as incomplete
         XCTAssertEqual(
             configuration.simulateValidationState(unionPay19_but_16_digits_entered.stp_safeSubstring(to: 15)),
-            .invalid(TextFieldElement.PANConfiguration.Error.incomplete)
+            .invalid(error: TextFieldElement.PANConfiguration.Error.incomplete, shouldDisplay: true)
         )
         
         // ...and load the BIN range.

    func testCVCValidation() {
        let emptyError = TextFieldElement.Error.empty
        let incompleteError = TextFieldElement.Error.incomplete(localizedDescription: .Localized.your_cards_security_code_is_incomplete)
        let testcases: [(String, STPCardBrand, TextFieldElement.ValidationState)] = [
            // VISA CVC are 3 digits
            ("", .visa, .invalid(emptyError)),
            ("1", .visa, .invalid(incompleteError)),
            ("12", .visa, .invalid(incompleteError)),
            ("123", .visa, .valid),
            
            // Unknown card brand allows 3 or 4 digits
            ("", .unknown, .invalid(emptyError)),
            ("1", .unknown, .invalid(incompleteError)),
            ("12", .unknown, .invalid(incompleteError)),
            ("123", .unknown, .valid),
            ("1234", .unknown, .valid),
            
            // Amex CVV allow 3 or 4 digits
            ("", .amex, .invalid(emptyError)),
            ("1", .amex, .invalid(incompleteError)),
            ("12", .amex, .invalid(incompleteError)),
            ("123", .amex, .valid),
            ("1234", .amex, .valid),
        ]

        let oneMonthFromNow = Calendar.current.date(byAdding: .month, value: 1, to: firstDayOfThisMonth!)
        let oneYearFromNow = Calendar.current.date(byAdding: .year, value: 1, to: firstDayOfThisMonth!)
        
        let testcases: [String: ElementValidationState] = [
            // Test empty -> incomplete -> complete
            "": .invalid(error: TextFieldElement.Error.empty, shouldDisplay: false),
            "0": .invalid(error: Error.incomplete, shouldDisplay: true),
            "1": .invalid(error: Error.incomplete, shouldDisplay: true),
            "12": .invalid(error: Error.incomplete, shouldDisplay: true),
            "12/2": .invalid(error: Error.incomplete, shouldDisplay: true),
            "12/49": .valid,
            dateFormatter.string(from: oneYearFromNow!): .valid,
            dateFormatter.string(from: oneMonthFromNow!): .valid,
            
            // Test invalid months
            "00": .invalid(error: Error.invalidMonth, shouldDisplay: true),
            "00/9": .invalid(error: Error.invalidMonth, shouldDisplay: true),
            "00/99": .invalid(error: Error.invalidMonth, shouldDisplay: true),
            "13": .invalid(error: Error.invalidMonth, shouldDisplay: true),

            // Test expired dates
            "12/21": .invalid(error: Error.invalid, shouldDisplay: true),
            "01/22": .invalid(error: Error.invalid, shouldDisplay: true),
            dateFormatter.string(from: oneMonthAgo!): .invalid(error: Error.invalid, shouldDisplay: true),
        ]
        let configuration = TextFieldElement.ExpiryDateConfiguration()
        for (text, expected) in testcases {
