mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-18 15:33:09 +00:00
DS-3572: Adding simple unit test for DS-3572.
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
/**
|
||||
* 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.authorize;
|
||||
|
||||
import org.dspace.AbstractUnitTest;
|
||||
import org.dspace.authorize.factory.AuthorizeServiceFactory;
|
||||
import org.dspace.authorize.service.ResourcePolicyService;
|
||||
import org.dspace.content.Community;
|
||||
import org.dspace.content.factory.ContentServiceFactory;
|
||||
import org.dspace.content.service.CommunityService;
|
||||
import org.dspace.core.Constants;
|
||||
import org.dspace.eperson.EPerson;
|
||||
import org.dspace.eperson.Group;
|
||||
import org.dspace.eperson.factory.EPersonServiceFactory;
|
||||
import org.dspace.eperson.service.EPersonService;
|
||||
import org.dspace.eperson.service.GroupService;
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* Created by pbecker as he wanted to write a test against DS-3572.
|
||||
* This definitely needs to be extended, but it's at least a start.
|
||||
*/
|
||||
public class AuthorizeServiceTest extends AbstractUnitTest
|
||||
{
|
||||
|
||||
protected EPersonService ePersonService = EPersonServiceFactory.getInstance().getEPersonService();
|
||||
protected GroupService groupService = EPersonServiceFactory.getInstance().getGroupService();
|
||||
protected ResourcePolicyService resourcePolicyService = AuthorizeServiceFactory.getInstance().getResourcePolicyService();
|
||||
protected CommunityService communityService = ContentServiceFactory.getInstance().getCommunityService();
|
||||
|
||||
public AuthorizeServiceTest()
|
||||
{}
|
||||
|
||||
@Test
|
||||
public void testauthorizeMethodDoesNotConfuseEPersonWithCurrentUser()
|
||||
{
|
||||
Community dso;
|
||||
EPerson eperson1;
|
||||
EPerson eperson2;
|
||||
Group group;
|
||||
|
||||
try
|
||||
{
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
// create two epersons: one to test a permission the other one to be used as currentUser
|
||||
eperson1 = ePersonService.create(context);
|
||||
eperson2 = ePersonService.create(context);
|
||||
// create a group as the bug described in DS-3572 contains a wrong group membership check
|
||||
group = groupService.create(context);
|
||||
// add eperson1 to the group.
|
||||
groupService.addMember(context, group, eperson1);
|
||||
groupService.update(context, group);
|
||||
|
||||
// Use a top level community as DSpaceObject to test permissions
|
||||
dso = communityService.create(null, context);
|
||||
|
||||
// grant write permission to the eperson1 by its group membership
|
||||
authorizeService.addPolicy(context, dso, Constants.WRITE, group);
|
||||
context.commit();
|
||||
|
||||
// set the other eperson as the current user
|
||||
// Notice that it is not a member of the group, and does not have write permission
|
||||
context.setCurrentUser(eperson2);
|
||||
}
|
||||
catch (SQLException | AuthorizeException ex)
|
||||
{
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
context.restoreAuthSystemState();
|
||||
}
|
||||
|
||||
try {
|
||||
// eperson1 should be able to write as he is member of a group that has write permissions
|
||||
Assert.assertTrue(authorizeService.authorizeActionBoolean(context, eperson1, dso, Constants.WRITE, true));
|
||||
// person2 shouldn't have write access
|
||||
Assert.assertFalse(authorizeService.authorizeActionBoolean(context, eperson2, dso, Constants.WRITE, true));
|
||||
}
|
||||
catch (SQLException ex)
|
||||
{
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testauthorizeMethodRespectSpecialGroups()
|
||||
{
|
||||
|
||||
EPerson eperson1;
|
||||
EPerson eperson2;
|
||||
Group group1;
|
||||
|
||||
Community dso;
|
||||
try
|
||||
{
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
// create an eperson and a group
|
||||
eperson1 = ePersonService.create(context);
|
||||
group1 = groupService.create(context);
|
||||
|
||||
// Use a top level community as DSpaceObject to test permissions
|
||||
dso = communityService.create(null, context);
|
||||
|
||||
// allow the group some action on a DSpaceObject and set it as
|
||||
// special group to the user. Then test if the action on the DSO
|
||||
// is allowed for the user
|
||||
authorizeService.addPolicy(context, dso, Constants.ADD, group1);
|
||||
context.setCurrentUser(eperson1);
|
||||
context.setSpecialGroup(group1.getID());
|
||||
context.commit();
|
||||
}
|
||||
catch (SQLException | AuthorizeException ex)
|
||||
{
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
context.restoreAuthSystemState();
|
||||
}
|
||||
|
||||
try {
|
||||
Assert.assertTrue(authorizeService.authorizeActionBoolean(context, eperson1, dso, Constants.ADD, true));
|
||||
}
|
||||
catch (SQLException ex)
|
||||
{
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user