in support-frontend/app/utils/CheckoutValidationRules.scala [124:198]
def otherwise(message: String): Result =
if (isSuccess) Valid else Invalid(message)
}
}
object SimpleCheckoutFormValidation {
def passes(createSupportWorkersRequest: CreateSupportWorkersRequest): Result =
noEmptyNameFields(createSupportWorkersRequest.firstName, createSupportWorkersRequest.lastName) and
noExcessivelyLongNameFields(createSupportWorkersRequest.firstName, createSupportWorkersRequest.lastName) and
noFieldsHaveUnsupportedCharacters(createSupportWorkersRequest)
private def noEmptyNameFields(firstName: String, lastName: String): Result =
firstName.nonEmpty.otherwise("first name was empty") and
lastName.nonEmpty.otherwise("last name was empty")
private def noExcessivelyLongNameFields(firstName: String, lastName: String): Result =
(firstName.length <= 40).otherwise("first name was longer than 40 chars") and
(lastName.length <= 80).otherwise("last name was longer than 80 chars")
def noFieldsHaveUnsupportedCharacters(request: CreateSupportWorkersRequest): Result =
noFourByteUtf8Characters("firstName", request.firstName) and
noFourByteUtf8Characters("lastName", request.lastName) and
request.billingAddress.lineOne.map(noFourByteUtf8Characters("billingAddress.lineOne", _)).getOrElse(Valid) and
request.billingAddress.lineTwo.map(noFourByteUtf8Characters("billingAddress.lineTwo", _)).getOrElse(Valid) and
request.billingAddress.city.map(noFourByteUtf8Characters("billingAddress.city", _)).getOrElse(Valid) and
request.billingAddress.state.map(noFourByteUtf8Characters("billingAddress.state", _)).getOrElse(Valid) and
request.billingAddress.postCode.map(noFourByteUtf8Characters("billingAddress.postCode", _)).getOrElse(Valid) and
request.deliveryAddress
.flatMap(_.lineOne)
.map(noFourByteUtf8Characters("deliveryAddress.lineOne", _))
.getOrElse(Valid) and
request.deliveryAddress
.flatMap(_.lineTwo)
.map(noFourByteUtf8Characters("deliveryAddress.lineTwo", _))
.getOrElse(Valid) and
request.deliveryAddress
.flatMap(_.city)
.map(noFourByteUtf8Characters("deliveryAddress.city", _))
.getOrElse(Valid) and
request.deliveryAddress
.flatMap(_.state)
.map(noFourByteUtf8Characters("deliveryAddress.state", _))
.getOrElse(Valid) and
request.deliveryAddress
.flatMap(_.postCode)
.map(noFourByteUtf8Characters("deliveryAddress.postCode", _))
.getOrElse(Valid) and
request.giftRecipient
.map(_.firstName)
.map(noFourByteUtf8Characters("giftRecipient.firstName", _))
.getOrElse(Valid) and
request.giftRecipient
.map(_.lastName)
.map(noFourByteUtf8Characters("giftRecipient.lastName", _))
.getOrElse(Valid) and
request.giftRecipient
.flatMap(_.email)
.map(noFourByteUtf8Characters("giftRecipient.email", _))
.getOrElse(Valid) and
request.giftRecipient
.flatMap(_.message)
.map(noFourByteUtf8Characters("giftRecipient.message", _))
.getOrElse(Valid) and
noFourByteUtf8Characters("email", request.email) and
request.telephoneNumber.map(noFourByteUtf8Characters("telephoneNumber", _)).getOrElse(Valid) and
request.deliveryInstructions.map(noFourByteUtf8Characters("deliveryInstructions", _)).getOrElse(Valid)
/** Fail validation for characters that Zuora doesn’t support.
*
* Zuora’s subscribe endpoint breaks when it receives characters that require more than 3 bytes to represent in UTF-8
* (which is the required encoding for JSON). Those characters are those above U+FFFF.
*/
def noFourByteUtf8Characters(name: String, string: String): Result = {