View Javadoc
1   /*
2    * Copyright (c) 2002-2025, City of Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.portal.web.admin;
35  
36  import fr.paris.lutece.api.user.UserRole;
37  import java.io.IOException;
38  import java.math.BigInteger;
39  import java.security.SecureRandom;
40  import java.sql.Timestamp;
41  import java.util.ArrayList;
42  import java.util.Collection;
43  import java.util.Collections;
44  import java.util.HashMap;
45  import java.util.List;
46  import java.util.Locale;
47  import java.util.Map;
48  
49  import org.apache.commons.fileupload.FileItem;
50  import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
51  import org.apache.commons.fileupload.FileUploadException;
52  import org.apache.commons.fileupload.disk.DiskFileItemFactory;
53  import org.springframework.mock.web.MockHttpServletRequest;
54  
55  import fr.paris.lutece.portal.business.page.Page;
56  import fr.paris.lutece.portal.business.page.PageHome;
57  import fr.paris.lutece.portal.business.rbac.RBACRole;
58  import fr.paris.lutece.portal.business.rbac.RBAC;
59  import fr.paris.lutece.portal.business.rbac.RBACHome;
60  import fr.paris.lutece.portal.business.style.PageTemplateHome;
61  import fr.paris.lutece.portal.business.user.AdminUser;
62  import fr.paris.lutece.portal.service.admin.AccessDeniedException;
63  import fr.paris.lutece.portal.service.admin.PasswordResetException;
64  import fr.paris.lutece.portal.service.i18n.I18nService;
65  import fr.paris.lutece.portal.service.message.AdminMessage;
66  import fr.paris.lutece.portal.service.message.AdminMessageService;
67  import fr.paris.lutece.portal.service.page.IPageService;
68  import fr.paris.lutece.portal.service.page.PageResourceIdService;
69  import fr.paris.lutece.portal.service.portal.PortalService;
70  import fr.paris.lutece.portal.service.security.SecurityTokenService;
71  import fr.paris.lutece.portal.service.spring.SpringContextService;
72  import fr.paris.lutece.portal.web.constants.Parameters;
73  import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
74  import fr.paris.lutece.test.LuteceTestCase;
75  import fr.paris.lutece.test.Utils;
76  import fr.paris.lutece.util.ReferenceItem;
77  import fr.paris.lutece.util.ReferenceList;
78  
79  public class AdminPageJspBeanTest extends LuteceTestCase
80  {
81      private String _randomPageName;
82      private Page _page;
83      private AdminPageJspBean _bean;
84      private AdminUser _adminUser;
85  
86      @Override
87      protected void setUp( ) throws Exception
88      {
89          super.setUp( );
90          _randomPageName = "page" + new SecureRandom( ).nextLong( );
91          IPageService pageService = (IPageService) SpringContextService.getBean( "pageService" );
92          _page = new Page( );
93          _page.setParentPageId( PortalService.getRootPageId( ) );
94          _page.setPageTemplateId( PageTemplateHome.getPageTemplatesList( ).get( 0 ).getId( ) );
95          _page.setName( _randomPageName );
96          _page.setDescription( _randomPageName );
97          _page.setMetaKeywords( "" );
98          _page.setMetaDescription( "" );
99          _page.setNodeStatus( 1 );
100         _page.setDateUpdate( new Timestamp( new java.util.Date( ).getTime( ) ) );
101         _page.setDisplayDateUpdate( true );
102         _page.setIsManualDateUpdate( true );
103         pageService.createPage( _page );
104         _bean = new AdminPageJspBean( );
105         _adminUser = getAdminUser( );
106     }
107 
108     @Override
109     protected void tearDown( ) throws Exception
110     {
111         IPageService pageService = (IPageService) SpringContextService.getBean( "pageService" );
112         if ( _page != null )
113         {
114             try
115             {
116                 Collection<Page> children = PageHome.getChildPages( _page.getId( ) );
117                 children.stream( ).forEach( page -> pageService.removePage( page.getId( ) ) );
118                 pageService.removePage( _page.getId( ) );
119             }
120             finally
121             {
122             }
123         }
124         removeUser( _adminUser );
125         super.tearDown( );
126     }
127 
128     private AdminUser getAdminUser( )
129     {
130         String strRoleKey = "ROLE_" + new BigInteger( 40, new SecureRandom( ) ).toString( 32 );
131         RBAC rbac = new RBAC( );
132         rbac.setResourceTypeKey( Page.RESOURCE_TYPE );
133         rbac.setPermissionKey( PageResourceIdService.PERMISSION_MANAGE );
134         rbac.setResourceId( RBAC.WILDCARD_RESOURCES_ID );
135         rbac.setRoleKey( strRoleKey );
136         RBACHome.create( rbac );
137         RBACRole role = new RBACRole( );
138         role.setKey( strRoleKey );
139         role.setDescription( strRoleKey );
140         AdminUser user = new AdminUser( );
141         Map<String, RBACRole> roles = new HashMap<>( );
142         roles.put( strRoleKey, role );
143         user.setRoles( roles );
144         return user;
145     }
146 
147     /**
148      * Remove objects persisted with the test user
149      * 
150      * @param user
151      *            the test user
152      */
153     private void removeUser( AdminUser user )
154     {
155         Map<String, UserRole> roles = user.getRoles( );
156         for ( String roleKey : roles.keySet( ) )
157         {
158             RBACHome.removeForRoleKey( roleKey );
159         }
160     }
161 
162     public void testGetRemovePageNoArgs( )
163     {
164         MockHttpServletRequest request = new MockHttpServletRequest( );
165         _bean.getRemovePage( request );
166         AdminMessage message = AdminMessageService.getMessage( request );
167         assertNotNull( message );
168         assertEquals( AdminMessage.TYPE_ERROR, message.getType( ) );
169     }
170 
171     public void testGetRemovePageNotANumber( )
172     {
173         MockHttpServletRequest request = new MockHttpServletRequest( );
174         request.addParameter( Parameters.PAGE_ID, "foo" );
175         _bean.getRemovePage( request );
176         AdminMessage message = AdminMessageService.getMessage( request );
177         assertNotNull( message );
178         assertEquals( AdminMessage.TYPE_ERROR, message.getType( ) );
179     }
180 
181     public void testGetRemovePageNotExisting( )
182     {
183         MockHttpServletRequest request = new MockHttpServletRequest( );
184         request.addParameter( Parameters.PAGE_ID, Integer.toString( 314159265 ) );
185         _bean.getRemovePage( request );
186         AdminMessage message = AdminMessageService.getMessage( request );
187         assertNotNull( message );
188         assertEquals( AdminMessage.TYPE_ERROR, message.getType( ) );
189     }
190 
191     public void testGetRemovePage( )
192     {
193         MockHttpServletRequest request = new MockHttpServletRequest( );
194         request.addParameter( Parameters.PAGE_ID, Integer.toString( _page.getId( ) ) );
195         _bean.getRemovePage( request );
196         AdminMessage message = AdminMessageService.getMessage( request );
197         assertNotNull( message );
198         assertNotNull( message.getRequestParameters( ).get( SecurityTokenService.PARAMETER_TOKEN ) );
199         assertEquals( AdminMessage.TYPE_CONFIRMATION, message.getType( ) );
200         ReferenceList listLanguages = I18nService.getAdminLocales( Locale.FRANCE );
201         for ( ReferenceItem lang : listLanguages )
202         {
203             assertTrue( message.getText( new Locale( lang.getCode( ) ) ).contains( _randomPageName ) );
204         }
205     }
206 
207     public void testDoRemovePageNoArgs( ) throws AccessDeniedException
208     {
209         MockHttpServletRequest request = new MockHttpServletRequest( );
210         _bean.doRemovePage( request );
211         AdminMessage message = AdminMessageService.getMessage( request );
212         assertNotNull( message );
213         assertEquals( AdminMessage.TYPE_ERROR, message.getType( ) );
214     }
215 
216     public void testDoRemovePageNotANumber( ) throws AccessDeniedException
217     {
218         MockHttpServletRequest request = new MockHttpServletRequest( );
219         request.addParameter( Parameters.PAGE_ID, "foo" );
220         _bean.doRemovePage( request );
221         AdminMessage message = AdminMessageService.getMessage( request );
222         assertNotNull( message );
223         assertEquals( AdminMessage.TYPE_ERROR, message.getType( ) );
224     }
225 
226     public void testDoRemovePageNotExisting( ) throws AccessDeniedException
227     {
228         MockHttpServletRequest request = new MockHttpServletRequest( );
229         request.addParameter( Parameters.PAGE_ID, Integer.toString( 314159265 ) );
230         _bean.doRemovePage( request );
231         AdminMessage message = AdminMessageService.getMessage( request );
232         assertNotNull( message );
233         assertEquals( AdminMessage.TYPE_ERROR, message.getType( ) );
234     }
235 
236     public void testDoRemovePageWithChild( ) throws AccessDeniedException
237     {
238         String childPageName = _randomPageName + "-child";
239         Page childPage = null;
240         IPageService pageService = (IPageService) SpringContextService.getBean( "pageService" );
241         try
242         {
243             childPage = new Page( );
244             childPage.setParentPageId( _page.getId( ) );
245             childPage.setPageTemplateId( PageTemplateHome.getPageTemplatesList( ).get( 0 ).getId( ) );
246             childPage.setName( childPageName );
247             pageService.createPage( childPage );
248             MockHttpServletRequest request = new MockHttpServletRequest( );
249             request.addParameter( Parameters.PAGE_ID, Integer.toString( _page.getId( ) ) );
250             _bean.doRemovePage( request );
251             AdminMessage message = AdminMessageService.getMessage( request );
252             assertNotNull( message );
253             assertEquals( AdminMessage.TYPE_STOP, message.getType( ) );
254             ReferenceList listLanguages = I18nService.getAdminLocales( Locale.FRANCE );
255             for ( ReferenceItem lang : listLanguages )
256             {
257                 assertTrue( message.getText( new Locale( lang.getCode( ) ) ).contains( _randomPageName ) );
258             }
259         }
260         finally
261         {
262             if ( childPage != null )
263             {
264                 try
265                 {
266                     pageService.removePage( childPage.getId( ) );
267                 }
268                 finally
269                 {
270                 }
271             }
272         }
273     }
274 
275     public void testDoRemovePage( ) throws AccessDeniedException
276     {
277         MockHttpServletRequest request = new MockHttpServletRequest( );
278         request.addParameter( Parameters.PAGE_ID, Integer.toString( _page.getId( ) ) );
279         request.addParameter( SecurityTokenService.PARAMETER_TOKEN,
280                 SecurityTokenService.getInstance( ).getToken( request, "jsp/admin/site/DoRemovePage.jsp" ) );
281         _bean.doRemovePage( request );
282         assertFalse( PageHome.checkPageExist( _page.getId( ) ) );
283     }
284 
285     public void testDoRemovePageNoToken( ) throws AccessDeniedException
286     {
287         MockHttpServletRequest request = new MockHttpServletRequest( );
288         request.addParameter( Parameters.PAGE_ID, Integer.toString( _page.getId( ) ) );
289         try
290         {
291             _bean.doRemovePage( request );
292             fail( "Should have thrown" );
293         }
294         catch( AccessDeniedException e )
295         {
296             assertTrue( PageHome.checkPageExist( _page.getId( ) ) );
297         }
298     }
299 
300     public void testDoRemovePageInvalidToken( ) throws AccessDeniedException
301     {
302         MockHttpServletRequest request = new MockHttpServletRequest( );
303         request.addParameter( Parameters.PAGE_ID, Integer.toString( _page.getId( ) ) );
304         request.addParameter( SecurityTokenService.PARAMETER_TOKEN,
305                 SecurityTokenService.getInstance( ).getToken( request, "jsp/admin/site/DoRemovePage.jsp" ) + "b" );
306         try
307         {
308             _bean.doRemovePage( request );
309             fail( "Should have thrown" );
310         }
311         catch( AccessDeniedException e )
312         {
313             assertTrue( PageHome.checkPageExist( _page.getId( ) ) );
314         }
315     }
316 
317     public void testGetAdminPageBlockProperty( ) throws PasswordResetException, AccessDeniedException
318     {
319         MockHttpServletRequest request = new MockHttpServletRequest( );
320         Utils.registerAdminUserWithRigth( request, _adminUser, AdminPageJspBean.RIGHT_MANAGE_ADMIN_SITE );
321         _bean.init( request, AdminPageJspBean.RIGHT_MANAGE_ADMIN_SITE );
322         request.addParameter( "param_block", "2" );
323         String html = _bean.getAdminPage( request );
324         assertNotNull( html );
325     }
326 
327     public void testDoModifyPage( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException
328     {
329         MockHttpServletRequest request = new MockHttpServletRequest( );
330         String descriptionMod = _page.getDescription( ) + "_mod";
331         assertEquals( _randomPageName, _page.getDescription( ) );
332         Map<String, String [ ]> parameters = new HashMap<>( );
333         parameters.put( Parameters.PAGE_ID, new String [ ] {
334                 Integer.toString( _page.getId( ) )
335         } );
336         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
337                 descriptionMod
338         } );
339         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
340                 Integer.toString( _page.getPageTemplateId( ) )
341         } );
342         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
343                 _page.getMetaKeywords( )
344         } );
345         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
346                 _page.getMetaDescription( )
347         } );
348         parameters.put( "node_status", new String [ ] {
349                 Integer.toString( _page.getNodeStatus( ) )
350         } );
351         parameters.put( Parameters.PAGE_NAME, new String [ ] {
352                 _page.getName( )
353         } );
354         parameters.put( Parameters.PARENT_ID, new String [ ] {
355                 Integer.toString( _page.getParentPageId( ) )
356         } );
357         parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
358                 SecurityTokenService.getInstance( ).getToken( request, "admin/site/admin_page_block_property.html" )
359         } );
360         _bean.doModifyPage( new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters ) );
361         AdminMessage message = AdminMessageService.getMessage( request );
362         assertNull( message );
363         Page page = PageHome.findByPrimaryKey( _page.getId( ) );
364         assertEquals( descriptionMod, page.getDescription( ) );
365     }
366 
367     public void testDoModifyPagePageDataError( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException
368     {
369         MockHttpServletRequest request = new MockHttpServletRequest( );
370         Map<String, String [ ]> parameters = new HashMap<>( );
371         parameters.put( Parameters.PAGE_ID, new String [ ] {
372                 Integer.toString( _page.getId( ) )
373         } );
374         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
375                 _page.getDescription( )
376         } );
377         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
378                 Integer.toString( _page.getPageTemplateId( ) )
379         } );
380         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
381                 _page.getMetaKeywords( )
382         } );
383         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
384                 _page.getMetaDescription( )
385         } );
386         parameters.put( "node_status", new String [ ] {
387                 Integer.toString( _page.getNodeStatus( ) )
388         } );
389         // empty page name parameter
390         parameters.put( Parameters.PAGE_NAME, new String [ ] {
391                 ""
392         } );
393         parameters.put( Parameters.PARENT_ID, new String [ ] {
394                 Integer.toString( _page.getParentPageId( ) )
395         } );
396         parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
397                 SecurityTokenService.getInstance( ).getToken( request, "admin/site/admin_page_block_property.html" )
398         } );
399         _bean.doModifyPage( new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters ) );
400         AdminMessage message = AdminMessageService.getMessage( request );
401         assertNotNull( message );
402         assertEquals( AdminMessage.TYPE_STOP, message.getType( ) );
403         Page page = PageHome.findByPrimaryKey( _page.getId( ) );
404         assertEquals( _randomPageName, page.getName( ) );
405     }
406 
407     public void testDoModifyPageInexistentParentPage( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException
408     {
409         int origParentPageId = _page.getParentPageId( );
410         MockHttpServletRequest request = new MockHttpServletRequest( );
411         Map<String, String [ ]> parameters = new HashMap<>( );
412         parameters.put( Parameters.PAGE_ID, new String [ ] {
413                 Integer.toString( _page.getId( ) )
414         } );
415         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
416                 _page.getDescription( )
417         } );
418         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
419                 Integer.toString( _page.getPageTemplateId( ) )
420         } );
421         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
422                 _page.getMetaKeywords( )
423         } );
424         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
425                 _page.getMetaDescription( )
426         } );
427         parameters.put( "node_status", new String [ ] {
428                 Integer.toString( _page.getNodeStatus( ) )
429         } );
430         parameters.put( Parameters.PAGE_NAME, new String [ ] {
431                 _page.getName( )
432         } );
433         parameters.put( Parameters.PARENT_ID, new String [ ] {
434                 "567894535"
435         } );
436         parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
437                 SecurityTokenService.getInstance( ).getToken( request, "admin/site/admin_page_block_property.html" )
438         } );
439         _bean.doModifyPage( new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters ) );
440         AdminMessage message = AdminMessageService.getMessage( request );
441         assertNotNull( message );
442         assertEquals( AdminMessage.TYPE_STOP, message.getType( ) );
443         Page page = PageHome.findByPrimaryKey( _page.getId( ) );
444         assertEquals( origParentPageId, page.getParentPageId( ) );
445     }
446 
447     public void testDoModifyPagePictureError( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException
448     {
449         MockHttpServletRequest request = new MockHttpServletRequest( );
450         Map<String, String [ ]> parameters = new HashMap<>( );
451         parameters.put( Parameters.PAGE_ID, new String [ ] {
452                 Integer.toString( _page.getId( ) )
453         } );
454         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
455                 _page.getDescription( )
456         } );
457         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
458                 Integer.toString( _page.getPageTemplateId( ) )
459         } );
460         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
461                 _page.getMetaKeywords( )
462         } );
463         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
464                 _page.getMetaDescription( )
465         } );
466         parameters.put( "node_status", new String [ ] {
467                 Integer.toString( _page.getNodeStatus( ) )
468         } );
469         parameters.put( Parameters.PAGE_NAME, new String [ ] {
470                 _page.getName( )
471         } );
472         parameters.put( Parameters.PARENT_ID, new String [ ] {
473                 Integer.toString( _page.getParentPageId( ) )
474         } );
475         parameters.put( "update_image", new String [ ] {
476                 "update_image"
477         } );
478         parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
479                 SecurityTokenService.getInstance( ).getToken( request, "admin/site/admin_page_block_property.html" )
480         } );
481         Map<String, List<FileItem>> fileItems = new HashMap<>( );
482         List<FileItem> items = new ArrayList<>( );
483         FileItem fileItem = new DiskFileItemFactory( ).createItem( "image_content", "", true, "" );
484         items.add( fileItem );
485         fileItems.put( "image_content", items );
486         _bean.doModifyPage( new MultipartHttpServletRequest( request, fileItems, parameters ) );
487         AdminMessage message = AdminMessageService.getMessage( request );
488         assertNotNull( message );
489         assertEquals( AdminMessage.TYPE_STOP, message.getType( ) );
490         Page page = PageHome.findByPrimaryKey( _page.getId( ) );
491         assertNull( page.getImageContent( ) );
492         assertNull( page.getMimeType( ) );
493     }
494 
495     public void testDoModifyPageInvalidToken( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException
496     {
497         MockHttpServletRequest request = new MockHttpServletRequest( );
498         String descriptionMod = _page.getDescription( ) + "_mod";
499         assertEquals( _randomPageName, _page.getDescription( ) );
500         Map<String, String [ ]> parameters = new HashMap<>( );
501         parameters.put( Parameters.PAGE_ID, new String [ ] {
502                 Integer.toString( _page.getId( ) )
503         } );
504         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
505                 descriptionMod
506         } );
507         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
508                 Integer.toString( _page.getPageTemplateId( ) )
509         } );
510         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
511                 _page.getMetaKeywords( )
512         } );
513         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
514                 _page.getMetaDescription( )
515         } );
516         parameters.put( "node_status", new String [ ] {
517                 Integer.toString( _page.getNodeStatus( ) )
518         } );
519         parameters.put( Parameters.PAGE_NAME, new String [ ] {
520                 _page.getName( )
521         } );
522         parameters.put( Parameters.PARENT_ID, new String [ ] {
523                 Integer.toString( _page.getParentPageId( ) )
524         } );
525         parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
526                 SecurityTokenService.getInstance( ).getToken( request, "admin/site/admin_page_block_property.html" ) + "b"
527         } );
528         try
529         {
530             _bean.doModifyPage( new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters ) );
531             fail( "Should have thrown" );
532         }
533         catch( AccessDeniedException e )
534         {
535             Page page = PageHome.findByPrimaryKey( _page.getId( ) );
536             assertEquals( _randomPageName, page.getDescription( ) );
537         }
538     }
539 
540     public void testDoModifyPageNoToken( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException
541     {
542         MockHttpServletRequest request = new MockHttpServletRequest( );
543         String descriptionMod = _page.getDescription( ) + "_mod";
544         assertEquals( _randomPageName, _page.getDescription( ) );
545         Map<String, String [ ]> parameters = new HashMap<>( );
546         parameters.put( Parameters.PAGE_ID, new String [ ] {
547                 Integer.toString( _page.getId( ) )
548         } );
549         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
550                 descriptionMod
551         } );
552         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
553                 Integer.toString( _page.getPageTemplateId( ) )
554         } );
555         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
556                 _page.getMetaKeywords( )
557         } );
558         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
559                 _page.getMetaDescription( )
560         } );
561         parameters.put( "node_status", new String [ ] {
562                 Integer.toString( _page.getNodeStatus( ) )
563         } );
564         parameters.put( Parameters.PAGE_NAME, new String [ ] {
565                 _page.getName( )
566         } );
567         parameters.put( Parameters.PARENT_ID, new String [ ] {
568                 Integer.toString( _page.getParentPageId( ) )
569         } );
570         try
571         {
572             _bean.doModifyPage( new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters ) );
573             fail( "Should have thrown" );
574         }
575         catch( AccessDeniedException e )
576         {
577             Page page = PageHome.findByPrimaryKey( _page.getId( ) );
578             assertEquals( _randomPageName, page.getDescription( ) );
579         }
580     }
581 
582     public void testDoModifyPageUpdateDateError( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException
583     {
584         MockHttpServletRequest request = new MockHttpServletRequest( );
585         Map<String, String [ ]> parameters = new HashMap<>( );
586         parameters.put( Parameters.PAGE_ID, new String [ ] {
587                 Integer.toString( _page.getId( ) )
588         } );
589         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
590                 _page.getDescription( )
591         } );
592         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
593                 Integer.toString( _page.getPageTemplateId( ) )
594         } );
595         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
596                 _page.getMetaKeywords( )
597         } );
598         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
599                 _page.getMetaDescription( )
600         } );
601         parameters.put( "node_status", new String [ ] {
602                 Integer.toString( _page.getNodeStatus( ) )
603         } );
604         parameters.put( Parameters.PAGE_NAME, new String [ ] {
605                 _page.getName( )
606         } );
607         parameters.put( Parameters.PARENT_ID, new String [ ] {
608                 Integer.toString( _page.getParentPageId( ) )
609         } );
610         parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
611                 SecurityTokenService.getInstance( ).getToken( request, "admin/site/admin_page_block_property.html" )
612         } );
613         parameters.put( Parameters.PARAMETER_DISPLAY_UPDATE_DATE, new String [ ] {
614                 Boolean.toString( _page.getDisplayDateUpdate( ) )
615         } );
616         parameters.put( Parameters.PARAMETER_ENABLE_MANUAL_UPDATE_DATE, new String [ ] {
617                 Boolean.toString( _page.getIsManualDateUpdate( ) )
618         } );
619         // Missing Update Date value
620         parameters.put( Parameters.PARAMETER_MANUAL_UPDATE_DATE, new String [ ] {
621                 ""
622         } );
623         _bean.doModifyPage( new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters ) );
624         AdminMessage message = AdminMessageService.getMessage( request );
625         assertNotNull( message );
626         assertEquals( AdminMessage.TYPE_STOP, message.getType( ) );
627     }
628 
629     public void testGetAdminPageBlockChildPage( ) throws PasswordResetException, AccessDeniedException
630     {
631         MockHttpServletRequest request = new MockHttpServletRequest( );
632         Utils.registerAdminUserWithRigth( request, _adminUser, AdminPageJspBean.RIGHT_MANAGE_ADMIN_SITE );
633         _bean.init( request, AdminPageJspBean.RIGHT_MANAGE_ADMIN_SITE );
634         request.addParameter( "param_block", "5" );
635         String html = _bean.getAdminPage( request );
636         assertNotNull( html );
637     }
638 
639     public void testDoCreateChildPage( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException, IOException
640     {
641         MockHttpServletRequest request = new MockHttpServletRequest( );
642         Map<String, String [ ]> parameters = new HashMap<>( );
643         parameters.put( Parameters.PAGE_ID, new String [ ] {
644                 Integer.toString( _page.getId( ) )
645         } );
646         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
647                 _page.getDescription( )
648         } );
649         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
650                 Integer.toString( _page.getPageTemplateId( ) )
651         } );
652         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
653                 _page.getMetaKeywords( )
654         } );
655         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
656                 _page.getMetaDescription( )
657         } );
658         parameters.put( "node_status", new String [ ] {
659                 Integer.toString( _page.getNodeStatus( ) )
660         } );
661         parameters.put( Parameters.PAGE_NAME, new String [ ] {
662                 _page.getName( ) + "_child"
663         } );
664         parameters.put( Parameters.PARENT_ID, new String [ ] {
665                 Integer.toString( _page.getParentPageId( ) )
666         } );
667         parameters.put( Parameters.PARAMETER_DISPLAY_UPDATE_DATE, new String [ ] {
668                 Boolean.toString( _page.getDisplayDateUpdate( ) )
669         } );
670         parameters.put( Parameters.PARAMETER_ENABLE_MANUAL_UPDATE_DATE, new String [ ] {
671                 Boolean.toString( _page.getIsManualDateUpdate( ) )
672         } );
673         parameters.put( Parameters.PARAMETER_MANUAL_UPDATE_DATE, new String [ ] {
674                 "01/01/2017"
675         } );
676         parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
677                 SecurityTokenService.getInstance( ).getToken( request, "admin/site/admin_page_block_childpage.html" )
678         } );
679 
680         Collection<Page> children = PageHome.getChildPages( _page.getId( ) );
681         assertNotNull( children );
682         assertTrue( children.isEmpty( ) );
683 
684         Map<String, List<FileItem>> fileItems = new HashMap<>( );
685         List<FileItem> listItems = new ArrayList<>( );
686         FileItem pageImageFile = new DiskFileItemFactory( ).createItem( "image_content", "", false, "" );
687         pageImageFile.getOutputStream( ).write( new byte [ 1] );
688         listItems.add( pageImageFile );
689         fileItems.put( "image_content", listItems );
690         _bean.doCreateChildPage( new MultipartHttpServletRequest( request, fileItems, parameters ) );
691         AdminMessage message = AdminMessageService.getMessage( request );
692         assertNull( message );
693         children = PageHome.getChildPages( _page.getId( ) );
694         assertNotNull( children );
695         assertFalse( children.isEmpty( ) );
696         assertTrue( children.stream( ).allMatch( page -> page.getParentPageId( ) == _page.getId( ) && page.getName( ).equals( _page.getName( ) + "_child" ) ) );
697     }
698 
699     public void testDoCreateChildPageInvalidToken( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException, IOException
700     {
701         MockHttpServletRequest request = new MockHttpServletRequest( );
702         Map<String, String [ ]> parameters = new HashMap<>( );
703         parameters.put( Parameters.PAGE_ID, new String [ ] {
704                 Integer.toString( _page.getId( ) )
705         } );
706         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
707                 _page.getDescription( )
708         } );
709         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
710                 Integer.toString( _page.getPageTemplateId( ) )
711         } );
712         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
713                 _page.getMetaKeywords( )
714         } );
715         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
716                 _page.getMetaDescription( )
717         } );
718         parameters.put( "node_status", new String [ ] {
719                 Integer.toString( _page.getNodeStatus( ) )
720         } );
721         parameters.put( Parameters.PAGE_NAME, new String [ ] {
722                 _page.getName( ) + "_child"
723         } );
724         parameters.put( Parameters.PARENT_ID, new String [ ] {
725                 Integer.toString( _page.getParentPageId( ) )
726         } );
727         parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
728                 SecurityTokenService.getInstance( ).getToken( request, "admin/site/admin_page_block_childpage.html" ) + "b"
729         } );
730         Collection<Page> children = PageHome.getChildPages( _page.getId( ) );
731         assertNotNull( children );
732         assertTrue( children.isEmpty( ) );
733 
734         Map<String, List<FileItem>> fileItems = new HashMap<>( );
735         List<FileItem> listItems = new ArrayList<>( );
736         FileItem pageImageFile = new DiskFileItemFactory( ).createItem( "image_content", "", false, "" );
737         pageImageFile.getOutputStream( ).write( new byte [ 1] );
738         listItems.add( pageImageFile );
739         fileItems.put( "image_content", listItems );
740         try
741         {
742             _bean.doCreateChildPage( new MultipartHttpServletRequest( request, fileItems, parameters ) );
743             fail( "Should have thrown" );
744         }
745         catch( AccessDeniedException e )
746         {
747             children = PageHome.getChildPages( _page.getId( ) );
748             assertNotNull( children );
749             assertTrue( children.isEmpty( ) );
750         }
751     }
752 
753     public void testDoCreateChildPageNoToken( ) throws AccessDeniedException, SizeLimitExceededException, FileUploadException, IOException
754     {
755         MockHttpServletRequest request = new MockHttpServletRequest( );
756         Map<String, String [ ]> parameters = new HashMap<>( );
757         parameters.put( Parameters.PAGE_ID, new String [ ] {
758                 Integer.toString( _page.getId( ) )
759         } );
760         parameters.put( Parameters.PAGE_DESCRIPTION, new String [ ] {
761                 _page.getDescription( )
762         } );
763         parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
764                 Integer.toString( _page.getPageTemplateId( ) )
765         } );
766         parameters.put( Parameters.META_KEYWORDS, new String [ ] {
767                 _page.getMetaKeywords( )
768         } );
769         parameters.put( Parameters.META_DESCRIPTION, new String [ ] {
770                 _page.getMetaDescription( )
771         } );
772         parameters.put( "node_status", new String [ ] {
773                 Integer.toString( _page.getNodeStatus( ) )
774         } );
775         parameters.put( Parameters.PAGE_NAME, new String [ ] {
776                 _page.getName( ) + "_child"
777         } );
778         parameters.put( Parameters.PARENT_ID, new String [ ] {
779                 Integer.toString( _page.getParentPageId( ) )
780         } );
781         Collection<Page> children = PageHome.getChildPages( _page.getId( ) );
782         assertNotNull( children );
783         assertTrue( children.isEmpty( ) );
784 
785         Map<String, List<FileItem>> fileItems = new HashMap<>( );
786         List<FileItem> listItems = new ArrayList<>( );
787         FileItem pageImageFile = new DiskFileItemFactory( ).createItem( "image_content", "", false, "" );
788         pageImageFile.getOutputStream( ).write( new byte [ 1] );
789         listItems.add( pageImageFile );
790         fileItems.put( "image_content", listItems );
791         try
792         {
793             _bean.doCreateChildPage( new MultipartHttpServletRequest( request, fileItems, parameters ) );
794             fail( "Should have thrown" );
795         }
796         catch( AccessDeniedException e )
797         {
798             children = PageHome.getChildPages( _page.getId( ) );
799             assertNotNull( children );
800             assertTrue( children.isEmpty( ) );
801         }
802     }
803 }