Pues no existe mucha documentación en cuanto a las pruebas de integración con el nuevo plugin de Burt Beckwith, así que aquí les voy a poner lo que necesitan, use una clase base para las pruebas de integración aunque, si lo desean, pueden poner ese código en cada prueba que necesite la seguridad
BaseTest.groovy
UsuarioServiceIntegrationTests.groovy
UsuarioService
BaseTest.groovy
package general
import groovy.util.GroovyTestCase
import org.springframework.security.core.GrantedAuthority
import org.springframework.security.core.authority.GrantedAuthorityImpl
import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser
import org.springframework.security.core.context.SecurityContextHolder as SCH
import org.springframework.security.authentication.TestingAuthenticationToken
abstract class BaseTest extends GroovyTestCase {
def authenticateAdmin() {
def user = general.Usuario.get(1)
def authorities = [new GrantedAuthorityImpl('ROLE_ADMIN'),new GrantedAuthorityImpl('ROLE_USER')]
def credentials = 'test'
def principal = new GrailsUser(user.username,credentials,true,true,true,true,authorities,user.id)
authenticate(principal,credentials,authorities)
}
def authenticate(principal, credentials, authorities) {
def authentication = new TestingAuthenticationToken(principal, credentials, authorities as GrantedAuthority[])
authentication.authenticated = true
SCH.context.authentication = authentication
return authentication
}
}
UsuarioServiceIntegrationTests.groovy
package general
import groovy.util.GroovyTestCase;
import org.junit.Before
import org.junit.Test
class UsuarioServiceIntegrationTests extends BaseTest {
def springSecurityService
def usuarioId
def usuarioService
@Before
public void setUp() {
def usuario = new Usuario(
username:'test10'
,password:springSecurityService.encodePassword('test')
,enabled:true
,nombre:'Test1'
,apellido:'User'
,correo:'test1@test.com'
).save()
def rol = Rol.findByAuthority('ROLE_ADMIN')
UsuarioRol.create(usuario,rol,true)
usuarioId = usuario.id
assert usuarioId
}
@Test
void testLista() {
def lista = usuarioService.lista(null)
assert lista
assertTrue lista.size() >= 1
}
@Test
void testObtiene() {
def usuario = usuarioService.obtiene("$usuarioId")
assert usuario
assertEquals 'test10', usuario.username
}
@Test
void testNuevo() {
authenticateAdmin()
def usuario = new Usuario(
username:'test11'
,password:springSecurityService.encodePassword('test')
,enabled:true
,nombre:'Test1'
,apellido:'User'
,correo:'test1@test.com'
)
usuario = usuarioService.crea(usuario, [])
assert usuario
assert usuario.id
}
@Test
void testActualiza() {
authenticateAdmin()
def usuario = usuarioService.obtiene("$usuarioId")
assert usuario
assertEquals 'test10', usuario.username
usuario.username = 'PRUEBA'
usuario = usuarioService.actualiza(usuario, [])
assert usuario
assertEquals 'PRUEBA',usuario.username
}
@Test
void testElimina() {
authenticateAdmin()
def nombre = usuarioService.elimina("$usuarioId")
assert nombre
assertEquals 'test10',nombre
}
}
UsuarioService
package general
import java.util.List
import auditoria.general.XUsuario
class UsuarioService {
static transactional = true
def springSecurityService
List lista(def params) {
log.debug "Lista de usuarios"
return Usuario.list(params)
}
def listaConCantidad(def params) {
def usuarios = this.lista(params)
def cantidad = Usuario.count()
return [lista:usuarios, cantidad:cantidad]
}
Usuario obtiene(String id) {
return Usuario.get(id)
}
Usuario crea(Usuario usuario, List roles) {
usuario.save()
for(rol in roles) {
general.UsuarioRol.create(usuario, rol, false)
}
audita(usuario,Constantes.CREAR)
return usuario
}
Usuario actualiza(Usuario usuario, List roles) {
log.debug "Actualizando al usuario $usuario, $roles"
usuario.save()
general.UsuarioRol.removeAll(usuario)
for(rol in roles) {
general.UsuarioRol.create(usuario, rol, false)
}
audita(usuario,Constantes.ACTUALIZAR)
return usuario
}
String elimina(String id) {
def usuario = Usuario.get(id)
String nombre = usuario.username
UsuarioRol.removeAll(usuario)
usuario.delete()
audita(usuario,Constantes.ELIMINAR)
return nombre
}
void audita(Usuario usuario, String actividad) {
log.debug "[AUDITA] $actividad $usuario"
def creador = springSecurityService.authentication.name
//def xusuario = new XUsuario(usuario.properties)
def xusuario = new XUsuario(usuario.properties)
StringBuilder roles = new StringBuilder()
for(rol in usuario.authorities) {
roles.append(rol.authority)
roles.append("|")
}
xusuario.roles = roles.toString()
xusuario.usuarioId = usuario.id
xusuario.creador = creador
xusuario.actividad = actividad
xusuario.save()
}
}
Comentarios