// // Copyright 2019 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only // import XCTest @testable import Signal @testable import SignalServiceKit class PhoneNumberValidatorTest: XCTestCase { private var phoneNumberUtilRef: PhoneNumberUtil! override func setUp() { super.setUp() phoneNumberUtilRef = PhoneNumberUtil() } func assertValid(e164: String, file: StaticString = #filePath, line: UInt = #line) { let validator = PhoneNumberValidator() guard let phoneNumber = E164(phoneNumberUtilRef.parseE164(e164)?.e164) else { XCTFail("unparsable phone number", file: file, line: line) return } let isValid = validator.isValidForRegistration(phoneNumber: phoneNumber) XCTAssertTrue(isValid, file: file, line: line) } func assertInvalid(e164: String, file: StaticString = #filePath, line: UInt = #line) { let validator = PhoneNumberValidator() guard let phoneNumber = E164(phoneNumberUtilRef.parsePhoneNumber(userSpecifiedText: e164)?.e164) else { // number wasn't even parsable return } let isValid = validator.isValidForRegistration(phoneNumber: phoneNumber) XCTAssertFalse(isValid, file: file, line: line) } func testUnitedStates() { // valid us number assertValid(e164: "+13235551234") // too short assertInvalid(e164: "+1323555123") // too long assertInvalid(e164: "+132355512345") // not a US phone number assertValid(e164: "+3235551234") } func testBrazil() { // valid mobile assertValid(e164: "+5532912345678") // valid landline assertValid(e164: "+553212345678") // mobile length, but with out the leading '9' assertInvalid(e164: "+5532812345678") // too short assertInvalid(e164: "+5532812345678") // too long landline assertInvalid(e164: "+5532123456789") assertInvalid(e164: "+55321234567890") // too long mobile assertInvalid(e164: "+55329123456789") assertInvalid(e164: "+553291234567890") } }