Last active
December 16, 2015 17:19
-
-
Save benek/5469373 to your computer and use it in GitHub Desktop.
Clase con métodos utilitarios para tests y validación de constraints parametrizada. Basada en http://bit.ly/LFjAqZ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import spock.lang.Specification | |
import org.springframework.validation.FieldError | |
/** | |
* @author Javier Ramirez | |
* <[email protected]> | |
* Date: 30/06/12 | |
* Time: 17:29 | |
* www.javamexico.org | |
* | |
* Clase para validación de constraints, con metodos utilitarios para testing . Para utilizarla, | |
* extender de ConstraintUnitSpec en vez de Specification en cada especificacion Spock. Basada en http://bit.ly/LFjAqZ | |
* | |
*/ | |
abstract class ConstraintUnitSpec extends Specification { | |
/** | |
* Este closure se puede utilizar en los tests para inyectar un metodo toStringTest() a las clases | |
* de dominio via metaprogramacion, con el fin de que al final del test se haga un println() sobre | |
* algun objeto de la clase de dominio y se invoque toStringTest() para que imprima todas las | |
* propiedades de la clase de dominio y sus valores. | |
* | |
* Modo de uso. | |
* Inyectar metodo a una clase: DomainClass.metaClass.toStringTest = toStringTest | |
* Imprimir propiedades y sus valores: println domainClass.toStringTest | |
* | |
* Ejemplo con BitacoraAcceso: | |
* BitacoraAcceso.metaClass.toStringTest = toStringTest | |
* println BitacoraAcceso.findById(1).toStringTest() | |
*/ | |
def toStringTest = { -> | |
def s = new StringBuilder() | |
delegate.properties.each { | |
s.append("$it.key: $it.value\n") | |
} | |
s.toString() | |
} | |
/** | |
* Este metodo devuelve una cadena de texto de la longitud indicada como parametro. | |
*/ | |
String getSizedString(Integer length){ | |
def longString = '' | |
length.times { longString += 'a' } | |
longString | |
} | |
/** | |
* Devuelve una cadena de texto con un correo electronico bien o mal conformado, | |
* segun el valor true o false recibido. | |
*/ | |
String getEmail(boolean valid){ | |
valid ? '[email protected]' : 'asdfg@hotmail' | |
} | |
/** | |
* Devuelve una cadena de texto con una direccion URL bien o mal conformada, | |
* segun el valor true o false recibido. | |
*/ | |
String getURL(boolean valid){ | |
valid ? 'http://www.javamexico.org/' : 'http:/ww.haloguorl.com' | |
} | |
/** | |
* Metodo para validar constraints, en conjunto con las parametrizaciones Spock en el bloque 'where:' | |
* de una clase de dominio. Ver ejemplo en: //TODO Anexar ejemplo | |
*/ | |
void validateConstraints(obj, field, error){ | |
def validado = obj.validate() | |
switch (error){ | |
case 'valid': | |
assert !obj.errors.getFieldError(field) | |
println 'El valor ' + obj."$field" + " es correcto para la propiedad: $field" | |
break | |
case String: | |
assert !validado | |
FieldError fieldError = obj.errors.getFieldError(field) | |
assert fieldError.field == field | |
println "Constraint validado: $error, propiedad: $field, valor rechazado: $fieldError.rejectedValue" | |
break | |
} | |
true | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment