1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
149
150
151
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
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
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 }