[jboss-user] [JBoss Seam] - Seam 1.2.1.GA Integration Testing (identity.login)
mhaubrich
do-not-reply at jboss.com
Tue May 8 13:55:43 EDT 2007
Hi,
I have a question about the integration testing of the login process with the 1.2.1 seam version and I hope someone can help me here as I've been trying around for quite some time now on my own to no result...
Ok... I have the following JSF view: (extract)
<h:form rendered="#{not identity.loggedIn}">
| #{messages['login.form']}
| <br />
|
| <span class="errors">
| <h:messages globalOnly="true" />
| </span>
|
| <table cellspacing="2" cellpadding="2" border="0" >
| <tr>
| <td>#{messages['login.login']}:</td><td><h:inputText value="#{identity.username}" id="login" /></td>
| </tr>
| <tr>
| <td>#{messages['login.pwd']}:</td><td><h:inputSecret value="#{identity.password}" id="password" /></td>
| </tr>
| <tr>
| <td colspan="2" align="right"><h:commandButton value="#{messages['login.button']}" action="#{identity.login}" /></td>
| </tr>
| </table>
| </h:form>
In components.xml I have defined my authentication method as follows:
<security:identity authenticate-method="#{authenticator.authenticate}"/>
|
My Authenticator interface and AuthenticatorAction class look like so:
import org.jboss.annotation.ejb.Local;
|
| @Local
| public interface Authenticator {
|
| public boolean authenticate();
|
| }
| import java.io.Serializable;
|
| import org.jboss.seam.annotations.In;
| import org.jboss.seam.annotations.JndiName;
| import org.jboss.seam.annotations.Logger;
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.contexts.Context;
| import org.jboss.seam.log.Log;
| import org.jboss.seam.security.Identity;
|
| @Name("authenticator")
| public class AuthenticatorAction implements Authenticator, Serializable
| {
| private static final long serialVersionUID = 4836686434984261542L;
|
| private static final String USER_VAR = "currentUser";
|
| @In
| private Context sessionContext;
|
| @Logger
| private Log log;
|
|
| /**
| * validate the username and password
| */
| public boolean authenticate()
| {
|
| User user = ServiceLocator.instance() // find user in database
| .getLoginService()
| .authenticate(Identity.instance().getUsername(), Identity.instance().getPassword());
| if(user==null)
| {
| log.debug("invalid login!");
| return false;
| }
|
| Identity.instance().addRole("user");
|
| if(user.isAdmin()) // add admin role if the user is an admin
| Identity.instance().addRole("admin");
|
| sessionContext.set(USER_VAR, user); // save in session context
|
| log.debug("login successful: #0", user);
|
| return true;
| }
|
|
| }
And finally my test class:
| import static org.testng.AssertJUnit.*;
|
| import org.jboss.seam.log.Log;
| import org.jboss.seam.log.Logging;
| import org.jboss.seam.mock.SeamTest;
| import org.testng.annotations.Configuration;
| import org.testng.annotations.Test;
|
| public class AuthenticatorActionTest extends SeamTest {
|
|
| @Test
| public void testAuthenticate() throws Exception
| {
|
| new FacesRequest()
| {
|
| @Override
| protected void updateModelValues() throws Exception
| {
| assertFalse("session should be valid", isSessionInvalid()); // assert that the session is NOT invalid
|
| setValue("#{identity.username}", "test"); // inject the login values
| setValue("#{identity.password}", "test");
|
| }
|
| @Override
| protected void invokeApplication()
| {
| invokeMethod("#{identity.login}");
| }
|
| @Override
| protected void renderResponse()
| {
|
| assertTrue("identity.loggedIn", getValue("#{identity.loggedIn}").equals(true)); // make sure that we are logged in
| assertEquals("view id", "/home.xhtml", getViewId() ); // assert that the home-page is being shown
| }
|
| }.run();
|
|
| }
| }
Now when I run the Test it fails at the assertTrue("identity.loggedIn", getValue("#{identity.loggedIn}").equals(true)); part !
Am I missing something here ?!
Thanks for you help !
Maarten
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4044007#4044007
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4044007
More information about the jboss-user
mailing list