mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-18 15:33:09 +00:00
Add test for the AuthorizationFeatureService
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
/**
|
||||
* The contents of this file are subject to the license and copyright
|
||||
* detailed in the LICENSE and NOTICE files at the root of the source
|
||||
* tree and available online at
|
||||
*
|
||||
* http://www.dspace.org/license/
|
||||
*/
|
||||
package org.dspace.app.rest;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.greaterThan;
|
||||
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.dspace.app.rest.authorization.AlwaysFalseFeature;
|
||||
import org.dspace.app.rest.authorization.AlwaysThrowExceptionFeature;
|
||||
import org.dspace.app.rest.authorization.AlwaysTrueFeature;
|
||||
import org.dspace.app.rest.authorization.AuthorizationFeature;
|
||||
import org.dspace.app.rest.authorization.AuthorizationFeatureService;
|
||||
import org.dspace.app.rest.authorization.TrueForAdminsFeature;
|
||||
import org.dspace.app.rest.converter.ConverterService;
|
||||
import org.dspace.app.rest.model.CollectionRest;
|
||||
import org.dspace.app.rest.model.SiteRest;
|
||||
import org.dspace.app.rest.projection.DefaultProjection;
|
||||
import org.dspace.app.rest.test.AbstractIntegrationTestWithDatabase;
|
||||
import org.dspace.app.rest.utils.DSpaceConfigurationInitializer;
|
||||
import org.dspace.app.rest.utils.DSpaceKernelInitializer;
|
||||
import org.dspace.content.Site;
|
||||
import org.dspace.content.service.SiteService;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.context.web.WebAppConfiguration;
|
||||
|
||||
/**
|
||||
* Test for the Authorization Feature Service
|
||||
*
|
||||
* @author Andrea Bollini (andrea.bollini at 4science.it)
|
||||
*
|
||||
*/
|
||||
//Run tests with JUnit 4 and Spring TestContext Framework
|
||||
@RunWith(SpringRunner.class)
|
||||
//Specify main class to use to load Spring ApplicationContext
|
||||
//NOTE: By default, Spring caches and reuses ApplicationContext for each integration test (to speed up tests)
|
||||
//See: https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#integration-testing
|
||||
@SpringBootTest(classes = Application.class)
|
||||
//Load DSpace initializers in Spring ApplicationContext (to initialize DSpace Kernel & Configuration)
|
||||
@ContextConfiguration(initializers = { DSpaceKernelInitializer.class, DSpaceConfigurationInitializer.class })
|
||||
//Tell Spring to make ApplicationContext an instance of WebApplicationContext (for web-based tests)
|
||||
@WebAppConfiguration
|
||||
public class AuthorizationFeatureServiceIT extends AbstractIntegrationTestWithDatabase {
|
||||
@Autowired
|
||||
private SiteService siteService;
|
||||
|
||||
@Autowired
|
||||
private ConverterService converterService;
|
||||
|
||||
@Autowired
|
||||
private AuthorizationFeatureService authzFeatureService;
|
||||
|
||||
@Test
|
||||
/**
|
||||
* All the features available in the Sprint Context should be returned
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public void findAllTest() throws Exception {
|
||||
List<AuthorizationFeature> authzFeatureServiceFindAll = authzFeatureService.findAll();
|
||||
|
||||
assertThat("We have at least our 7 mock features for testing",
|
||||
authzFeatureServiceFindAll.size(), greaterThanOrEqualTo(7));
|
||||
|
||||
Set<String> featureNames = new HashSet<String>();
|
||||
for (AuthorizationFeature f : authzFeatureServiceFindAll) {
|
||||
featureNames.add(f.getName());
|
||||
}
|
||||
|
||||
assertThat("all the features must have unique name", authzFeatureServiceFindAll.size(),
|
||||
equalTo(featureNames.size()));
|
||||
}
|
||||
|
||||
@Test
|
||||
/**
|
||||
* The find method should return existing feature and null in the case the feature doesn't exist
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public void findTest() throws Exception {
|
||||
AuthorizationFeature aFeature = authzFeatureService.find(AlwaysTrueFeature.NAME);
|
||||
assertThat("check that one of our mock feature is retrieved", aFeature.getName(),
|
||||
equalTo(AlwaysTrueFeature.NAME));
|
||||
|
||||
AuthorizationFeature aNotExistingFeature = authzFeatureService.find("this feature doesn't exist!");
|
||||
assertThat("check that not existing feature name return null", aNotExistingFeature, equalTo(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
/**
|
||||
* The findByResourceType must return only features that support the specified type
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public void findByResourceTypeTest() throws Exception {
|
||||
// we have at least one feature that support the Site object
|
||||
final String siteUniqueType = SiteRest.CATEGORY + "." + SiteRest.NAME;
|
||||
List<AuthorizationFeature> siteFeatures = authzFeatureService.findByResourceType(siteUniqueType);
|
||||
assertThat(siteFeatures.size(), greaterThan(0));
|
||||
boolean alwaysTrueFound = false;
|
||||
for (AuthorizationFeature f : siteFeatures) {
|
||||
assertThat(ArrayUtils.contains(f.getSupportedTypes(), siteUniqueType), equalTo(true));
|
||||
alwaysTrueFound = alwaysTrueFound || AlwaysTrueFeature.NAME.equals(f.getName());
|
||||
}
|
||||
assertThat(alwaysTrueFound, equalTo(true));
|
||||
|
||||
// we can check that the AlwaysTrueFeature is returned also when searching for a
|
||||
// type other than the Site (that is the first type supported by the feature)
|
||||
alwaysTrueFound = false;
|
||||
final String collectionUniqueType = CollectionRest.CATEGORY + "." + CollectionRest.NAME;
|
||||
List<AuthorizationFeature> collectionFeatures = authzFeatureService.findByResourceType(collectionUniqueType);
|
||||
for (AuthorizationFeature f : collectionFeatures) {
|
||||
assertThat(ArrayUtils.contains(f.getSupportedTypes(), collectionUniqueType), equalTo(true));
|
||||
alwaysTrueFound = alwaysTrueFound || AlwaysTrueFeature.NAME.equals(f.getName());
|
||||
}
|
||||
|
||||
// finally check that not existing type will return an empty list
|
||||
final List<AuthorizationFeature> notExistingTypeFeatures = authzFeatureService
|
||||
.findByResourceType("NOT-EXISTING-TYPE");
|
||||
assertThat(notExistingTypeFeatures.size(), equalTo(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
/**
|
||||
* The isAuthorized must return true for authorized feature and false for not authorized feature
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public void isAuthorizedTest() throws Exception {
|
||||
Site site = siteService.findSite(context);
|
||||
SiteRest siteRest = converterService.toRest(site, DefaultProjection.DEFAULT);
|
||||
|
||||
AuthorizationFeature alwaysTrue = authzFeatureService.find(AlwaysTrueFeature.NAME);
|
||||
AuthorizationFeature alwaysFalse = authzFeatureService.find(AlwaysFalseFeature.NAME);
|
||||
AuthorizationFeature alwaysThrowEx = authzFeatureService.find(AlwaysThrowExceptionFeature.NAME);
|
||||
AuthorizationFeature trueForAdmins = authzFeatureService.find(TrueForAdminsFeature.NAME);
|
||||
|
||||
assertThat(authzFeatureService.isAuthorized(context, alwaysTrue, siteRest), equalTo(true));
|
||||
assertThat(authzFeatureService.isAuthorized(context, alwaysFalse, siteRest), equalTo(false));
|
||||
try {
|
||||
authzFeatureService.isAuthorized(context, alwaysThrowEx, siteRest);
|
||||
// this code should be not run as the previous one throw an exception that we expect to be re-thrown
|
||||
assertThat("the exception has been not re-thrown!", false, equalTo(true));
|
||||
} catch (Exception ex) {
|
||||
// if this code is executed the exception was re-thrown
|
||||
assertThat("exceptions are rethrown", true, equalTo(true));
|
||||
}
|
||||
assertThat(authzFeatureService.isAuthorized(context, trueForAdmins, siteRest), equalTo(false));
|
||||
// login our admin
|
||||
context.setCurrentUser(admin);
|
||||
assertThat(authzFeatureService.isAuthorized(context, trueForAdmins, siteRest), equalTo(true));
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user