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.features;
35  
36  import java.math.BigInteger;
37  import java.security.SecureRandom;
38  import java.util.Random;
39  
40  import org.junit.Test;
41  import org.springframework.mock.web.MockHttpServletRequest;
42  
43  import fr.paris.lutece.portal.business.right.FeatureGroup;
44  import fr.paris.lutece.portal.business.right.FeatureGroupHome;
45  import fr.paris.lutece.portal.business.right.Right;
46  import fr.paris.lutece.portal.business.right.RightHome;
47  import fr.paris.lutece.portal.business.user.AdminUser;
48  import fr.paris.lutece.portal.service.admin.AccessDeniedException;
49  import fr.paris.lutece.portal.service.admin.PasswordResetException;
50  import fr.paris.lutece.portal.service.message.AdminMessage;
51  import fr.paris.lutece.portal.service.message.AdminMessageService;
52  import fr.paris.lutece.portal.service.security.SecurityTokenService;
53  import fr.paris.lutece.test.LuteceTestCase;
54  import fr.paris.lutece.test.Utils;
55  
56  public class ExternalFeaturesJspBeanTest extends LuteceTestCase
57  {
58  
59      private static final String PARAMETER_ID_EXTERNAL_FEAUTRE = "external_feature_id";
60      private static final String TEST_EXTERNAL_FEATURE_ID = "CORE_TEST";
61  
62      // To insert moke external feature
63      private static final String RIGHT_ID = "CORE_TEST";
64      private static final String NAMEKEY = "nameKeyTest";
65      private static final String DESCRIPTIONKEY = "descriptionKeyTest";
66      private static final int LEVEL = 0;
67      private static final String URL = "urlTest";
68      private static final String PLUGINNAME = "pluginNameTest";
69      private static final String FEATUREGROUP = "featureGroupTest";
70      private static final String ICONURL = "iconUrlTest";
71      private static final boolean IS_EXTERNAL_FEATURE = true;
72      private Right _right;
73      private FeatureGroup _featureGroup;
74  
75      @Override
76      protected void setUp( ) throws Exception
77      {
78          super.setUp( );
79          _right = new Right( );
80          _right.setId( RIGHT_ID );
81          _right.setNameKey( NAMEKEY );
82          _right.setDescriptionKey( DESCRIPTIONKEY );
83          _right.setLevel( LEVEL );
84          _right.setUrl( URL );
85          _right.setPluginName( PLUGINNAME );
86          _right.setFeatureGroup( FEATUREGROUP );
87          _right.setIconUrl( ICONURL );
88          _right.setExternalFeature( IS_EXTERNAL_FEATURE );
89          RightHome.create( _right );
90  
91          _featureGroup = new FeatureGroup( );
92          _featureGroup.setId( FEATUREGROUP );
93          _featureGroup.setLabelKey( FEATUREGROUP );
94          _featureGroup.setDescriptionKey( FEATUREGROUP );
95          FeatureGroupHome.create( _featureGroup );
96      }
97  
98      @Override
99      protected void tearDown( ) throws Exception
100     {
101         RightHome.remove( RIGHT_ID );
102         FeatureGroupHome.remove( FEATUREGROUP );
103         super.tearDown( );
104     }
105 
106     /**
107      * Test of getCreateExternalFeature method, of class ExternalFeaturesJspBean.
108      */
109     @Test
110     public void testGetCreateExternalFeature( ) throws AccessDeniedException
111     {
112         MockHttpServletRequest request = new MockHttpServletRequest( );
113         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
114 
115         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
116         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
117         assertNotNull( instance.getCreateExternalFeature( request ) );
118     }
119 
120     /**
121      * Test of getModifyExternalFeature method, of class ExternalFeaturesJspBean.
122      */
123     @Test
124     public void testGetModifyExternalFeature( ) throws AccessDeniedException
125     {
126         MockHttpServletRequest request = new MockHttpServletRequest( );
127         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
128         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
129 
130         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
131         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
132         assertNotNull( instance.getModifyExternalFeature( request ) );
133     }
134 
135     /**
136      * Test of doModifyExternalFeature method, of class ExternalFeaturesJspBean.
137      * 
138      * @throws AccessDeniedException
139      */
140     @Test
141     public void testDoModifyExternalFeature( ) throws AccessDeniedException
142     {
143         MockHttpServletRequest request = new MockHttpServletRequest( );
144         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
145         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
146 
147         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
148         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
149         String strRandom = getRandomName( );
150         request.setParameter( "id", _right.getId( ) );
151         request.setParameter( "nameKey", strRandom );
152         request.setParameter( "descriptionKey", strRandom );
153         request.setParameter( "level_id", "0" );
154         request.setParameter( "url", strRandom );
155         request.setParameter( "pluginName", strRandom );
156         request.setParameter( "feature_group_id", FeatureGroupHome.getFeatureGroupsList( ).get( 0 ).getId( ) );
157         request.setParameter( "iconUrl", strRandom );
158         request.setParameter( "externalFeature", "false" );
159         request.setParameter( "documentationUrl", strRandom );
160 
161         instance.getModifyExternalFeature( request );
162         request.setParameter( SecurityTokenService.PARAMETER_TOKEN,
163                 SecurityTokenService.getInstance( ).getToken( request, "admin/features/modify_external_feature.html" ) );
164         instance.doModifyExternalFeature( request );
165 
166         Right right = RightHome.findByPrimaryKey( _right.getId( ) );
167         assertNotNull( right );
168         assertEquals( strRandom, right.getNameKey( ) );
169         assertEquals( strRandom, right.getDescriptionKey( ) );
170         assertEquals( 0, right.getLevel( ) );
171         assertEquals( strRandom, right.getUrl( ) );
172         assertEquals( strRandom, right.getPluginName( ) );
173         assertEquals( FeatureGroupHome.getFeatureGroupsList( ).get( 0 ).getId( ), right.getFeatureGroup( ) );
174         assertEquals( strRandom, right.getIconUrl( ) );
175         assertTrue( right.isExternalFeature( ) );
176         assertEquals( strRandom, right.getDocumentationUrl( ) );
177     }
178 
179     public void testDoModifyExternalFeatureInvalidToken( ) throws AccessDeniedException
180     {
181         MockHttpServletRequest request = new MockHttpServletRequest( );
182         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
183         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
184 
185         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
186         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
187         String strRandom = getRandomName( );
188         request.setParameter( "id", _right.getId( ) );
189         request.setParameter( "nameKey", strRandom );
190         request.setParameter( "descriptionKey", strRandom );
191         request.setParameter( "level_id", "0" );
192         request.setParameter( "url", strRandom );
193         request.setParameter( "pluginName", strRandom );
194         request.setParameter( "feature_group_id", FeatureGroupHome.getFeatureGroupsList( ).get( 0 ).getId( ) );
195         request.setParameter( "iconUrl", strRandom );
196         request.setParameter( "externalFeature", "false" );
197         request.setParameter( "documentationUrl", strRandom );
198 
199         instance.getModifyExternalFeature( request );
200         request.setParameter( SecurityTokenService.PARAMETER_TOKEN,
201                 SecurityTokenService.getInstance( ).getToken( request, "admin/features/modify_external_feature.html" ) + "b" );
202         try
203         {
204             instance.doModifyExternalFeature( request );
205             fail( "Should have thrown" );
206         }
207         catch( AccessDeniedException e )
208         {
209             Right right = RightHome.findByPrimaryKey( _right.getId( ) );
210             assertNotNull( right );
211             assertEquals( _right.getNameKey( ), right.getNameKey( ) );
212             assertEquals( _right.getDescriptionKey( ), right.getDescriptionKey( ) );
213             assertEquals( _right.getLevel( ), right.getLevel( ) );
214             assertEquals( _right.getUrl( ), right.getUrl( ) );
215             assertEquals( _right.getPluginName( ), right.getPluginName( ) );
216             assertEquals( _right.getFeatureGroup( ), right.getFeatureGroup( ) );
217             assertEquals( _right.getIconUrl( ), right.getIconUrl( ) );
218             assertTrue( right.isExternalFeature( ) );
219             assertEquals( _right.getDocumentationUrl( ), right.getDocumentationUrl( ) );
220         }
221     }
222 
223     public void testDoModifyExternalFeatureNoToken( ) throws AccessDeniedException
224     {
225         MockHttpServletRequest request = new MockHttpServletRequest( );
226         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
227         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
228 
229         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
230         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
231         String strRandom = getRandomName( );
232         request.setParameter( "id", _right.getId( ) );
233         request.setParameter( "nameKey", strRandom );
234         request.setParameter( "descriptionKey", strRandom );
235         request.setParameter( "level_id", "0" );
236         request.setParameter( "url", strRandom );
237         request.setParameter( "pluginName", strRandom );
238         request.setParameter( "feature_group_id", FeatureGroupHome.getFeatureGroupsList( ).get( 0 ).getId( ) );
239         request.setParameter( "iconUrl", strRandom );
240         request.setParameter( "externalFeature", "false" );
241         request.setParameter( "documentationUrl", strRandom );
242 
243         instance.getModifyExternalFeature( request );
244 
245         try
246         {
247             instance.doModifyExternalFeature( request );
248             fail( "Should have thrown" );
249         }
250         catch( AccessDeniedException e )
251         {
252             Right right = RightHome.findByPrimaryKey( _right.getId( ) );
253             assertNotNull( right );
254             assertEquals( _right.getNameKey( ), right.getNameKey( ) );
255             assertEquals( _right.getDescriptionKey( ), right.getDescriptionKey( ) );
256             assertEquals( _right.getLevel( ), right.getLevel( ) );
257             assertEquals( _right.getUrl( ), right.getUrl( ) );
258             assertEquals( _right.getPluginName( ), right.getPluginName( ) );
259             assertEquals( _right.getFeatureGroup( ), right.getFeatureGroup( ) );
260             assertEquals( _right.getIconUrl( ), right.getIconUrl( ) );
261             assertTrue( right.isExternalFeature( ) );
262             assertEquals( _right.getDocumentationUrl( ), right.getDocumentationUrl( ) );
263         }
264     }
265 
266     /**
267      * Test of doCreateExternalFeature method, of class ExternalFeaturesJspBean.
268      * 
269      * @throws AccessDeniedException
270      * @throws PasswordResetException
271      */
272     @Test
273     public void testDoCreateExternalFeature( ) throws PasswordResetException, AccessDeniedException
274     {
275         MockHttpServletRequest request = new MockHttpServletRequest( );
276         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
277         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
278 
279         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
280         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
281         String strRandom = getRandomName( );
282         request.setParameter( "id", strRandom );
283         request.setParameter( "nameKey", strRandom );
284         request.setParameter( "descriptionKey", strRandom );
285         request.setParameter( "level_id", "0" );
286         request.setParameter( "url", strRandom );
287         request.setParameter( "pluginName", strRandom );
288         request.setParameter( "feature_group_id", FeatureGroupHome.getFeatureGroupsList( ).get( 0 ).getId( ) );
289         request.setParameter( "iconUrl", strRandom );
290         request.setParameter( "externalFeature", "false" );
291         request.setParameter( "documentationUrl", strRandom );
292         request.setParameter( SecurityTokenService.PARAMETER_TOKEN,
293                 SecurityTokenService.getInstance( ).getToken( request, "admin/features/create_external_feature.html" ) );
294 
295         instance.doCreateExternalFeature( request );
296 
297         try
298         {
299             Right right = RightHome.findByPrimaryKey( strRandom );
300             assertNotNull( right );
301             assertEquals( strRandom, right.getNameKey( ) );
302             assertEquals( strRandom, right.getDescriptionKey( ) );
303             assertEquals( 0, right.getLevel( ) );
304             assertEquals( strRandom, right.getUrl( ) );
305             assertEquals( strRandom, right.getPluginName( ) );
306             assertEquals( FeatureGroupHome.getFeatureGroupsList( ).get( 0 ).getId( ), right.getFeatureGroup( ) );
307             assertEquals( strRandom, right.getIconUrl( ) );
308             assertTrue( right.isExternalFeature( ) );
309             assertEquals( strRandom, right.getDocumentationUrl( ) );
310         }
311         finally
312         {
313             RightHome.remove( strRandom );
314         }
315     }
316 
317     private String getRandomName( )
318     {
319         Random rand = new SecureRandom( );
320         BigInteger bigInt = new BigInteger( 128, rand );
321         return "junit" + bigInt.toString( 36 );
322     }
323 
324     public void testDoCreateExternalFeatureInvalidToken( ) throws PasswordResetException, AccessDeniedException
325     {
326         MockHttpServletRequest request = new MockHttpServletRequest( );
327         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
328         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
329 
330         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
331         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
332         String strRandom = getRandomName( );
333         request.setParameter( "id", strRandom );
334         request.setParameter( "nameKey", strRandom );
335         request.setParameter( "descriptionKey", strRandom );
336         request.setParameter( "level_id", "0" );
337         request.setParameter( "url", strRandom );
338         request.setParameter( "pluginName", strRandom );
339         request.setParameter( "feature_group_id", FeatureGroupHome.getFeatureGroupsList( ).get( 0 ).getId( ) );
340         request.setParameter( "iconUrl", strRandom );
341         request.setParameter( "externalFeature", "false" );
342         request.setParameter( "documentationUrl", strRandom );
343         request.setParameter( SecurityTokenService.PARAMETER_TOKEN,
344                 SecurityTokenService.getInstance( ).getToken( request, "admin/features/create_external_feature.html" ) + "b" );
345 
346         try
347         {
348             instance.doCreateExternalFeature( request );
349             fail( "Should have thrown" );
350         }
351         catch( AccessDeniedException e )
352         {
353             Right right = RightHome.findByPrimaryKey( strRandom );
354             assertNull( right );
355         }
356         finally
357         {
358             RightHome.remove( strRandom );
359         }
360     }
361 
362     public void testDoCreateExternalFeatureNoToken( ) throws PasswordResetException, AccessDeniedException
363     {
364         MockHttpServletRequest request = new MockHttpServletRequest( );
365         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
366         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
367 
368         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
369         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
370         String strRandom = getRandomName( );
371         request.setParameter( "id", strRandom );
372         request.setParameter( "nameKey", strRandom );
373         request.setParameter( "descriptionKey", strRandom );
374         request.setParameter( "level_id", "0" );
375         request.setParameter( "url", strRandom );
376         request.setParameter( "pluginName", strRandom );
377         request.setParameter( "feature_group_id", FeatureGroupHome.getFeatureGroupsList( ).get( 0 ).getId( ) );
378         request.setParameter( "iconUrl", strRandom );
379         request.setParameter( "externalFeature", "false" );
380         request.setParameter( "documentationUrl", strRandom );
381 
382         try
383         {
384             instance.doCreateExternalFeature( request );
385             fail( "Should have thrown" );
386         }
387         catch( AccessDeniedException e )
388         {
389             Right right = RightHome.findByPrimaryKey( strRandom );
390             assertNull( right );
391         }
392         finally
393         {
394             RightHome.remove( strRandom );
395         }
396     }
397 
398     /**
399      * Test of getRemoveExternalFeature method, of class ExternalFeaturesJspBean.
400      */
401     @Test
402     public void testGetRemoveExternalFeature( ) throws AccessDeniedException
403     {
404         MockHttpServletRequest request = new MockHttpServletRequest( );
405         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
406         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
407 
408         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
409         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
410         instance.getRemoveExternalFeature( request );
411         AdminMessage message = AdminMessageService.getMessage( request );
412         assertNotNull( message );
413         assertTrue( message.getRequestParameters( ).containsKey( SecurityTokenService.PARAMETER_TOKEN ) );
414     }
415 
416     /**
417      * Test of doRemoveExternalFeature method, of class ExternalFeaturesJspBean.
418      * 
419      * @throws AccessDeniedException
420      * @throws PasswordResetException
421      */
422     @Test
423     public void testDoRemoveExternalFeature( ) throws PasswordResetException, AccessDeniedException
424     {
425         MockHttpServletRequest request = new MockHttpServletRequest( );
426         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
427         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
428 
429         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
430         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
431         instance.getRemoveExternalFeature( request );
432         request.setParameter( SecurityTokenService.PARAMETER_TOKEN,
433                 SecurityTokenService.getInstance( ).getToken( request, "jsp/admin/features/DoRemoveExternalFeature.jsp" ) );
434         instance.doRemoveExternalFeature( request );
435 
436         Right right = RightHome.findByPrimaryKey( TEST_EXTERNAL_FEATURE_ID );
437         assertNull( right );
438     }
439 
440     public void testDoRemoveExternalFeatureInvalidToken( ) throws PasswordResetException, AccessDeniedException
441     {
442         MockHttpServletRequest request = new MockHttpServletRequest( );
443         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
444         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
445 
446         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
447         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
448         instance.getRemoveExternalFeature( request );
449         request.setParameter( SecurityTokenService.PARAMETER_TOKEN,
450                 SecurityTokenService.getInstance( ).getToken( request, "jsp/admin/features/DoRemoveExternalFeature.jsp" ) + "b" );
451         try
452         {
453             instance.doRemoveExternalFeature( request );
454             fail( "Should have thrown" );
455         }
456         catch( AccessDeniedException e )
457         {
458             Right right = RightHome.findByPrimaryKey( TEST_EXTERNAL_FEATURE_ID );
459             assertNotNull( right );
460         }
461     }
462 
463     public void testDoRemoveExternalFeatureNoToken( ) throws PasswordResetException, AccessDeniedException
464     {
465         MockHttpServletRequest request = new MockHttpServletRequest( );
466         request.addParameter( PARAMETER_ID_EXTERNAL_FEAUTRE, TEST_EXTERNAL_FEATURE_ID );
467         Utils.registerAdminUserWithRigth( request, new AdminUser( ), ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
468 
469         ExternalFeaturesJspBean instance = new ExternalFeaturesJspBean( );
470         instance.init( request, ExternalFeaturesJspBean.RIGHT_EXTERNAL_FEATURES_MANAGEMENT );
471         instance.getRemoveExternalFeature( request );
472 
473         try
474         {
475             instance.doRemoveExternalFeature( request );
476             fail( "Should have thrown" );
477         }
478         catch( AccessDeniedException e )
479         {
480             Right right = RightHome.findByPrimaryKey( TEST_EXTERNAL_FEATURE_ID );
481             assertNotNull( right );
482         }
483     }
484 }