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.style;
35
36 import java.io.IOException;
37 import java.math.BigInteger;
38 import java.security.SecureRandom;
39 import java.util.ArrayList;
40 import java.util.Collections;
41 import java.util.HashMap;
42 import java.util.List;
43 import java.util.Map;
44 import java.util.Random;
45
46 import org.apache.commons.fileupload.FileItem;
47 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
48 import org.apache.commons.lang3.StringUtils;
49 import org.springframework.mock.web.MockHttpServletRequest;
50
51 import fr.paris.lutece.portal.business.style.PageTemplate;
52 import fr.paris.lutece.portal.business.style.PageTemplateHome;
53 import fr.paris.lutece.portal.business.user.AdminUser;
54 import fr.paris.lutece.portal.service.admin.AccessDeniedException;
55 import fr.paris.lutece.portal.service.message.AdminMessage;
56 import fr.paris.lutece.portal.service.message.AdminMessageService;
57 import fr.paris.lutece.portal.service.security.SecurityTokenService;
58 import fr.paris.lutece.portal.web.constants.Parameters;
59 import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
60 import fr.paris.lutece.test.LuteceTestCase;
61 import fr.paris.lutece.test.Utils;
62
63
64
65
66
67 public class PageTemplatesJspBeanTest extends LuteceTestCase
68 {
69 private static final String TEST_PAGE_TEMPLATE_ID = "1";
70 private MockHttpServletRequest request;
71 private PageTemplatesJspBean instance;
72
73 @Override
74 protected void setUp( ) throws Exception
75 {
76 super.setUp( );
77 request = new MockHttpServletRequest( );
78 Utils.registerAdminUserWithRigth( request, new AdminUser( ), PageTemplatesJspBean.RIGHT_MANAGE_PAGE_TEMPLATES );
79 instance = new PageTemplatesJspBean( );
80 instance.init( request, PageTemplatesJspBean.RIGHT_MANAGE_PAGE_TEMPLATES );
81 }
82
83
84
85
86 public void testGetManagePageTemplate( ) throws AccessDeniedException
87 {
88 assertTrue( StringUtils.isNotEmpty( instance.getManagePageTemplate( request ) ) );
89 }
90
91
92
93
94 public void testGetCreatePageTemplate( ) throws AccessDeniedException
95 {
96 assertTrue( StringUtils.isNotEmpty( instance.getCreatePageTemplate( request ) ) );
97 }
98
99
100
101
102
103
104
105 public void testDoCreatePageTemplate( ) throws AccessDeniedException, IOException
106 {
107 final String desc = getRandomName( );
108 Map<String, String [ ]> parameters = new HashMap<>( );
109 parameters.put( Parameters.PAGE_TEMPLATE_DESCRIPTION, new String [ ] {
110 desc
111 } );
112 parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
113 SecurityTokenService.getInstance( ).getToken( request, "admin/style/create_page_template.html" )
114 } );
115 DiskFileItemFactory fileItemFactory = new DiskFileItemFactory( );
116 Map<String, List<FileItem>> files = new HashMap<>( );
117 List<FileItem> pageTemplateFiles = new ArrayList<>( );
118 FileItem pageTemplateFile = fileItemFactory.createItem( "page_template_file", "text/html", false, "junit.html" );
119 pageTemplateFile.getOutputStream( ).write( new byte [ 1] );
120 pageTemplateFiles.add( pageTemplateFile );
121 files.put( "page_template_file", pageTemplateFiles );
122 List<FileItem> pageTemplatePictures = new ArrayList<>( );
123 FileItem pageTemplatePicture = fileItemFactory.createItem( "page_template_picture", "image/jpg", false, "junit.jpg" );
124 pageTemplatePicture.getOutputStream( ).write( new byte [ 1] );
125 pageTemplatePictures.add( pageTemplatePicture );
126 files.put( "page_template_picture", pageTemplatePictures );
127 MultipartHttpServletRequest multipartRequest = new MultipartHttpServletRequest( request, files, parameters );
128 try
129 {
130 instance.doCreatePageTemplate( multipartRequest );
131 assertTrue( PageTemplateHome.getPageTemplatesList( ).stream( ).anyMatch( t -> t.getDescription( ).equals( desc ) ) );
132 }
133 finally
134 {
135 PageTemplateHome.getPageTemplatesList( ).stream( ).filter( t -> t.getDescription( ).equals( desc ) )
136 .forEach( t -> PageTemplateHome.remove( t.getId( ) ) );
137 }
138 }
139
140 public void testDoCreatePageTemplateInvalidToken( ) throws AccessDeniedException, IOException
141 {
142 final String desc = getRandomName( );
143 Map<String, String [ ]> parameters = new HashMap<>( );
144 parameters.put( Parameters.PAGE_TEMPLATE_DESCRIPTION, new String [ ] {
145 desc
146 } );
147 parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
148 SecurityTokenService.getInstance( ).getToken( request, "admin/style/create_page_template.html" ) + "b"
149 } );
150 DiskFileItemFactory fileItemFactory = new DiskFileItemFactory( );
151 Map<String, List<FileItem>> files = new HashMap<>( );
152 List<FileItem> pageTemplateFiles = new ArrayList<>( );
153 FileItem pageTemplateFile = fileItemFactory.createItem( "page_template_file", "text/html", false, "junit.html" );
154 pageTemplateFile.getOutputStream( ).write( new byte [ 1] );
155 pageTemplateFiles.add( pageTemplateFile );
156 files.put( "page_template_file", pageTemplateFiles );
157 List<FileItem> pageTemplatePictures = new ArrayList<>( );
158 FileItem pageTemplatePicture = fileItemFactory.createItem( "page_template_picture", "image/jpg", false, "junit.jpg" );
159 pageTemplatePicture.getOutputStream( ).write( new byte [ 1] );
160 pageTemplatePictures.add( pageTemplatePicture );
161 files.put( "page_template_picture", pageTemplatePictures );
162 MultipartHttpServletRequest multipartRequest = new MultipartHttpServletRequest( request, files, parameters );
163 try
164 {
165 instance.doCreatePageTemplate( multipartRequest );
166 fail( "Should have thrown" );
167 }
168 catch( AccessDeniedException e )
169 {
170 assertFalse( PageTemplateHome.getPageTemplatesList( ).stream( ).anyMatch( t -> t.getDescription( ).equals( desc ) ) );
171 }
172 finally
173 {
174 PageTemplateHome.getPageTemplatesList( ).stream( ).filter( t -> t.getDescription( ).equals( desc ) )
175 .forEach( t -> PageTemplateHome.remove( t.getId( ) ) );
176 }
177 }
178
179 public void testDoCreatePageTemplateNoToken( ) throws AccessDeniedException, IOException
180 {
181 final String desc = getRandomName( );
182 Map<String, String [ ]> parameters = new HashMap<>( );
183 parameters.put( Parameters.PAGE_TEMPLATE_DESCRIPTION, new String [ ] {
184 desc
185 } );
186 DiskFileItemFactory fileItemFactory = new DiskFileItemFactory( );
187 Map<String, List<FileItem>> files = new HashMap<>( );
188 List<FileItem> pageTemplateFiles = new ArrayList<>( );
189 FileItem pageTemplateFile = fileItemFactory.createItem( "page_template_file", "text/html", false, "junit.html" );
190 pageTemplateFile.getOutputStream( ).write( new byte [ 1] );
191 pageTemplateFiles.add( pageTemplateFile );
192 files.put( "page_template_file", pageTemplateFiles );
193 List<FileItem> pageTemplatePictures = new ArrayList<>( );
194 FileItem pageTemplatePicture = fileItemFactory.createItem( "page_template_picture", "image/jpg", false, "junit.jpg" );
195 pageTemplatePicture.getOutputStream( ).write( new byte [ 1] );
196 pageTemplatePictures.add( pageTemplatePicture );
197 files.put( "page_template_picture", pageTemplatePictures );
198 MultipartHttpServletRequest multipartRequest = new MultipartHttpServletRequest( request, files, parameters );
199 try
200 {
201 instance.doCreatePageTemplate( multipartRequest );
202 fail( "Should have thrown" );
203 }
204 catch( AccessDeniedException e )
205 {
206 assertFalse( PageTemplateHome.getPageTemplatesList( ).stream( ).anyMatch( t -> t.getDescription( ).equals( desc ) ) );
207 }
208 finally
209 {
210 PageTemplateHome.getPageTemplatesList( ).stream( ).filter( t -> t.getDescription( ).equals( desc ) )
211 .forEach( t -> PageTemplateHome.remove( t.getId( ) ) );
212 }
213 }
214
215
216
217
218 public void testGetModifyPageTemplate( ) throws AccessDeniedException
219 {
220 request.addParameter( Parameters.PAGE_TEMPLATE_ID, TEST_PAGE_TEMPLATE_ID );
221 assertTrue( StringUtils.isNotEmpty( instance.getModifyPageTemplate( request ) ) );
222 }
223
224
225
226
227
228
229 public void testDoModifyPageTemplate( ) throws AccessDeniedException
230 {
231 final String desc = getRandomName( );
232 PageTemplate pageTemplate = new PageTemplate( );
233 pageTemplate.setDescription( desc );
234 PageTemplateHome.create( pageTemplate );
235
236 Map<String, String [ ]> parameters = new HashMap<>( );
237 parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
238 Integer.toString( pageTemplate.getId( ) )
239 } );
240 parameters.put( Parameters.PAGE_TEMPLATE_DESCRIPTION, new String [ ] {
241 desc + "mod"
242 } );
243 parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
244 SecurityTokenService.getInstance( ).getToken( request, "admin/style/modify_page_template.html" )
245 } );
246 MultipartHttpServletRequest multipartRequest = new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters );
247 try
248 {
249 assertEquals( desc, PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ).getDescription( ) );
250 instance.doModifyPageTemplate( multipartRequest );
251 assertEquals( desc + "mod", PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ).getDescription( ) );
252 }
253 finally
254 {
255 PageTemplateHome.remove( pageTemplate.getId( ) );
256 }
257 }
258
259 public void testDoModifyPageTemplateInvalidToken( ) throws AccessDeniedException
260 {
261 final String desc = getRandomName( );
262 PageTemplate pageTemplate = new PageTemplate( );
263 pageTemplate.setDescription( desc );
264 PageTemplateHome.create( pageTemplate );
265
266 Map<String, String [ ]> parameters = new HashMap<>( );
267 parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
268 Integer.toString( pageTemplate.getId( ) )
269 } );
270 parameters.put( Parameters.PAGE_TEMPLATE_DESCRIPTION, new String [ ] {
271 desc + "mod"
272 } );
273 parameters.put( SecurityTokenService.PARAMETER_TOKEN, new String [ ] {
274 SecurityTokenService.getInstance( ).getToken( request, "admin/style/modify_page_template.html" ) + "b"
275 } );
276 MultipartHttpServletRequest multipartRequest = new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters );
277 try
278 {
279 assertEquals( desc, PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ).getDescription( ) );
280 instance.doModifyPageTemplate( multipartRequest );
281 fail( "Should have thrown" );
282 }
283 catch( AccessDeniedException e )
284 {
285 assertEquals( desc, PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ).getDescription( ) );
286 }
287 finally
288 {
289 PageTemplateHome.remove( pageTemplate.getId( ) );
290 }
291 }
292
293 public void testDoModifyPageTemplateNoToken( ) throws AccessDeniedException
294 {
295 final String desc = getRandomName( );
296 PageTemplate pageTemplate = new PageTemplate( );
297 pageTemplate.setDescription( desc );
298 PageTemplateHome.create( pageTemplate );
299
300 Map<String, String [ ]> parameters = new HashMap<>( );
301 parameters.put( Parameters.PAGE_TEMPLATE_ID, new String [ ] {
302 Integer.toString( pageTemplate.getId( ) )
303 } );
304 parameters.put( Parameters.PAGE_TEMPLATE_DESCRIPTION, new String [ ] {
305 desc + "mod"
306 } );
307 MultipartHttpServletRequest multipartRequest = new MultipartHttpServletRequest( request, Collections.emptyMap( ), parameters );
308 try
309 {
310 assertEquals( desc, PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ).getDescription( ) );
311 instance.doModifyPageTemplate( multipartRequest );
312 fail( "Should have thrown" );
313 }
314 catch( AccessDeniedException e )
315 {
316 assertEquals( desc, PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ).getDescription( ) );
317 }
318 finally
319 {
320 PageTemplateHome.remove( pageTemplate.getId( ) );
321 }
322 }
323
324 public void testGetConfirmRemovePageTemplate( )
325 {
326 request.addParameter( Parameters.PAGE_TEMPLATE_ID, TEST_PAGE_TEMPLATE_ID );
327 instance.getConfirmRemovePageTemplate( request );
328 AdminMessage message = AdminMessageService.getMessage( request );
329 assertNotNull( message );
330 if ( message.getRequestParameters( ) != null )
331 {
332 assertNotNull( message.getRequestParameters( ).get( SecurityTokenService.PARAMETER_TOKEN ) );
333 assertEquals( TEST_PAGE_TEMPLATE_ID, message.getRequestParameters( ).get( Parameters.PAGE_TEMPLATE_ID ) );
334 }
335 }
336
337 public void testDoRemovePageTemplate( ) throws AccessDeniedException
338 {
339 final String desc = getRandomName( );
340 PageTemplate pageTemplate = new PageTemplate( );
341 pageTemplate.setDescription( desc );
342 pageTemplate.setFile( "junit" );
343 pageTemplate.setPicture( "junit" );
344 PageTemplateHome.create( pageTemplate );
345
346 request.addParameter( Parameters.PAGE_TEMPLATE_ID, Integer.toString( pageTemplate.getId( ) ) );
347 request.addParameter( SecurityTokenService.PARAMETER_TOKEN,
348 SecurityTokenService.getInstance( ).getToken( request, "jsp/admin/style/DoRemovePageTemplate.jsp" ) );
349 try
350 {
351 instance.doRemovePageTemplate( request );
352 assertNull( PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ) );
353 }
354 finally
355 {
356 PageTemplateHome.remove( pageTemplate.getId( ) );
357 }
358 }
359
360 public void testDoRemovePageTemplateInvalidToken( ) throws AccessDeniedException
361 {
362 final String desc = getRandomName( );
363 PageTemplate pageTemplate = new PageTemplate( );
364 pageTemplate.setDescription( desc );
365 pageTemplate.setFile( "junit" );
366 pageTemplate.setPicture( "junit" );
367 PageTemplateHome.create( pageTemplate );
368
369 request.addParameter( Parameters.PAGE_TEMPLATE_ID, Integer.toString( pageTemplate.getId( ) ) );
370 request.addParameter( SecurityTokenService.PARAMETER_TOKEN,
371 SecurityTokenService.getInstance( ).getToken( request, "jsp/admin/style/DoRemovePageTemplate.jsp" ) + "b" );
372 try
373 {
374 instance.doRemovePageTemplate( request );
375 fail( "Should have thrown" );
376 }
377 catch( AccessDeniedException e )
378 {
379 assertNotNull( PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ) );
380 }
381 finally
382 {
383 PageTemplateHome.remove( pageTemplate.getId( ) );
384 }
385 }
386
387 public void testDoRemovePageTemplateNoToken( ) throws AccessDeniedException
388 {
389 final String desc = getRandomName( );
390 PageTemplate pageTemplate = new PageTemplate( );
391 pageTemplate.setDescription( desc );
392 pageTemplate.setFile( "junit" );
393 pageTemplate.setPicture( "junit" );
394 PageTemplateHome.create( pageTemplate );
395
396 request.addParameter( Parameters.PAGE_TEMPLATE_ID, Integer.toString( pageTemplate.getId( ) ) );
397 try
398 {
399 instance.doRemovePageTemplate( request );
400 fail( "Should have thrown" );
401 }
402 catch( AccessDeniedException e )
403 {
404 assertNotNull( PageTemplateHome.findByPrimaryKey( pageTemplate.getId( ) ) );
405 }
406 finally
407 {
408 PageTemplateHome.remove( pageTemplate.getId( ) );
409 }
410 }
411
412 private String getRandomName( )
413 {
414 Random rand = new SecureRandom( );
415 BigInteger bigInt = new BigInteger( 128, rand );
416 return "junit" + bigInt.toString( 36 );
417 }
418 }