Login user for Integration test when using Jsecurity plugin
Hello Friends,
I was using Jsecurity plugin in my project. There was an action in a controller which needed logged in user information and I was finding it difficult to write an integration test for the same. Then Brent Fisher shared the following code which worked nicely for both services and controllers:
import org.jsecurity.SecurityUtils
import com.aps.domain.security.JsecUser
import org.jsecurity.subject.Subject
class MyControllerTests extends GrailsUnitTestCase {
protected void setUp() {
super.setUp()
//following code sets admin as a logged in user
def subject = [isAuthenticated: true,
principal: "admin"
] as Subject
SecurityUtils.metaClass.static.getSubject = {-> return subject }
Subject.metaClass.getPrincipal = {-> return "admin" }
...
}
...
}
Using metaclass, We changed the implementation of getPrincipal() and getSubject() to work in our way. So looking at this, I could see the power of a metaclass, which can be used to change or add new method implementations to an API which is not even accessible to us.
Cheers!
~~Amit Jain~~
amit@intelligrape.com
IntelliGrape Softwares
http://www.tothenew.com
