package fr.paris.lutece.portal.web.admin; import java.math.BigInteger; import java.security.SecureRandom; import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import fr.paris.lutece.portal.business.portlet.AliasPortlet; import fr.paris.lutece.portal.business.portlet.AliasPortletHome; import fr.paris.lutece.portal.business.portlet.IPortletInterfaceDAO; import fr.paris.lutece.portal.business.portlet.Portlet; import fr.paris.lutece.portal.business.portlet.PortletHome; import fr.paris.lutece.portal.business.portlet.PortletType; import fr.paris.lutece.portal.business.portlet.PortletTypeHome; import fr.paris.lutece.portal.business.rbac.AdminRole; import fr.paris.lutece.portal.business.rbac.RBAC; import fr.paris.lutece.portal.business.rbac.RBACHome; import fr.paris.lutece.portal.business.user.AdminUser; import fr.paris.lutece.portal.service.admin.AccessDeniedException; import fr.paris.lutece.portal.service.i18n.I18nService; import fr.paris.lutece.portal.service.message.AdminMessage; import fr.paris.lutece.portal.service.message.AdminMessageService; import fr.paris.lutece.portal.service.message.SiteMessageException; import fr.paris.lutece.portal.service.portlet.PortletRemovalListenerService; import fr.paris.lutece.portal.service.portlet.PortletResourceIdService; import fr.paris.lutece.portal.service.util.RemovalListener; import fr.paris.lutece.portal.web.constants.Parameters; import fr.paris.lutece.portal.web.portlet.AliasPortletJspBean; import fr.paris.lutece.test.LuteceTestCase; import fr.paris.lutece.test.MokeHttpServletRequest; import fr.paris.lutece.util.ReferenceItem; import fr.paris.lutece.util.ReferenceList; /** * Test the AdminPagePortletJspBean class */ public class AdminPagePortletJspBeanTest extends LuteceTestCase { /** status request parameter */ private static final String PORTLET_STATUS = "status"; /** * Test when no parameter given * * @throws AccessDeniedException * should not happen */ public void testGetModifyPortletStatusNoParam( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); String url = bean.getModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when no status parameter given * * @throws AccessDeniedException * should not happen */ public void testGetModifyPortletStatusNoStatusParam( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); request.addMokeParameters( Parameters.PORTLET_ID, "1" ); String url = bean.getModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when no portlet_id parameter given * * @throws AccessDeniedException * should not happen */ public void testGetModifyPortletStatusNoPortletParam( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); String url = bean.getModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when the status is invalid * * @throws AccessDeniedException * should not happen */ public void testGetModifyPortletStatusInvalidStatus( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.addMokeParameters( PORTLET_STATUS, "999999999" ); String url = bean.getModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } finally { removePortlet( portlet ); } } /** * Test when the portlet_id is invalid * * @throws AccessDeniedException * should not happen */ public void testGetModifyPortletStatusInvalidPortletID( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); request.addMokeParameters( Parameters.PORTLET_ID, "NOT_NUMERIC" ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); String url = bean.getModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when the portlet does not exist * * @throws AccessDeniedException * should not happen */ public void testGetModifyPortletStatusInexistantPortletID( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, "31415925" ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); String url = bean.getModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } finally { removePortlet( portlet ); } } /** * Test when the user does not have the right ro manage portlets */ public void testGetModifyPortletStatusNoRight( ) { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); request.registerAdminUser( new AdminUser( ) ); bean.getModifyPortletStatus( request ); fail( "Should not have been able to modify the portlet" ); } catch( AccessDeniedException e ) { } finally { removePortlet( portlet ); } } /** * Test when all conditions are met * * @throws AccessDeniedException * should not happen */ public void testGetModifyPortletStatus( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = null; AdminUser user = null; try { portlet = getPortlet( ); user = getAdminUser( ); request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); request.registerAdminUser( user ); String url = bean.getModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_CONFIRMATION ); } finally { if ( portlet != null ) { removePortlet( portlet ); } if ( user != null ) { removeUser( user ); } } } /** * Test when no parameter given * * @throws AccessDeniedException * should not happen */ public void testDoModifyPortletStatusNoParam( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); String url = bean.doModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when no status parameter given * * @throws AccessDeniedException * should not happen */ public void testDoModifyPortletStatusNoStatusParam( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); request.addMokeParameters( Parameters.PORTLET_ID, "1" ); String url = bean.doModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when no portlet_id parameter given * * @throws AccessDeniedException * should not happen */ public void testDoModifyPortletStatusNoPortletParam( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); String url = bean.doModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when the status is invalid * * @throws AccessDeniedException * should not happen */ public void testDoModifyPortletStatusInvalidStatus( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.addMokeParameters( PORTLET_STATUS, "999999999" ); String url = bean.doModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } finally { removePortlet( portlet ); } } /** * Test when the portlet_id is invalid * * @throws AccessDeniedException * should not happen */ public void testDoModifyPortletStatusInvalidPortletID( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); request.addMokeParameters( Parameters.PORTLET_ID, "NOT_NUMERIC" ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); String url = bean.doModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when the portlet does not exist * * @throws AccessDeniedException * should not happen */ public void testDoModifyPortletStatusInexistantPortletID( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, "31415925" ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); String url = bean.doModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } finally { removePortlet( portlet ); } } /** * Test when the user does not have the right ro manage portlets */ public void testDoModifyPortletStatusNoRight( ) { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( Portlet.STATUS_PUBLISHED ) ); request.registerAdminUser( new AdminUser( ) ); bean.doModifyPortletStatus( request ); fail( "Should not have been able to modify the portlet" ); } catch( AccessDeniedException e ) { } finally { removePortlet( portlet ); } } /** * Test when all conditions are met * * @throws AccessDeniedException * should not happen */ public void testDoModifyPortletStatus( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = null; AdminUser user = null; try { portlet = getPortlet( ); int nStatus = portlet.getStatus( ); int nNewStatus = nStatus == Portlet.STATUS_PUBLISHED ? Portlet.STATUS_UNPUBLISHED : Portlet.STATUS_PUBLISHED; user = getAdminUser( ); request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.addMokeParameters( PORTLET_STATUS, Integer.toString( nNewStatus ) ); request.registerAdminUser( user ); String url = bean.doModifyPortletStatus( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNull( message ); Portlet storedPortlet = PortletHome.findByPrimaryKey( portlet.getId( ) ); assertNotNull( storedPortlet ); assertEquals( nNewStatus, storedPortlet.getStatus( ) ); } finally { if ( portlet != null ) { removePortlet( portlet ); } if ( user != null ) { removeUser( user ); } } } /** * Test when no parameter given * * @throws AccessDeniedException * should not happen */ public void testGetRemovePortletNoParam( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); String url = bean.getRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when the portlet_id is invalid * * @throws AccessDeniedException * should not happen */ public void testGetRemovePortletInvalidPortletID( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); request.addMokeParameters( Parameters.PORTLET_ID, "NOT_NUMERIC" ); String url = bean.getRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when the portlet does not exist * * @throws AccessDeniedException * should not happen */ public void testGetRemovePortletInexistantPortletID( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, "31415925" ); String url = bean.getRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } finally { removePortlet( portlet ); } } /** * Test when the user does not have the right ro manage portlets */ public void testGetRemovePortletNoRight( ) { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.registerAdminUser( new AdminUser( ) ); bean.getRemovePortlet( request ); fail( "Should not have been able to modify the portlet" ); } catch( AccessDeniedException e ) { } finally { removePortlet( portlet ); } } /** * Test when all conditions are met * * @throws AccessDeniedException * should not happen */ public void testGetRemovePortlet( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = null; AdminUser user = null; try { portlet = getPortlet( ); user = getAdminUser( ); request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.registerAdminUser( user ); String url = bean.getRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_CONFIRMATION ); ReferenceList listLanguages = I18nService.getAdminLocales( Locale.FRANCE ); for ( ReferenceItem lang : listLanguages ) { assertTrue( message.getText( new Locale( lang.getCode( ) ) ).contains( portlet.getName( ) ) ); } } finally { if ( portlet != null ) { removePortlet( portlet ); } if ( user != null ) { removeUser( user ); } } } /** * Test when all conditions are met * * @throws AccessDeniedException * should not happen */ public void testGetRemovePortletWithAlias( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = null; AdminUser user = null; try { portlet = getPortlet( ); getAlias( portlet ); user = getAdminUser( ); request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.registerAdminUser( user ); String url = bean.getRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_CONFIRMATION ); ReferenceList listLanguages = I18nService.getAdminLocales( Locale.FRANCE ); for ( ReferenceItem lang : listLanguages ) { assertTrue( message.getText( new Locale( lang.getCode( ) ) ).contains( portlet.getName( ) ) ); } } finally { if ( portlet != null ) { removePortlet( portlet ); } if ( user != null ) { removeUser( user ); } } } /** * Test when all conditions are met * * @throws AccessDeniedException * should not happen */ public void testGetRemovePortletWithPortletRemovalListener( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = null; AdminUser user = null; try { portlet = getPortlet( ); user = getAdminUser( ); request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.registerAdminUser( user ); final int nPortletId = portlet.getId( ); final String removalRefusedMessage = "REMOVAL_REFUSED_" + nPortletId; PortletRemovalListenerService.getService( ).registerListener( new RemovalListener( ) { // removalListener cannot be unregistered. Try not to interfere with other tests private boolean first = true; @Override public String getRemovalRefusedMessage( String id, Locale locale ) { return removalRefusedMessage; } @Override public boolean canBeRemoved( String id ) { // always allow removal after first use boolean res = !first || !id.equals( Integer.toString( nPortletId ) ); first = false; return res; } } ); String url = bean.getRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_STOP ); ReferenceList listLanguages = I18nService.getAdminLocales( Locale.FRANCE ); for ( ReferenceItem lang : listLanguages ) { assertTrue( message.getText( new Locale( lang.getCode( ) ) ).contains( portlet.getName( ) ) ); assertTrue( message.getText( new Locale( lang.getCode( ) ) ).contains( removalRefusedMessage ) ); } } finally { if ( portlet != null ) { removePortlet( portlet ); } if ( user != null ) { removeUser( user ); } } } /** * Test when no parameter given * * @throws AccessDeniedException * should not happen */ public void testDoRemovePortletNoParam( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); String url = bean.doRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when the portlet_id is invalid * * @throws AccessDeniedException * should not happen */ public void testDoRemovePortletInvalidPortletID( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); request.addMokeParameters( Parameters.PORTLET_ID, "NOT_NUMERIC" ); String url = bean.doRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } /** * Test when the portlet does not exist * * @throws AccessDeniedException * should not happen */ public void testDoRemovePortletInexistantPortletID( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, "31415925" ); String url = bean.doRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNotNull( message ); assertEquals( message.getType( ), AdminMessage.TYPE_ERROR ); } finally { removePortlet( portlet ); } } /** * Test when the user does not have the right ro manage portlets */ public void testDoRemovePortletNoRight( ) { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = getPortlet( ); try { request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.registerAdminUser( new AdminUser( ) ); bean.doRemovePortlet( request ); fail( "Should not have been able to modify the portlet" ); } catch( AccessDeniedException e ) { } finally { removePortlet( portlet ); } } /** * Test when all conditions are met * * @throws AccessDeniedException * should not happen */ public void testDoRemovePortlet( ) throws AccessDeniedException { AdminPagePortletJspBean bean = new AdminPagePortletJspBean( ); MokeHttpServletRequest request = new MokeHttpServletRequest( ); Portlet portlet = null; AdminUser user = null; try { portlet = getPortlet( ); user = getAdminUser( ); request.addMokeParameters( Parameters.PORTLET_ID, Integer.toString( portlet.getId( ) ) ); request.registerAdminUser( user ); String url = bean.doRemovePortlet( request ); assertNotNull( url ); AdminMessage message = AdminMessageService.getMessage( request ); assertNull( message ); try { portlet = PortletHome.findByPrimaryKey( portlet.getId( ) ); fail( "Portlet was not removed" ); } catch( NullPointerException e ) { portlet = null; } } finally { if ( portlet != null ) { removePortlet( portlet ); } if ( user != null ) { removeUser( user ); } } } /** * Get an admin user with a Role which can manage portlets * * @return the admin user */ private AdminUser getAdminUser( ) { String strRoleKey = "ROLE_" + new BigInteger( 40, new SecureRandom( ) ).toString( 32 ); RBAC rbac = new RBAC( ); rbac.setResourceTypeKey( PortletType.RESOURCE_TYPE ); rbac.setPermissionKey( PortletResourceIdService.PERMISSION_MANAGE ); rbac.setResourceId( RBAC.WILDCARD_RESOURCES_ID ); rbac.setRoleKey( strRoleKey ); RBACHome.create( rbac ); AdminRole role = new AdminRole( ); role.setKey( strRoleKey ); role.setDescription( strRoleKey ); AdminUser user = new AdminUser( ); Map<String, AdminRole> roles = new HashMap<>( ); roles.put( strRoleKey, role ); user.setRoles( roles ); return user; } /** * Remove objects persisted with the test user * * @param user * the test user */ private void removeUser( AdminUser user ) { Map<String, AdminRole> roles = user.getRoles( ); for ( String roleKey : roles.keySet( ) ) { RBACHome.removeForRoleKey( roleKey ); } } /** * Remove the test portlet * * @param portlet * the test portlet */ private void removePortlet( Portlet portlet ) { PortletType portletType = PortletTypeHome.findByPrimaryKey( portlet.getPortletTypeId( ) ); PortletHome portletHome = new TestPortletHome( ); portletHome.remove( portlet ); PortletTypeHome.remove( portletType.getId( ) ); } /** * Get a test portlet * * @return a test portlet */ private Portlet getPortlet( ) { PortletType portletType = new PortletType( ); String strPortletTypeID = "TEST_" + new BigInteger( 40, new SecureRandom( ) ).toString( 32 ); portletType.setId( strPortletTypeID ); portletType.setHomeClass( TestPortletHome.class.getName( ) ); PortletTypeHome.create( portletType ); Portlet portlet = new TestPortlet( portletType ); portlet.setStatus( Portlet.STATUS_UNPUBLISHED ); portlet.setName( strPortletTypeID ); portlet.setAcceptAlias( 1 ); PortletHome portletHome = new TestPortletHome( ); portletHome.create( portlet ); return portlet; } private Portlet getAlias( Portlet portlet ) { AliasPortlet aliasPortlet = new AliasPortlet( ); aliasPortlet.setPageId( portlet.getPageId( ) ); aliasPortlet.setName( "ALIAS_" + portlet.getName( ) ); aliasPortlet.setAliasId( portlet.getId( ) ); aliasPortlet.setStyleId( portlet.getStyleId( ) ); AliasPortletHome.getInstance( ).create( aliasPortlet ); return aliasPortlet; } /** * Test portlet */ private static final class TestPortlet extends Portlet { /** * Constructor * * @param type * the portlet type */ TestPortlet( PortletType type ) { setPortletTypeId( type.getId( ) ); } @Override public String getXml( HttpServletRequest request ) throws SiteMessageException { return null; } @Override public String getXmlDocument( HttpServletRequest request ) throws SiteMessageException { return null; } @Override public void remove( ) { new TestPortletHome( ).remove( this ); ; } } /** * The test portlet home */ public static final class TestPortletHome extends PortletHome { @Override public IPortletInterfaceDAO getDAO( ) { return new TestPortletInterfaceDAO( ); } @Override public String getPortletTypeId( ) { throw new UnsupportedOperationException( ); } } /** * The test portlet DAO */ private static final class TestPortletInterfaceDAO implements IPortletInterfaceDAO { private static final Map<Integer, Portlet> _storage = new HashMap<>( ); @Override public void insert( Portlet portlet ) { _storage.put( portlet.getId( ), portlet ); } @Override public void delete( int nPortletId ) { _storage.remove( nPortletId ); } @Override public Portlet load( int nPortletId ) { return _storage.get( nPortletId ); } @Override public void store( Portlet portlet ) { _storage.put( portlet.getId( ), portlet ); } } }