Skip to content

Instantly share code, notes, and snippets.

@benek
Last active December 16, 2015 17:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save benek/5469373 to your computer and use it in GitHub Desktop.
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
import spock.lang.Specification
import org.springframework.validation.FieldError
/**
* @author Javier Ramirez
* <benek@javamexico.org>
* 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 ? 'asdfg@gmail.com' : '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