/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ package org.squale.squalecommon.enterpriselayer.applicationcomponent.administration; import java.util.Collection; import org.squale.jraf.commons.exception.JrafEnterpriseException; import org.squale.jraf.helper.AccessDelegateHelper; import org.squale.jraf.spi.accessdelegate.IApplicationComponent; import org.squale.squalecommon.SqualeTestCase; import org.squale.squalecommon.daolayer.profile.ProfileDAOImpl; import org.squale.squalecommon.daolayer.profile.UserDAOImpl; import org.squale.squalecommon.datatransfertobject.component.UserDTO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ApplicationBO; import org.squale.squalecommon.enterpriselayer.businessobject.profile.ProfileBO; import org.squale.squalecommon.enterpriselayer.businessobject.profile.UserBO; /** * @author M400841 Pour changer le mod�le de ce commentaire de type g�n�r�, allez � : * Fen�tre>Pr�f�rences>Java>G�n�ration de code>Code et commentaires */ public class LoginApplicationComponentAccessTest extends SqualeTestCase { /** administrateur */ private UserBO mAdmin; /** manager */ private UserBO mManager; /** profil manager */ private ProfileBO mManagerProfile; /** lecteur */ private UserBO mReader; /** profil lecteur */ private ProfileBO mReaderProfile; /** dao pour les utilisateurs */ private UserDAOImpl userDAO = UserDAOImpl.getInstance(); /** L'application */ private ApplicationBO mAppli; /** * {@inheritDoc} * * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); getSession().beginTransaction(); // On cr�e les profils ProfileDAOImpl profileDAO = ProfileDAOImpl.getInstance(); mManagerProfile = new ProfileBO(); mManagerProfile.setName( ProfileBO.MANAGER_PROFILE_NAME ); mReaderProfile = new ProfileBO(); mReaderProfile.setName( ProfileBO.READER_PROFILE_NAME ); profileDAO.save( getSession(), mManagerProfile ); profileDAO.save( getSession(), mReaderProfile ); // On cr�e l'application mAppli = getComponentFactory().createApplication( getSession() ); // On cr�e les utilisateurs mAdmin = getComponentFactory().createUser( getSession() ); mManager = getComponentFactory().createUser( getSession() ); mManager.setDefaultProfile( mManagerProfile ); mManager.getRights().put( mAppli, mManagerProfile ); mReader = getComponentFactory().createUser( getSession() ); mReader.setDefaultProfile( mReaderProfile ); mReader.getRights().put( mAppli, mReaderProfile ); userDAO.save( getSession(), mManager ); userDAO.save( getSession(), mReader ); getSession().commitTransactionWithoutClose(); } /** * Teste avec : - un matricule et mot de passe valide - un matricule valide et mot de passe non valide - un * matricule et mot de passe non valide */ public void testVerifyUserWithGoodLogin() { try { getSession().beginTransaction(); UserBO user = getComponentFactory().createUser( getSession() ); user.setMatricule( "usermatricule" ); userDAO.save( getSession(), user ); getSession().commitTransactionWithoutClose(); // Teste si la methode est accessible par AccessDelegateHelper // et si l'objet renvoy� n'est pas nul IApplicationComponent appComponent; // Execution de la methode avec un login et mot de passe valide UserDTO dto = new UserDTO(); dto.setMatricule( user.getMatricule() ); dto.setPassword( "" ); Object[] paramIn = { dto, Boolean.TRUE }; appComponent = AccessDelegateHelper.getInstance( "Login" ); UserDTO out = (UserDTO) appComponent.execute( "verifyUser", paramIn ); assertNotNull( out ); assertEquals( user.getId(), out.getID() ); // Execution de la methode avec un mot de passe non valide dto.setPassword( "robert" ); appComponent = AccessDelegateHelper.getInstance( "Login" ); out = (UserDTO) appComponent.execute( "verifyUser", paramIn ); assertNotNull( out ); assertEquals( user.getId(), out.getID() ); // Execution de la methode avec un login et mot de passe valide dto.setMatricule( "robert" ); appComponent = AccessDelegateHelper.getInstance( "Login" ); out = (UserDTO) appComponent.execute( "verifyUser", paramIn ); assertNotNull( out ); assertTrue( "User guest should have another id", user.getId() != out.getID() ); } catch ( Exception e ) { e.printStackTrace(); fail( "unexpected exception" ); } } /** * Test sur l'accessibilite au composant * * @throws JrafEnterpriseException en cas d'�chec */ public void testLoginApplicationComponentAccess() throws JrafEnterpriseException { // Teste si la construction de l'application component par AccessDelegateHelper IApplicationComponent appComponent; appComponent = AccessDelegateHelper.getInstance( "Login" ); assertNotNull( appComponent ); } /** * Obtention des utilisateurs avec le profil administrateur ayant un email */ public void testGetAdminWithEmails() { try { // On r�cup�re les administrateurs IApplicationComponent appComponent; appComponent = AccessDelegateHelper.getInstance( "Login" ); Object[] paramIn = { Boolean.FALSE }; // L'administrateur n'a pas d'email --> 0 r�sultat Collection adminsWithEmail = (Collection) appComponent.execute( "getAdminsWithEmails", paramIn ); assertEquals( 0, adminsWithEmail.size() ); // On lui donne un email mAdmin.setEmail( "admin@junit.com" ); // On le d�sabonne mAdmin.setUnsubscribed( true ); getSession().beginTransaction(); userDAO.save( getSession(), mAdmin ); getSession().commitTransactionWithoutClose(); // L'administrateur a un email mais est d�sabonn� --> 0 r�sultat adminsWithEmail = (Collection) appComponent.execute( "getAdminsWithEmails", paramIn ); assertEquals( 0, adminsWithEmail.size() ); // On appel l'application component en acceptant les d�sabonn�s paramIn[0] = Boolean.TRUE; // L'administrateur a un email --> 1 r�sultat adminsWithEmail = (Collection) appComponent.execute( "getAdminsWithEmails", paramIn ); assertEquals( 1, adminsWithEmail.size() ); } catch ( Exception e ) { e.printStackTrace(); fail( "unexpected exception" ); } } /** * R�cup�ration des emails des utilisateurs ayant un certain profil sur une application en fonction de leur email et * de leur abonnement */ public void testGetEmails() { try { // R�cup�ration de l'application component IApplicationComponent appComponent; appComponent = AccessDelegateHelper.getInstance( "Login" ); Object[] paramIn = { new Long( mAppli.getId() ), Boolean.FALSE }; // Le manager n'a pas d'email --> 0 r�sultat Collection managersWithEmail = (Collection) appComponent.execute( "getManagersEmails", paramIn ); assertEquals( 0, managersWithEmail.size() ); // Le lecteur n'a pas d'email --> 0 r�sultat Collection readersWithEmail = (Collection) appComponent.execute( "getReadersEmails", paramIn ); assertEquals( 0, readersWithEmail.size() ); // On donne un mail au manager et au lecteur et on les d�sabonne mManager.setEmail( "manager@junit.com" ); mManager.setUnsubscribed( true ); mReader.setEmail( "reader@junit.com" ); mReader.setUnsubscribed( true ); getSession().beginTransaction(); userDAO.save( getSession(), mManager ); userDAO.save( getSession(), mReader ); getSession().commitTransactionWithoutClose(); // Le manager a un email mais n'est pas abonn� --> 0 r�sultat managersWithEmail = (Collection) appComponent.execute( "getManagersEmails", paramIn ); assertEquals( 0, managersWithEmail.size() ); // On veut aussi les lecteurs d�sabonn�s paramIn[1] = Boolean.TRUE; // Le manager a un email --> 1 r�sultat readersWithEmail = (Collection) appComponent.execute( "getReadersEmails", paramIn ); assertEquals( 1, readersWithEmail.size() ); } catch ( Exception e ) { e.printStackTrace(); fail( "unexpected exception" ); } } }