Estoy en proceso de actualizar mi aplicación Grails 1.3.7 a 2.0.3 y he solucionado la mayoría de los problemas. Sin embargo, tengo un código que solía funcionar que crea un usuario y los guarda en la base de datos. El código NO debe pasar la validación ya que estoy reutilizando un nombre de usuario que ya se tomó y existe una restricción única en el nombre de usuario. .validate()
devuelve verdadero, pero luego el código realmente se activa cuando se llama a user.save()
con un error de restricción único MySql.La validación de Grails no funciona después de la actualización
debe lanzar un error:
def submitSignup = {
def user = new User(params)
user.validate()
if (!user.hasErrors()) {
...
// This line bombs with the MySql unique constraint I would have expected .validate() to get
user.save()
}
}
En User.groovy:
static constraints = {
username(blank: false, unique: true);
...
}
¿Alguna idea?
EDITAR: También estoy actualizando al complemento Spring Security de Acegi. No creo que esto sea relevante, pero pensé que lo mencionaría.
Puse una muestra que sufre el problema en: https://github.com/skazzaks/Grails-Unique-Test Esto hace que definitivamente parezca un error.
¿Esto le está fallando en una prueba o cómo se encontró con este problema? Configuré una prueba de unidad simple y la restricción única funciona correctamente para mí. –
@JarredOlson Esto está fallando cuando ejecuté la aplicación e intenté enviar un nuevo Usuario (que ya tiene el nombre de usuario). Esto funciona correctamente en la versión 1.3.7 que tengo en producción. No estoy seguro de cómo explicar la disparidad. – skaz
Estaba experimentando un problema de validación algo relacionado después de haber agregado la restricción única a una aplicación de Grails mientras se estaba ejecutando. validate() no se quejó de valores que no son únicos. Ayudó a limpiar, eliminar manualmente el directorio de destino y compilar. – HumanInDisguise