[Suiviobsmer-commits] r513 - in trunk: . wao-business/src/main/java/fr/ifremer/wao/service wao-business/src/main/xmi wao-ui/src/main/java/fr/ifremer/wao/ui/components wao-ui/src/main/java/fr/ifremer/wao/ui/data wao-ui/src/main/java/fr/ifremer/wao/ui/pages wao-ui/src/main/java/fr/ifremer/wao/ui/services wao-ui/src/main/webapp wao-ui/src/main/webapp/css wao-ui/src/test/java/test/fr/ifremer/wao/ui wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages
Author: fdesbois Date: 2010-06-12 18:47:55 +0000 (Sat, 12 Jun 2010) New Revision: 513 Log: - Use Eugene 2.0.2 - Evo #2325 : Change connection managment for userRoles : user is connected then he choose a role if it's necessary using a simple window. Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/MinimalWindow.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AuthenticationUtil.java Modified: trunk/pom.xml trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java trunk/wao-ui/src/main/webapp/Connexion.tml trunk/wao-ui/src/main/webapp/css/main.css trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/AbstractApplicationTest.java trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ConnectionTest.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-06-12 15:20:45 UTC (rev 512) +++ trunk/pom.xml 2010-06-12 18:47:55 UTC (rev 513) @@ -244,7 +244,7 @@ <!--<topia.version>2.3.3</topia.version>--> <!--<eugene.version>2.0.1</eugene.version>--> <topia.version>2.4-SNAPSHOT</topia.version> - <eugene.version>2.0.2-SNAPSHOT</eugene.version> + <eugene.version>2.0.2</eugene.version> <tapestry.version>5.1.0.5</tapestry.version> </properties> Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java 2010-06-12 15:20:45 UTC (rev 512) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java 2010-06-12 18:47:55 UTC (rev 513) @@ -89,7 +89,7 @@ @Override public ConnectedUser executeConnect(TopiaContext transaction, - String login, String password, UserRole role) + String login, String password) throws TopiaException, WaoBusinessException { WaoUserDAO dao = WaoDAOHelper.getWaoUserDAO(transaction); @@ -99,34 +99,32 @@ WaoUser.LOGIN, login, WaoUser.PASSWORD, passwordEncoded); - ConnectedUser result = null; - - if (user != null && user.getActive()) { - // load company entity - user.getCompany(); - - if (user.hasUserRole(role)) { - // Instantiate the connected user - result = new ConnectedUserImpl(); - result.setUser(user); - result.setRole(role); - } else { - throw new WaoBusinessException(Type.ILLEGAL_CONNECTION, + if (user == null) { + throw new WaoBusinessException(Type.BAD_CONNECTION, this.getClass(), - "Rôle non autorisé, veuillez en choisir un autre."); - } - } else if (user != null && !user.getActive()) { + "Login ou mot de passe incorrect, veuillez réessayer."); + } + + if (!user.getActive()) { throw new WaoBusinessException(Type.ILLEGAL_CONNECTION, this.getClass(), "Vous n'avez plus les droits nécessaires pour" + " vous connecter. Veuillez contacter un" + " administrateur."); - } else { - throw new WaoBusinessException(Type.BAD_CONNECTION, - this.getClass(), - "Mot de passe incorrect, veuillez réessayer."); } + // load company entity + user.getCompany(); + + ConnectedUser result = new ConnectedUserImpl(); + result.setUser(user); + + List<UserRole> roles = user.getUserRoles(); + // Set unique role + if (roles.size() == 1) { + result.setRole(roles.get(0)); + } + return result; } @@ -447,34 +445,34 @@ } } - @Override - public boolean executeExistLogin(TopiaContext transaction, String login) - throws TopiaException { +// @Override +// public boolean executeExistLogin(TopiaContext transaction, String login) +// throws TopiaException { +// +// WaoUserDAO dao = WaoDAOHelper.getWaoUserDAO(transaction); +// +// boolean exist = dao.existByProperties(WaoUser.LOGIN, login); +// +// return exist; +// } +// +// @Override +// public List<UserRole> executeGetUserRolesByLogin(TopiaContext transaction, +// String login) +// throws TopiaException { +// +// WaoUserDAO dao = WaoDAOHelper.getWaoUserDAO(transaction); +// +// WaoUser user = dao.findByLogin(login); +// +// List<UserRole> results = new ArrayList<UserRole>(); +// if (user != null) { +// results = user.getUserRoles(); +// } +// +// return results; +// } - WaoUserDAO dao = WaoDAOHelper.getWaoUserDAO(transaction); - boolean exist = dao.existByProperties(WaoUser.LOGIN, login); - return exist; - } - - @Override - public List<UserRole> executeGetUserRolesByLogin(TopiaContext transaction, - String login) - throws TopiaException { - - WaoUserDAO dao = WaoDAOHelper.getWaoUserDAO(transaction); - - WaoUser user = dao.findByLogin(login); - - List<UserRole> results = new ArrayList<UserRole>(); - if (user != null) { - results = user.getUserRoles(); - } - - return results; - } - - - } Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/MinimalWindow.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/MinimalWindow.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/MinimalWindow.java 2010-06-12 18:47:55 UTC (rev 513) @@ -0,0 +1,112 @@ +package fr.ifremer.wao.ui.components; + +import org.apache.tapestry5.MarkupWriter; +import org.apache.tapestry5.RenderSupport; +import org.apache.tapestry5.annotations.AfterRender; +import org.apache.tapestry5.annotations.AfterRenderBody; +import org.apache.tapestry5.annotations.BeforeRenderBody; +import org.apache.tapestry5.annotations.Environmental; +import org.apache.tapestry5.annotations.Parameter; +import org.apache.tapestry5.json.JSONObject; +import org.chenillekit.tapestry.core.base.AbstractWindow; + +/** + * Created: 12 juin 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class MinimalWindow extends AbstractWindow { + + @Environmental + private RenderSupport renderSupport; + + @Parameter + private Integer top; + + @Parameter + private Integer bottom; + + @Parameter + private Integer right; + + @Parameter + private Integer left; + + private boolean hasBody = false; + + /** + * Tapestry render phase method. + * Called before component body is rendered. + * + * @param writer the markup writer + */ + @BeforeRenderBody + void beforeRenderBody(MarkupWriter writer) + { + hasBody = true; + writer.element("div", + "id", getClientId() + "Content", + "style", "display:none;"); + } + + /** + * Tapestry render phase method. + * Called after component body is rendered. + * return false to render body again. + * + * @param writer the markup writer + */ + @AfterRenderBody + void afterRenderBody(MarkupWriter writer) + { + writer.end(); + } + + + /** + * Tapestry render phase method. End a tag here. + * + * @param writer the markup writer + */ + @AfterRender + void afterRender(MarkupWriter writer) + { + JSONObject options = new JSONObject(); + + options.put("className", getClassName()); + options.put("width", getWidth()); + options.put("height", getHeight()); + options.put("id", getClientId()); + options.put("title", getTitle()); + options.put("draggable", false); + options.put("closable", false); + options.put("minimizable", false); + options.put("maximizable", false); + if (top != null) { + options.put("top", top); + } + if (bottom != null) { + options.put("bottom", bottom); + } + if (right != null) { + options.put("right", right); + } + if (left != null) { + options.put("left", left); + } + + // + // Let subclasses do more. + // + configure(options); + + renderSupport.addScript("%s = new Window(%s);", getClientId(), options); + + if (hasBody) + renderSupport.addScript("%s.setContent('%sContent');", getClientId(), getClientId()); + + if (isShow()) + renderSupport.addScript("%s.show%s(%s);", getClientId(), isCenter() ? "Center" : "", isModal()); + } +} Added: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AuthenticationUtil.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AuthenticationUtil.java (rev 0) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/data/AuthenticationUtil.java 2010-06-12 18:47:55 UTC (rev 513) @@ -0,0 +1,30 @@ +package fr.ifremer.wao.ui.data; + +import java.util.Arrays; + +/** + * Created: 12 juin 2010 + * + * @author fdesbois <fdesbois at codelutin.com> + * @version $Id$ + */ +public class AuthenticationUtil { + + public static String getRedirectPageName(Object[] activationContext) { + String redirectPage = null; + if (activationContext.length > 0) { + redirectPage = (String)activationContext[0]; + } + return redirectPage; + } + + public static Object[] getRedirectPageContext(Object[] activationContext) { + if (activationContext.length > 1) { + Object[] redirectPageContext = + Arrays.copyOfRange(activationContext, 1, + activationContext.length); + return redirectPageContext; + } + return null; + } +} Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java 2010-06-12 15:20:45 UTC (rev 512) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java 2010-06-12 18:47:55 UTC (rev 513) @@ -6,12 +6,14 @@ import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.UserRole; +import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceUser; import fr.ifremer.wao.ui.components.FeedBack; +import fr.ifremer.wao.ui.data.AuthenticationUtil; import fr.ifremer.wao.ui.services.ServiceAuthentication; import org.apache.tapestry5.Link; +import org.apache.tapestry5.OptionModel; import org.apache.tapestry5.PersistenceConstants; -import org.apache.tapestry5.RenderSupport; import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.annotations.IncludeJavaScriptLibrary; import org.apache.tapestry5.annotations.InjectComponent; @@ -21,11 +23,10 @@ import org.apache.tapestry5.internal.OptionModelImpl; import org.apache.tapestry5.internal.SelectModelImpl; import org.apache.tapestry5.ioc.annotations.Inject; -import org.apache.tapestry5.json.JSONArray; -import org.apache.tapestry5.json.JSONObject; import org.apache.tapestry5.services.PageRenderLinkSource; import org.slf4j.Logger; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -57,8 +58,6 @@ private Object[] activationContext; - private String redirectPage; - /** * User for connexion form data */ @@ -68,19 +67,14 @@ @Property private String password; - @Property - private UserRole userRole; - @Persist(PersistenceConstants.FLASH) @Property private String email; + @Persist(PersistenceConstants.FLASH) @Property - private SelectModel emptySelectModel = new SelectModelImpl(new OptionModelImpl(null)); + private boolean showRoleWindow; - @Inject - private RenderSupport renderSupport; - void onActivate(Object... activationContext) { if (logger.isDebugEnabled()) { logger.debug("Activiation context : " + @@ -93,117 +87,110 @@ return activationContext; } - String getRedirectPageName() { - if (redirectPage == null && activationContext.length > 0) { - redirectPage = (String)activationContext[0]; - } - return redirectPage; - } - - Object[] getRedirectPageContext() { - if (activationContext.length > 1) { - Object[] redirectPageContext = - Arrays.copyOfRange(activationContext, 1, - activationContext.length); - return redirectPageContext; - } - return null; - } - - /** - * ON_CHANGE :: Callback method for change event on Login textfield component. - * Login will be checked to refresh the userRole select using {@link - * JSONObject} that contains data for select options to display in javascript. - * - * @param login User login - * @return a JSONObject with userRole select data to refresh in Ajax - */ +// /** +// * ON_CHANGE :: Callback method for change event on Login textfield component. +// * Login will be checked to refresh the userRole select using {@link +// * JSONObject} that contains data for select options to display in javascript. +// * +// * @param login User login +// * @return a JSONObject with userRole select data to refresh in Ajax +// */ +// @Log +// JSONObject onChangeFromLogin(String login) { +// JSONObject json = new JSONObject(); +// if (serviceUser.existLogin(login)) { +// +// List<UserRole> roles = serviceUser.getUserRolesByLogin(login); +// +// JSONArray array = new JSONArray(); +// for (UserRole role : roles) { +// JSONObject option = new JSONObject(); +// option.put("name", role.name()); +// option.put("label", role.getLabel()); +// array.put(option); +// } +// json.put("select", array); +// } +// return json; +// } +// @Log - JSONObject onChangeFromLogin(String login) { - JSONObject json = new JSONObject(); - if (serviceUser.existLogin(login)) { - - List<UserRole> roles = serviceUser.getUserRolesByLogin(login); - - JSONArray array = new JSONArray(); - for (UserRole role : roles) { - JSONObject option = new JSONObject(); - option.put("name", role.name()); - option.put("label", role.getLabel()); - array.put(option); + void onValidateFormFromConnexionForm() { + try { + if (logger.isDebugEnabled()) { + logger.debug("Login : " + login); } - json.put("select", array); - } - return json; - } - - @Log - void onValidateFormFromConnexionForm() { - if (login != null && !serviceUser.existLogin(login)) { - connexionFeedback.addError("Identifiant de connexion inconnu, " + - "veuillez réessayer."); - } else { - try { + if (login != null && password != null) { + ConnectedUser user = serviceUser.connect(login, password); + // Authenticate the user in appropriate service + serviceAuthentication.setConnectedUser(user); if (logger.isDebugEnabled()) { - logger.debug("Login : " + login); - logger.debug("Role : " + userRole); + logger.debug("User connected : " + + user.getFullName()); } - if (login != null && password != null && userRole != null) { - ConnectedUser user = serviceUser.connect(login, password, userRole); - // Authenticate the user in appropriate service - serviceAuthentication.setConnectedUser(user); - if (logger.isDebugEnabled()) { - logger.debug("User connected : " + - user.getFullName()); - } - } - } catch (WaoBusinessException eee) { - if (eee.getType().equals(Type.BAD_CONNECTION)) { - connexionFeedback.addError(eee.getMessage()); - email = login; - } else if (eee.getType().equals(Type.ILLEGAL_CONNECTION)) { - connexionFeedback.addInfo(eee.getMessage()); - } - if (logger.isDebugEnabled()) { - logger.error("WaoBusinessException : " + eee.getMessage(), eee); - } } + } catch (WaoBusinessException eee) { + if (eee.getType().equals(Type.BAD_CONNECTION)) { + connexionFeedback.addError(eee.getMessage()); + email = login; + } else if (eee.getType().equals(Type.ILLEGAL_CONNECTION)) { + connexionFeedback.addInfo(eee.getMessage()); + } + if (logger.isDebugEnabled()) { + logger.error("WaoBusinessException : " + eee.getMessage(), eee); + } } } + public boolean hasConnexionErrors() { + return connexionFeedback.hasErrors(); + } + @Log Object onSuccessFromConnexionForm() throws WaoException { if (hasConnexionErrors()) { return this; } + if (serviceAuthentication.getConnectedUser().getRole() == null) { + if (logger.isDebugEnabled()) { + logger.debug("Not only one role, window will be open to select the role"); + } + showRoleWindow = true; + return this; + } + return getRedirectLink(); + } + + private Link getRedirectLink() { + String redirectPage = + AuthenticationUtil.getRedirectPageName(activationContext); + // If redirectPage is not defined, the default one is the Index page - if (getRedirectPageName() == null) { + if (redirectPage == null) { redirectPage = "index"; } - Object[] redirectPageContext = getRedirectPageContext(); - Link redirectLink = null; + Object[] redirectPageContext = + AuthenticationUtil.getRedirectPageContext(activationContext); if (logger.isDebugEnabled()) { logger.debug("Redirect page '" + redirectPage + "' " + - "context : " + Arrays.toString(redirectPageContext)); - } + "context : " + Arrays.toString(redirectPageContext)); + } + Link redirectLink = null; + // Check existence of redirectPageContext, the redirectLink depends on // context if (redirectPageContext == null) { redirectLink = pageRender.createPageRenderLink(redirectPage); } else { redirectLink = pageRender.createPageRenderLinkWithContext( - redirectPage, redirectPageContext); + redirectPage, redirectPageContext); } return redirectLink; } - public boolean hasConnexionErrors() { - return connexionFeedback.hasErrors(); - } - void onSuccessFromForgetPassword() throws WaoException { try { serviceUser.forgetPassword(email); @@ -212,5 +199,52 @@ } catch (WaoBusinessException eee) { connexionFeedback.addError(eee.getMessage()); } + } + + private SelectModel roleSelectModel; + + @Property + private UserRole userRole; + + /** + * Retrieve the SelectModel for user roles. Will be loaded only if user is + * already connected. This list is useful if user as more than one role. + * + * @return the SelectModel for user roles + */ + public SelectModel getRoleSelectModel() { + if (serviceAuthentication.existConnectedUser()) { + WaoUser user = serviceAuthentication.getConnectedUser().getUser(); + + if (logger.isDebugEnabled()) { + logger.debug("Load user roles for " + user.getLogin()); + } + + List<OptionModel> options = new ArrayList<OptionModel>(); + for (UserRole role : user.getUserRoles()) { + OptionModel option = new OptionModelImpl(role.getLabel(), role); + options.add(option); + } + roleSelectModel = new SelectModelImpl(null, options); + } else if (roleSelectModel == null) { + roleSelectModel = new SelectModelImpl(new OptionModelImpl(null)); + } + return roleSelectModel; } + + /** + * ON_SUCCESS :: Callback method for success event on roleForm. Will be + * triggered when roleForm is submit on roleSelect change. The userRole + * will be set to connectedUser and redirectPage will be loaded. + * + * @return the redirect link to load after submission + * @see #getRedirectLink() + */ + Link onSuccessFromRoleForm() { + if (logger.isDebugEnabled()) { + logger.debug("Connection with role : " + userRole); + } + serviceAuthentication.getConnectedUser().setRole(userRole); + return getRedirectLink(); + } } Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java 2010-06-12 15:20:45 UTC (rev 512) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/services/RequiresAuthenticationFilter.java 2010-06-12 18:47:55 UTC (rev 513) @@ -135,6 +135,13 @@ if (serviceAuthentication.existConnectedUser()) { ConnectedUser user = serviceAuthentication.getConnectedUser(); + + // Check role, if not set, the user will be reset from session and redirect to login page. + if (user.getRole() == null) { + serviceAuthentication.setConnectedUser(null); + return false; + } + if (logger.isTraceEnabled()) { logger.trace("User connected : " + user); logger.trace("User role : " + user.getRole()); Modified: trunk/wao-ui/src/main/webapp/Connexion.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Connexion.tml 2010-06-12 15:20:45 UTC (rev 512) +++ trunk/wao-ui/src/main/webapp/Connexion.tml 2010-06-12 18:47:55 UTC (rev 513) @@ -56,15 +56,14 @@ <div class="fleft clearfix" id="so-connexion-form"> <p><t:label for="login" /> : </p> <p> - <input t:type="textfield" t:id="login" t:value="login" - t:mixins="ck/onEvent" t:event="change" t:onCompleteCallback="refreshUserRoles"/> + <input t:type="textfield" t:id="login" t:value="login"/> <img class="hidden" id="loginValid" src="${asset:context:img/valid-16px.png}" alt="Login valide" title="Login valide" /> <img class="hidden" id="loginInvalid" src="${asset:context:img/invalid-16px.png}" alt="Login invalide" title="Login invalide" /> </p> <p><t:label for="password" /> : </p> <p><input t:type="passwordfield" t:id="password" t:value="password" /></p> - <p><t:label for="userRole" /> : </p> - <p><select t:type="select" t:id="userRole" t:value="userRole" t:model="emptySelectModel"/></p> + <!--<p><t:label for="userRole" /> : </p>--> + <!--<p><select t:type="select" t:id="userRole" t:value="userRole" t:model="emptySelectModel"/></p>--> <!--<div class="fright" id="so-connexion-form-buttons">--> <!--<input class="ico accept" t:type="submit" value="Connexion" title="Connexion à l'application Wao" />--> <!--</div>--> @@ -76,6 +75,17 @@ </form> </div> + <div t:type="minimalWindow" t:id="roleWindow" t:show="${showRoleWindow}" t:modal="true" + t:center="false" t:top="50" t:right="100" + t:title="literal:Sélectionnez le rôle dans la liste" t:width="300" t:height="40"> + <form t:id="roleForm" t:type="form" action="tapestry"> + <p class="roleSelect"> + <select t:type="select" t:id="userRole" t:value="userRole" t:model="roleSelectModel" + onChange="this.form.submit()"/> + </p> + </form> + </div> + </body> <!--<div class="acenter"> <img src="${asset:context:}/img/logo_WAO.png" alt="Logo WAO" title="WAO - Web Applicatif Obsmer"/> Modified: trunk/wao-ui/src/main/webapp/css/main.css =================================================================== --- trunk/wao-ui/src/main/webapp/css/main.css 2010-06-12 15:20:45 UTC (rev 512) +++ trunk/wao-ui/src/main/webapp/css/main.css 2010-06-12 18:47:55 UTC (rev 513) @@ -81,8 +81,8 @@ margin-top: 50px; margin-left: auto; margin-right: auto; - height: 120px; - width: 280px; + height: 90px; + width: 260px; border: 2px solid #007CC2; background-color: #DEE7EC; padding: 20px; @@ -102,7 +102,7 @@ } div#so-connexion-logo { - margin-top: 80px; + margin-top: 40px; } div#so-connexion-logo input.ico { @@ -111,6 +111,11 @@ background: url(../img/logo-wao-48px.png) no-repeat center center; } +div#roleWindow p.roleSelect { + text-align: center; + margin-top: 10px; +} + /* Module SESSION */ div#so-session { width: 80%; Modified: trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/AbstractApplicationTest.java =================================================================== --- trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/AbstractApplicationTest.java 2010-06-12 15:20:45 UTC (rev 512) +++ trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/AbstractApplicationTest.java 2010-06-12 18:47:55 UTC (rev 513) @@ -27,14 +27,20 @@ import com.formos.tapestry.testify.core.TapestryTester; import com.formos.tapestry.testify.junit4.TapestryTest; import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ConnectedUserImpl; import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Company; +import fr.ifremer.wao.entity.WaoUser; import test.fr.ifremer.wao.ui.demo.DemoModule; import fr.ifremer.wao.ui.services.AppModule; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.services.ApplicationStateManager; import org.mockito.MockitoAnnotations; import org.mockito.Mock; + +import java.util.ArrayList; +import java.util.List; + import static org.mockito.Mockito.*; Modified: trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ConnectionTest.java =================================================================== --- trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ConnectionTest.java 2010-06-12 15:20:45 UTC (rev 512) +++ trunk/wao-ui/src/test/java/test/fr/ifremer/wao/ui/pages/ConnectionTest.java 2010-06-12 18:47:55 UTC (rev 513) @@ -29,8 +29,11 @@ import fr.ifremer.wao.WaoBusinessException; import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.ConnectedUser; +import fr.ifremer.wao.bean.ConnectedUserImpl; import fr.ifremer.wao.bean.UserRole; +import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.News; +import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.service.ServiceNews; import fr.ifremer.wao.service.ServiceUser; import java.util.ArrayList; @@ -38,6 +41,7 @@ import fr.ifremer.wao.ui.services.ServiceAuthentication; import test.fr.ifremer.wao.ui.AbstractApplicationTest; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.tapestry5.dom.Document; import org.apache.tapestry5.dom.Element; @@ -58,24 +62,13 @@ private static final Logger logger = LoggerFactory.getLogger(ConnectionTest.class); - @ForComponents - @Mock - private ServiceUser serviceUser; - - @ForComponents - @Mock - private ServiceNews serviceNews; - @Inject private ApplicationStateManager stateManager; - @Inject - private ServiceAuthentication serviceAuthentication; - @Test - public void testObserverSession() + public void testUserSession() throws WaoException, WaoBusinessException { - logger.info("## testObserverSession"); + logger.info("## testUserSession"); prepareObserverUser(true); ConnectedUser sso = stateManager.getIfExists(ConnectedUser.class); @@ -92,57 +85,117 @@ Assert.assertNotNull(main); } - @Test - public void testObserverConnection() - throws WaoException, WaoBusinessException { - logger.info("## testObserverConnection"); + @ForComponents + @Mock + private ServiceUser serviceUser; - when(serviceNews.getNews()).thenReturn(new ArrayList<News>()); - Document page = tester.renderPage("index"); - // Will be redirect to Connexion page - if (logger.isInfoEnabled()) { - logger.info("Content : " + page.getRootElement()); - } + @ForComponents + @Mock + private ServiceNews serviceNews; - prepareObserverUser(false); - // Connect the user with connection page - connectUser(page); - } + @Inject + private ServiceAuthentication serviceAuthentication; @Test - public void testAdminConnection() + public void testUserConnection() throws WaoException, WaoBusinessException { - logger.info("## testAdminConnection"); - - when(serviceNews.getNews()).thenReturn(new ArrayList<News>()); - Document page = tester.renderPage("index"); - if (logger.isInfoEnabled()) { - logger.info("Content : " + page.getRootElement()); + logger.info("## testUserConnection"); + + logger.info("-- Load 'Index' page : redirection to 'Connexion' page"); + Document connectionPage = tester.renderPage("index"); + // Redirection to Connexion page + if (logger.isDebugEnabled()) { + logger.debug("Content : " + connectionPage.getRootElement()); } + Assert.assertNotNull(connectionPage.getElementById("so-connexion-box")); + // Prepare user connection prepareAdminUser(); - connectUser(page); + + logger.info("-- Connect user : rediction to 'Index' page"); + Document indexPage = connect(connectionPage, user); + + Assert.assertNotNull(indexPage); + Assert.assertTrue(serviceAuthentication.existConnectedUser()); + + checkIndexPage(indexPage); } - private Element connectUser(Document page) - throws WaoException, WaoBusinessException { - // Need to use correct role - when(serviceUser.connect("jmichmuche", "password", UserRole.OBSERVER)).thenReturn(user); - when(serviceUser.existLogin("jmichmuche")).thenReturn(true); + private Document connect(Document connectionPage, ConnectedUser user) + throws WaoBusinessException { + when(serviceUser.connect("login", "password")).thenReturn(user); + when(serviceNews.getNews()).thenReturn(new ArrayList<News>()); Map<String, String> fieldValues = new HashMap<String, String>(); - fieldValues.put("login", "jmichmuche"); + fieldValues.put("login", "login"); fieldValues.put("password", "password"); - fieldValues.put("userRole", UserRole.OBSERVER.name()); Document result = tester.submitForm( - page.getElementById("connexionForm"), fieldValues); + connectionPage.getElementById("connexionForm"), fieldValues); + return result; + } - Element main = result.getElementById("so-news"); - if (logger.isInfoEnabled()) { - logger.info("Content page News : " + main); + private Element checkIndexPage(Document page) { + Element main = page.getElementById("so-news"); + if (logger.isDebugEnabled()) { + logger.debug("Content page News : " + main); } Assert.assertNotNull(main); return main; } + private WaoUser getMultiRoleUser() { + Company company = mock(Company.class); + when(company.getName()).thenReturn("TEST"); + + List<UserRole> roles = new ArrayList<UserRole>(); + roles.add(UserRole.ADMIN); + roles.add(UserRole.OBSERVER); + + WaoUser user = mock(WaoUser.class); + when(user.getUserRoles()).thenReturn(roles); + when(user.getLogin()).thenReturn("multiroleUser"); + when(user.getFullName()).thenReturn("User Test"); + when(user.getCompany()).thenReturn(company); + when(user.isReadOnly(UserRole.ADMIN)).thenReturn(false); + when(user.isReadOnly(UserRole.OBSERVER)).thenReturn(false); + + return user; + } + + @Test + public void testMultiRoleUserConnection() throws WaoBusinessException { + logger.info("## testMultiRoleUserConnection"); + + /** PREPARE LOADING **/ + + logger.info("-- Load 'Index' page : redirection to 'Connexion' page"); + when(serviceNews.getNews()).thenReturn(new ArrayList<News>()); + Document connectionPage1 = tester.renderPage("index"); + + // Prepare user for connection + ConnectedUser userConnected = new ConnectedUserImpl(); + userConnected.setUser(getMultiRoleUser()); + + logger.info("-- Connect user : no unique role found, refresh 'Connexion' page"); + Document connectionPage2 = connect(connectionPage1, userConnected); + if (logger.isInfoEnabled()) { + logger.info("Content with popup roles : " + connectionPage2); + } + Assert.assertNotNull(connectionPage2.getElementById("so-connexion-box")); + Assert.assertNotNull(connectionPage2.getElementById("roleForm")); + Assert.assertTrue(serviceAuthentication.existConnectedUser()); + + /** EXECUTE SUBMISSION FOR ROLE **/ + logger.info("-- Choose role ADMIN : redirection to 'Index' page"); + + Map<String, String> fieldValues = new HashMap<String, String>(); + fieldValues.put("userRole", UserRole.ADMIN.name()); + Document result = tester.submitForm( + connectionPage2.getElementById("roleForm"), fieldValues); + + Assert.assertNotNull(serviceAuthentication.getConnectedUser().getRole()); + + checkIndexPage(result); + } + }
participants (1)
-
fdesbois@users.labs.libre-entreprise.org