mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-17 23:13:10 +00:00
1037 lines
43 KiB
Java
1037 lines
43 KiB
Java
/**
|
|
* 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.content;
|
|
|
|
import static org.hamcrest.CoreMatchers.equalTo;
|
|
import static org.hamcrest.CoreMatchers.not;
|
|
import static org.hamcrest.CoreMatchers.notNullValue;
|
|
import static org.hamcrest.CoreMatchers.nullValue;
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertFalse;
|
|
import static org.junit.Assert.assertThat;
|
|
import static org.junit.Assert.assertTrue;
|
|
import static org.junit.Assert.fail;
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.ArgumentMatchers.eq;
|
|
import static org.mockito.Mockito.doNothing;
|
|
import static org.mockito.Mockito.doThrow;
|
|
import static org.mockito.Mockito.spy;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.sql.SQLException;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
|
|
import org.apache.logging.log4j.Logger;
|
|
import org.dspace.authorize.AuthorizeException;
|
|
import org.dspace.authorize.factory.AuthorizeServiceFactory;
|
|
import org.dspace.authorize.service.AuthorizeService;
|
|
import org.dspace.content.service.CommunityService;
|
|
import org.dspace.core.Constants;
|
|
import org.dspace.core.Context;
|
|
import org.dspace.eperson.Group;
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.springframework.test.util.ReflectionTestUtils;
|
|
|
|
/**
|
|
* Unit Tests for class Community
|
|
*
|
|
* @author pvillega
|
|
*/
|
|
public class CommunityTest extends AbstractDSpaceObjectTest {
|
|
|
|
/**
|
|
* log4j category
|
|
*/
|
|
private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(CommunityTest.class);
|
|
|
|
/**
|
|
* Community instance for the tests
|
|
*/
|
|
private Community c;
|
|
|
|
/**
|
|
* Spy of AuthorizeService to use for tests
|
|
* (initialized / setup in @Before method)
|
|
*/
|
|
private AuthorizeService authorizeServiceSpy;
|
|
|
|
/**
|
|
* This method will be run before every test as per @Before. It will
|
|
* initialize resources required for the tests.
|
|
*
|
|
* Other methods can be annotated with @Before here or in subclasses
|
|
* but no execution order is guaranteed
|
|
*/
|
|
@Before
|
|
@Override
|
|
public void init() {
|
|
super.init();
|
|
try {
|
|
// we have to create a new community in the database
|
|
// and only Admins can create a top-level community
|
|
context.turnOffAuthorisationSystem();
|
|
this.c = communityService.create(null, context);
|
|
this.dspaceObject = c;
|
|
//we need to commit the changes so we don't block the table for testing
|
|
context.restoreAuthSystemState();
|
|
|
|
// Initialize our spy of the autowired (global) authorizeService bean.
|
|
// This allows us to customize the bean's method return values in tests below
|
|
authorizeServiceSpy = spy(authorizeService);
|
|
// "Wire" our spy to be used by the current loaded object services
|
|
// (To ensure both these services use the spy instead of the real service)
|
|
ReflectionTestUtils.setField(communityService, "authorizeService", authorizeServiceSpy);
|
|
ReflectionTestUtils.setField(collectionService, "authorizeService", authorizeServiceSpy);
|
|
ReflectionTestUtils.setField(itemService, "authorizeService", authorizeServiceSpy);
|
|
// Also wire into current AuthorizeServiceFactory, as that is used for some checks (e.g. AuthorizeUtil)
|
|
ReflectionTestUtils.setField(AuthorizeServiceFactory.getInstance(), "authorizeService",
|
|
authorizeServiceSpy);
|
|
} catch (AuthorizeException ex) {
|
|
log.error("Authorization Error in init", ex);
|
|
fail("Authorization Error in init: " + ex.getMessage());
|
|
} catch (SQLException ex) {
|
|
log.error("SQL Error in init", ex);
|
|
fail("SQL Error in init: " + ex.getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This method will be run after every test as per @After. It will
|
|
* clean resources initialized by the @Before methods.
|
|
*
|
|
* Other methods can be annotated with @After here or in subclasses
|
|
* but no execution order is guaranteed
|
|
*/
|
|
@After
|
|
@Override
|
|
public void destroy() {
|
|
context.turnOffAuthorisationSystem();
|
|
// Delete community created in init()
|
|
try {
|
|
communityService.delete(context, c);
|
|
} catch (Exception e) {
|
|
// ignore
|
|
}
|
|
context.restoreAuthSystemState();
|
|
|
|
c = null;
|
|
super.destroy();
|
|
}
|
|
|
|
/**
|
|
* Test of find method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCommunityFind() throws Exception {
|
|
UUID id = c.getID();
|
|
Community found = communityService.find(context, id);
|
|
assertThat("testCommunityFind 0", found, notNullValue());
|
|
assertThat("testCommunityFind 1", found.getID(), equalTo(id));
|
|
//the community created by default has no name
|
|
assertThat("testCommunityFind 2", found.getName(), equalTo(""));
|
|
}
|
|
|
|
/**
|
|
* Test of create method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCreateAuth() throws Exception {
|
|
// Below settings default to Community-Admin Rights (but not full Admin rights)
|
|
// Allow parent Community ADD perms (needed to just create community)
|
|
when(authorizeServiceSpy.authorizeActionBoolean(context, c, Constants.ADD)).thenReturn(true);
|
|
// Disallow full Admin perms
|
|
when(authorizeServiceSpy.isAdmin(context)).thenReturn(false);
|
|
|
|
// test that a Community Admin can create a Community with parent (Sub-Community)
|
|
Community sub = communityService.create(c, context);
|
|
//the item created by default has no name set
|
|
assertThat("testCreate 2", sub, notNullValue());
|
|
assertThat("testCreate 3", sub.getName(), equalTo(""));
|
|
assertTrue("testCreate 4", communityService.getAllParents(context, sub).size() == 1);
|
|
assertThat("testCreate 5", communityService.getAllParents(context, sub).get(0), equalTo(c));
|
|
}
|
|
|
|
|
|
/**
|
|
* Test of create method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCreateAuth2() throws Exception {
|
|
// Below settings default to Full Admin Rights (but not Community Admin rights)
|
|
// Allow full Admin perms
|
|
when(authorizeServiceSpy.isAdmin(context)).thenReturn(true);
|
|
|
|
//Test that a full Admin can create a Community without a parent (Top-Level Community)
|
|
Community created = communityService.create(null, context);
|
|
//the item created by default has no name set
|
|
assertThat("testCreate 0", created, notNullValue());
|
|
assertThat("testCreate 1", created.getName(), equalTo(""));
|
|
|
|
//Test that a full Admin can also create a Community with a parent (Sub-Community)
|
|
Community son = communityService.create(created, context);
|
|
//the item created by default has no name set
|
|
assertThat("testCreate 2", son, notNullValue());
|
|
assertThat("testCreate 3", son.getName(), equalTo(""));
|
|
assertTrue("testCreate 4", communityService.getAllParents(context, son).size() == 1);
|
|
assertThat("testCreate 5", communityService.getAllParents(context, son).get(0), equalTo(created));
|
|
}
|
|
|
|
/**
|
|
* Test of create method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testCreateNoAuth() throws Exception {
|
|
// Disallow full Admin perms
|
|
when(authorizeServiceSpy.isAdmin(context)).thenReturn(false);
|
|
|
|
// test creating community with no parent (as a non-admin)
|
|
// this should throw an exception
|
|
communityService.create(null, context);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of create method (with specified valid handle), of class Community.
|
|
*/
|
|
@Test
|
|
public void testCreateWithValidHandle() throws Exception {
|
|
// Allow full Admin perms
|
|
when(authorizeServiceSpy.isAdmin(context)).thenReturn(true);
|
|
|
|
// test creating community with a specified handle which is NOT already in use
|
|
// (this handle should not already be used by system, as it doesn't start with "1234567689" prefix)
|
|
Community created = communityService.create(null, context, "987654321/100c");
|
|
|
|
// check that community was created, and that its handle was set to proper value
|
|
assertThat("testCreateWithValidHandle 0", created, notNullValue());
|
|
assertThat("testCreateWithValidHandle 1", created.getHandle(), equalTo("987654321/100c"));
|
|
}
|
|
|
|
|
|
/**
|
|
* Test of create method (with specified invalid handle), of class Community.
|
|
*/
|
|
@Test(expected = IllegalStateException.class)
|
|
public void testCreateWithInvalidHandle() throws Exception {
|
|
// Allow full Admin perms
|
|
when(authorizeServiceSpy.isAdmin(context)).thenReturn(true);
|
|
|
|
//get handle of our default created community
|
|
String inUseHandle = c.getHandle();
|
|
|
|
// test creating community with a specified handle which IS already in use
|
|
// This should throw an exception
|
|
communityService.create(null, context, inUseHandle);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of findAll method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testFindAll() throws Exception {
|
|
List<Community> all = communityService.findAll(context);
|
|
assertThat("testFindAll 0", all, notNullValue());
|
|
assertTrue("testFindAll 1", all.size() >= 1);
|
|
|
|
boolean added = false;
|
|
for (Community cm : all) {
|
|
if (cm.equals(c)) {
|
|
added = true;
|
|
}
|
|
}
|
|
assertTrue("testFindAll 2", added);
|
|
}
|
|
|
|
/**
|
|
* Test of findAllTop method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testFindAllTop() throws Exception {
|
|
List<Community> all = communityService.findAllTop(context);
|
|
assertThat("testFindAllTop 0", all, notNullValue());
|
|
assertTrue("testFindAllTop 1", all.size() >= 1);
|
|
for (Community cm : all) {
|
|
assertThat("testFindAllTop for", communityService.getAllParents(context, cm).size(), equalTo(0));
|
|
}
|
|
|
|
boolean added = false;
|
|
for (Community cm : all) {
|
|
if (cm.equals(c)) {
|
|
added = true;
|
|
}
|
|
}
|
|
assertTrue("testFindAllTop 2", added);
|
|
}
|
|
|
|
/**
|
|
* Test of getID method, of class Community.
|
|
*/
|
|
@Test
|
|
@Override
|
|
public void testGetID() {
|
|
assertTrue("testGetID 0", c.getID() != null);
|
|
}
|
|
|
|
@Test
|
|
public void testLegacyID() {
|
|
assertTrue("testGetLegacyID 0", c.getLegacyId() == null);
|
|
}
|
|
|
|
/**
|
|
* Test of getHandle method, of class Community.
|
|
*/
|
|
@Test
|
|
@Override
|
|
public void testGetHandle() {
|
|
//default instance has a random handle
|
|
assertTrue("testGetHandle 0", c.getHandle().contains("123456789/"));
|
|
}
|
|
|
|
/**
|
|
* Test of setMetadata method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testSetMetadata() throws SQLException {
|
|
String name = "name";
|
|
String sdesc = "short description";
|
|
String itext = "introductory text";
|
|
String copy = "copyright declaration";
|
|
String sidebar = "side bar text";
|
|
|
|
communityService.setMetadata(context, c, "name", name);
|
|
communityService.setMetadata(context, c, "short_description", sdesc);
|
|
communityService.setMetadata(context, c, "introductory_text", itext);
|
|
communityService.setMetadata(context, c, "copyright_text", copy);
|
|
communityService.setMetadata(context, c, "side_bar_text", sidebar);
|
|
|
|
assertEquals("Name not set properly.", name,
|
|
communityService.getMetadataFirstValue(c, CommunityService.MD_NAME, Item.ANY));
|
|
assertEquals("Short description not set properly.", sdesc,
|
|
communityService.getMetadataFirstValue(c, CommunityService.MD_SHORT_DESCRIPTION, Item.ANY));
|
|
assertEquals("Introductory text not set properly.", itext,
|
|
communityService.getMetadataFirstValue(c, CommunityService.MD_INTRODUCTORY_TEXT, Item.ANY));
|
|
assertEquals("Copyright text not set properly.", copy,
|
|
communityService.getMetadataFirstValue(c, CommunityService.MD_COPYRIGHT_TEXT, Item.ANY));
|
|
assertEquals("Sidebar text not set properly.", sidebar,
|
|
communityService.getMetadataFirstValue(c, CommunityService.MD_SIDEBAR_TEXT, Item.ANY));
|
|
}
|
|
|
|
/**
|
|
* Test of getName method, of class Community.
|
|
*/
|
|
@Test
|
|
@Override
|
|
public void testGetName() {
|
|
//by default is empty
|
|
assertThat("testGetName 0", c.getName(), equalTo(""));
|
|
}
|
|
|
|
/**
|
|
* Test of getLogo method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testGetLogo() {
|
|
//by default is empty
|
|
assertThat("testGetLogo 0", c.getLogo(), nullValue());
|
|
}
|
|
|
|
/**
|
|
* Test of setLogo method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testSetLogoAuth() throws Exception {
|
|
// Allow current Community WRITE perms
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.WRITE);
|
|
|
|
File f = new File(testProps.get("test.bitstream").toString());
|
|
Bitstream logo = communityService.setLogo(context, c, new FileInputStream(f));
|
|
assertThat("testSetLogoAuth 0", c.getLogo(), equalTo(logo));
|
|
|
|
c.setLogo(null);
|
|
assertThat("testSetLogoAuth 1", c.getLogo(), nullValue());
|
|
}
|
|
|
|
/**
|
|
* Test of setLogo method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testSetLogoNoAuth() throws Exception {
|
|
// Disallow current Community WRITE perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy).authorizeAction(context, c, Constants.WRITE);
|
|
|
|
File f = new File(testProps.get("test.bitstream").toString());
|
|
communityService.setLogo(context, c, new FileInputStream(f));
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of update method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testUpdateNoAuth() throws Exception {
|
|
// Disallow current Community WRITE perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy).authorizeAction(context, c, Constants.WRITE);
|
|
|
|
//TODO: we need to verify the update, how?
|
|
communityService.update(context, c);
|
|
fail("Exception must be thrown");
|
|
}
|
|
|
|
/**
|
|
* Test of update method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testUpdateAuth() throws Exception {
|
|
// Allow current Community WRITE perms
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.WRITE);
|
|
|
|
//TODO: we need to verify the update, how?
|
|
communityService.update(context, c);
|
|
}
|
|
|
|
/**
|
|
* Test of createAdministrators method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCreateAdministratorsAuth() throws Exception {
|
|
// Allow Community ADMIN perms
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADMIN);
|
|
|
|
Group result = communityService.createAdministrators(context, c);
|
|
assertThat("testCreateAdministratorsAuth 0", c.getAdministrators(), notNullValue());
|
|
assertThat("testCreateAdministratorsAuth 1", c.getAdministrators(), equalTo(result));
|
|
}
|
|
|
|
/**
|
|
* Test of createAdministrators method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testCreateAdministratorsNoAuth() throws Exception {
|
|
communityService.createAdministrators(context, c);
|
|
fail("Exception should have been thrown");
|
|
}
|
|
|
|
|
|
/**
|
|
* Test of removeAdministrators method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testRemoveAdministratorsAuth() throws Exception {
|
|
// Allow Full ADMIN perms (Community Admins cannot delete their Admin Group)
|
|
when(authorizeServiceSpy.isAdmin(context)).thenReturn(true);
|
|
|
|
// Ensure admin group is created first
|
|
context.turnOffAuthorisationSystem();
|
|
Group result = communityService.createAdministrators(context, c);
|
|
context.restoreAuthSystemState();
|
|
|
|
assertThat("testRemoveAdministratorsAuth 0", c.getAdministrators(), notNullValue());
|
|
assertThat("testRemoveAdministratorsAuth 1", c.getAdministrators(), equalTo(result));
|
|
communityService.removeAdministrators(context, c);
|
|
assertThat("testRemoveAdministratorsAuth 2", c.getAdministrators(), nullValue());
|
|
}
|
|
|
|
/**
|
|
* Test of removeAdministrators method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testRemoveAdministratorsNoAuth() throws Exception {
|
|
// Allow Community ADMIN perms (Community Admins cannot delete their Admin Group)
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADMIN);
|
|
|
|
// Ensure admin group is created first
|
|
context.turnOffAuthorisationSystem();
|
|
Group result = communityService.createAdministrators(context, c);
|
|
context.restoreAuthSystemState();
|
|
|
|
assertThat("testRemoveAdministratorsAuth 0", c.getAdministrators(), notNullValue());
|
|
assertThat("testRemoveAdministratorsAuth 1", c.getAdministrators(), equalTo(result));
|
|
communityService.removeAdministrators(context, c);
|
|
fail("Should have thrown exception");
|
|
}
|
|
|
|
/**
|
|
* Test of getAdministrators method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testGetAdministrators() {
|
|
//null by default
|
|
assertThat("testGetAdministrators 0", c.getAdministrators(), nullValue());
|
|
}
|
|
|
|
/**
|
|
* Test of getCollections method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testGetCollections() throws Exception {
|
|
//empty by default
|
|
assertThat("testGetCollections 0", c.getCollections(), notNullValue());
|
|
assertTrue("testGetCollections 1", c.getCollections().size() == 0);
|
|
|
|
context.turnOffAuthorisationSystem();
|
|
Collection collection = collectionService.create(context, c);
|
|
collectionService
|
|
.setMetadataSingleValue(context, collection, MetadataSchemaEnum.DC.getName(),
|
|
"title", null, Item.ANY, "collection B");
|
|
collection = collectionService.create(context, c);
|
|
collectionService
|
|
.setMetadataSingleValue(context, collection, MetadataSchemaEnum.DC.getName(),
|
|
"title", null, Item.ANY, "collection C");
|
|
collection = collectionService.create(context, c);
|
|
collectionService
|
|
.setMetadataSingleValue(context, collection, MetadataSchemaEnum.DC.getName(),
|
|
"title", null, Item.ANY, "collection A");
|
|
//we need to commit the changes so we don't block the table for testing
|
|
context.restoreAuthSystemState();
|
|
|
|
//sorted
|
|
assertTrue("testGetCollections 2", c.getCollections().get(0).getName().equals("collection A"));
|
|
assertTrue("testGetCollections 3", c.getCollections().get(1).getName().equals("collection B"));
|
|
assertTrue("testGetCollections 4", c.getCollections().get(2).getName().equals("collection C"));
|
|
}
|
|
|
|
/**
|
|
* Test of getSubcommunities method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testGetSubcommunities() throws Exception {
|
|
//empty by default
|
|
assertThat("testGetSubcommunities 0", c.getSubcommunities(), notNullValue());
|
|
assertTrue("testGetSubcommunities 1", c.getSubcommunities().size() == 0);
|
|
|
|
context.turnOffAuthorisationSystem();
|
|
Community community = communityService.create(c, context);
|
|
communityService
|
|
.setMetadataSingleValue(context, community, MetadataSchemaEnum.DC.getName(),
|
|
"title", null, Item.ANY, "subcommunity B");
|
|
community = communityService.create(c, context);
|
|
communityService
|
|
.setMetadataSingleValue(context, community, MetadataSchemaEnum.DC.getName(),
|
|
"title", null, Item.ANY, "subcommunity A");
|
|
community = communityService.create(c, context);
|
|
communityService
|
|
.setMetadataSingleValue(context, community, MetadataSchemaEnum.DC.getName(),
|
|
"title", null, Item.ANY, "subcommunity C");
|
|
//we need to commit the changes so we don't block the table for testing
|
|
context.restoreAuthSystemState();
|
|
|
|
//get Subcommunities sorted
|
|
assertTrue("testGetCollections 2", c.getSubcommunities().get(0).getName().equals("subcommunity A"));
|
|
assertTrue("testGetCollections 3", c.getSubcommunities().get(1).getName().equals("subcommunity B"));
|
|
assertTrue("testGetCollections 4", c.getSubcommunities().get(2).getName().equals("subcommunity C"));
|
|
}
|
|
|
|
/**
|
|
* Test of getParentCommunity method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testGetParentCommunity() throws Exception {
|
|
//null by default
|
|
assertThat("testGetParentCommunity 0", c.getParentCommunities().size(), equalTo(0));
|
|
|
|
//community with parent
|
|
context.turnOffAuthorisationSystem();
|
|
Community son = communityService.create(c, context);
|
|
context.restoreAuthSystemState();
|
|
assertThat("testGetParentCommunity 1", son.getParentCommunities().size(), not(0));
|
|
assertThat("testGetParentCommunity 2", son.getParentCommunities().get(0), equalTo(c));
|
|
}
|
|
|
|
/**
|
|
* Test of getAllParents method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testGetAllParents() throws Exception {
|
|
//empty by default
|
|
assertThat("testGetAllParents 0", communityService.getAllParents(context, c), notNullValue());
|
|
assertTrue("testGetAllParents 1", communityService.getAllParents(context, c).size() == 0);
|
|
|
|
//community with parent
|
|
context.turnOffAuthorisationSystem();
|
|
Community son = communityService.create(c, context);
|
|
context.restoreAuthSystemState();
|
|
assertThat("testGetAllParents 2", communityService.getAllParents(context, son), notNullValue());
|
|
assertTrue("testGetAllParents 3", communityService.getAllParents(context, son).size() == 1);
|
|
assertThat("testGetAllParents 4", communityService.getAllParents(context, son).get(0), equalTo(c));
|
|
}
|
|
|
|
/**
|
|
* Test of getAllCollections method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testGetAllCollections() throws Exception {
|
|
//empty by default
|
|
assertThat("testGetAllCollections 0", communityService.getAllCollections(context, c), notNullValue());
|
|
assertTrue("testGetAllCollections 1", communityService.getAllCollections(context, c).isEmpty());
|
|
|
|
//community has a collection and a subcommunity, subcommunity has a collection
|
|
context.turnOffAuthorisationSystem();
|
|
Collection collOfC = collectionService.create(context, c);
|
|
Community sub = communityService.create(c, context);
|
|
Collection collOfSub = collectionService.create(context, sub);
|
|
context.restoreAuthSystemState();
|
|
assertThat("testGetAllCollections 2", communityService.getAllCollections(context, c), notNullValue());
|
|
assertTrue("testGetAllCollections 3", communityService.getAllCollections(context, c).size() == 2);
|
|
assertThat("testGetAllCollections 4", communityService.getAllCollections(context, c).get(0),
|
|
equalTo(collOfSub));
|
|
assertThat("testGetAllCollections 5", communityService.getAllCollections(context, c).get(1), equalTo(collOfC));
|
|
}
|
|
|
|
/**
|
|
* Test of createCollection method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCreateCollectionAuth() throws Exception {
|
|
// Allow current Community ADD perms
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADD);
|
|
|
|
Collection result = collectionService.create(context, c);
|
|
assertThat("testCreateCollectionAuth 0", result, notNullValue());
|
|
assertThat("testCreateCollectionAuth 1", c.getCollections(), notNullValue());
|
|
assertThat("testCreateCollectionAuth 2", c.getCollections().get(0), equalTo(result));
|
|
}
|
|
|
|
/**
|
|
* Test of createCollection method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testCreateCollectionNoAuth() throws Exception {
|
|
// Disallow current Community ADD perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADD);
|
|
|
|
collectionService.create(context, c);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of addCollection method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testAddCollectionAuth() throws Exception {
|
|
// Allow current Community ADD perms
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADD);
|
|
|
|
Collection col = collectionService.create(context, c);
|
|
c.addCollection(col);
|
|
assertThat("testAddCollectionAuth 0", c.getCollections(), notNullValue());
|
|
assertThat("testAddCollectionAuth 1", c.getCollections().get(0), equalTo(col));
|
|
}
|
|
|
|
/**
|
|
* Test of addCollection method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testAddCollectionNoAuth() throws Exception {
|
|
// Disallow current Community ADD perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADD);
|
|
|
|
Collection col = collectionService.create(context, c);
|
|
c.addCollection(col);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of createSubcommunity method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCreateSubcommunityAuth() throws Exception {
|
|
// Allow current Community ADD perms
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADD);
|
|
// Allow parent Community ADD perms
|
|
when(authorizeServiceSpy.authorizeActionBoolean(context, c, Constants.ADD)).thenReturn(true);
|
|
|
|
Community result = communityService.createSubcommunity(context, c);
|
|
assertThat("testCreateSubcommunityAuth 0", c.getSubcommunities(), notNullValue());
|
|
assertTrue("testCreateSubcommunityAuth 1", c.getSubcommunities().size() == 1);
|
|
assertThat("testCreateSubcommunityAuth 2", c.getSubcommunities().get(0), equalTo(result));
|
|
}
|
|
|
|
/**
|
|
* Test of createSubcommunity method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testCreateSubcommunityNoAuth() throws Exception {
|
|
// Disallow current Community ADD perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADD);
|
|
|
|
communityService.createSubcommunity(context, c);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of addSubcommunity method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testAddSubcommunityAuth() throws Exception {
|
|
// Allow current Community ADD perms
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.ADD);
|
|
|
|
// Turn off authorization temporarily to create a new top-level community
|
|
context.turnOffAuthorisationSystem();
|
|
Community result = communityService.create(null, context);
|
|
context.restoreAuthSystemState();
|
|
|
|
communityService.addSubcommunity(context, c, result);
|
|
assertThat("testAddSubcommunityAuth 0", c.getSubcommunities(), notNullValue());
|
|
assertTrue("testAddSubcommunityAuth 1", c.getSubcommunities().size() == 1);
|
|
assertThat("testAddSubcommunityAuth 2", c.getSubcommunities().get(0), equalTo(result));
|
|
}
|
|
|
|
/**
|
|
* Test of addSubcommunity method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testAddSubcommunityNoAuth() throws Exception {
|
|
// Turn off authorization temporarily to create a new top-level community
|
|
context.turnOffAuthorisationSystem();
|
|
Community result = communityService.create(null, context);
|
|
context.restoreAuthSystemState();
|
|
|
|
communityService.addSubcommunity(context, c, result);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of removeCollection method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testRemoveCollectionAuth() throws Exception {
|
|
// Turn off authorization temporarily to create a new Collection
|
|
context.turnOffAuthorisationSystem();
|
|
Collection col = collectionService.create(context, c);
|
|
context.restoreAuthSystemState();
|
|
assertThat("testRemoveCollectionAuth 0", c.getCollections(), notNullValue());
|
|
assertTrue("testRemoveCollectionAuth 1", c.getCollections().size() == 1);
|
|
assertThat("testRemoveCollectionAuth 2", c.getCollections().get(0), equalTo(col));
|
|
|
|
// Allow current Community REMOVE perms (to remove Collection from Community & delete)
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.REMOVE);
|
|
// Allow collection WRITE perms (needed to remove Logo before Collection can be deleted)
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, col, Constants.WRITE,true);
|
|
// Allow current Community ADMIN perms (to remove Collection from Community & delete)
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, col, Constants.ADMIN);
|
|
|
|
// Note that this will *also* delete the collection (hence the extra permissions provided above)
|
|
communityService.removeCollection(context, c, col);
|
|
assertThat("testRemoveCollectionAuth 3", c.getCollections(), notNullValue());
|
|
assertTrue("testRemoveCollectionAuth 4", c.getCollections().size() == 0);
|
|
}
|
|
|
|
/**
|
|
* Test of removeCollection method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testRemoveCollectionNoAuth() throws Exception {
|
|
// Disallow current Community REMOVE perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy).authorizeAction(context, c, Constants.REMOVE);
|
|
|
|
// Turn off authorization temporarily to create a new Collection
|
|
context.turnOffAuthorisationSystem();
|
|
Collection col = collectionService.create(context, c);
|
|
context.restoreAuthSystemState();
|
|
assertThat("testRemoveCollectionNoAuth 0", c.getCollections(), notNullValue());
|
|
assertTrue("testRemoveCollectionNoAuth 1", c.getCollections().size() == 1);
|
|
assertThat("testRemoveCollectionNoAuth 2", c.getCollections().get(0), equalTo(col));
|
|
|
|
communityService.removeCollection(context, c, col);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of removeSubcommunity method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testRemoveSubcommunityAuth() throws Exception {
|
|
// Allow current Community ADD perms (in order to add a new subcommunity to parent)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.ADD), eq(true));
|
|
// Allow current Community REMOVE perms (needed to unmap/remove subcommunity)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.REMOVE), eq(true));
|
|
// Allow current Community REMOVE perms (needed to actually delete subcommunity)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.DELETE), eq(true));
|
|
|
|
// Turn off authorization temporarily to create a new top-level community
|
|
context.turnOffAuthorisationSystem();
|
|
Community com = communityService.create(null, context);
|
|
context.restoreAuthSystemState();
|
|
|
|
communityService.addSubcommunity(context, c, com);
|
|
assertThat("testRemoveSubcommunityAuth 0", c.getSubcommunities(), notNullValue());
|
|
assertTrue("testRemoveSubcommunityAuth 1", c.getSubcommunities().size() == 1);
|
|
assertThat("testRemoveSubcommunityAuth 2", c.getSubcommunities().get(0), equalTo(com));
|
|
|
|
communityService.removeSubcommunity(context, c, com);
|
|
assertThat("testRemoveSubcommunityAuth 3", c.getSubcommunities(), notNullValue());
|
|
assertTrue("testRemoveSubcommunityAuth 4", c.getSubcommunities().size() == 0);
|
|
}
|
|
|
|
/**
|
|
* Test of delete method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testDeleteAuth() throws Exception {
|
|
// Allow current Community WRITE perms (to create content to be deleted)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.WRITE));
|
|
// Allow current Community DELETE perms (needed to delete community)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.DELETE));
|
|
|
|
// Turn off authorization temporarily to create a new top-level community
|
|
context.turnOffAuthorisationSystem();
|
|
Community todelete = communityService.create(null, context);
|
|
context.restoreAuthSystemState();
|
|
|
|
// Now, test deletion
|
|
UUID id = todelete.getID();
|
|
communityService.delete(context, todelete);
|
|
Community found = communityService.find(context, id);
|
|
assertThat("testDeleteAuth 0", found, nullValue());
|
|
}
|
|
|
|
/**
|
|
* Test of delete method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testDeleteAuth2() throws Exception {
|
|
// Allow current Community WRITE perms
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.WRITE));
|
|
// Allow current Community DELETE perms (needed to delete community)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.DELETE));
|
|
|
|
// Turn off authorization temporarily to create a new top-level community
|
|
context.turnOffAuthorisationSystem();
|
|
Community todelete = communityService.create(null, context);
|
|
context.restoreAuthSystemState();
|
|
|
|
// Now, test deletion
|
|
UUID id = todelete.getID();
|
|
communityService.delete(context, todelete);
|
|
Community found = communityService.find(context, id);
|
|
assertThat("testDeleteAuth2 0", found, nullValue());
|
|
}
|
|
|
|
/**
|
|
* Test of delete method, of class Community, using a hierarchy of Communities and Collections.
|
|
*/
|
|
@Test
|
|
public void testDeleteHierachyAuth() throws Exception {
|
|
// Allow current Community DELETE perms (needed to delete a community)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.DELETE), eq(true));
|
|
// Allow current Community REMOVE perms (needed to remove a sub-community from a community)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class), eq(Constants.REMOVE), eq(true));
|
|
// Allow current Collection DELETE perms (needed to delete a Collection)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Collection.class), eq(Constants.DELETE), eq(true));
|
|
// Allow current Collection ADMIN perms (needed to delete a Collection)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Collection.class), eq(Constants.ADMIN));
|
|
// Allow current Item WRITE perms (needed to remove identifiers from an Item prior to deletion)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Item.class), eq(Constants.WRITE), eq(true));
|
|
// Allow current Item DELETE perms (needed to delete Item)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Item.class), eq(Constants.DELETE), eq(true));
|
|
// Allow current Item REMOVE perms (needed to delete Item)
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Item.class), eq(Constants.REMOVE), eq(true));
|
|
|
|
// Create a dummy Community hierarchy to test delete with
|
|
// Turn off authorization temporarily to create some test objects.
|
|
context.turnOffAuthorisationSystem();
|
|
Community parent = communityService.create(null, context);
|
|
|
|
// Create a hierachy of sub-Communities and Collections and Items.
|
|
Community child = communityService.createSubcommunity(context, parent);
|
|
Community grandchild = communityService.createSubcommunity(context, child);
|
|
Collection childCol = collectionService.create(context, child);
|
|
Collection grandchildCol = collectionService.create(context, grandchild);
|
|
// Create two separate items
|
|
WorkspaceItem wsItem = workspaceItemService.create(context, childCol, false);
|
|
Item item = installItemService.installItem(context, wsItem);
|
|
wsItem = workspaceItemService.create(context, grandchildCol, false);
|
|
Item item2 = installItemService.installItem(context, wsItem);
|
|
|
|
// Done creating the objects. Turn auth system back on
|
|
context.restoreAuthSystemState();
|
|
|
|
// Now, test hierarchical deletion
|
|
UUID parentId = parent.getID();
|
|
UUID childId = child.getID();
|
|
UUID grandchildId = grandchild.getID();
|
|
UUID childColId = childCol.getID();
|
|
UUID grandchildColId = grandchildCol.getID();
|
|
UUID itemId = item.getID();
|
|
UUID item2Id = item2.getID();
|
|
|
|
// Delete the parent of this entire hierarchy
|
|
communityService.delete(context, parent);
|
|
|
|
// Test that everything created here is deleted.
|
|
assertThat("top-level Community not deleted",
|
|
communityService.find(context, parentId), nullValue());
|
|
assertThat("child Community not deleted",
|
|
communityService.find(context, childId), nullValue());
|
|
assertThat("grandchild Community not deleted",
|
|
communityService.find(context, grandchildId), nullValue());
|
|
assertThat("Collection of child Community not deleted",
|
|
collectionService.find(context, childColId), nullValue());
|
|
assertThat("Collection of grandchild Community not deleted",
|
|
collectionService.find(context, grandchildColId), nullValue());
|
|
assertThat("Item not deleted",
|
|
itemService.find(context, itemId), nullValue());
|
|
assertThat("Item not deleted",
|
|
itemService.find(context, item2Id), nullValue());
|
|
}
|
|
|
|
/**
|
|
* Test of delete method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testDeleteNoAuth() throws Exception {
|
|
// Disallow current Community DELETE perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy)
|
|
.authorizeAction(any(Context.class), any(Community.class),
|
|
eq(Constants.DELETE));
|
|
|
|
communityService.delete(context, c);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of equals method, of class Community.
|
|
*/
|
|
@Test
|
|
@SuppressWarnings("ObjectEqualsNull")
|
|
public void testEquals() throws SQLException, AuthorizeException {
|
|
// Allow full Admin perms (just to create top-level community)
|
|
when(authorizeServiceSpy.isAdmin(context)).thenReturn(true);
|
|
|
|
assertFalse("testEquals 0", c.equals(null));
|
|
assertFalse("testEquals 1", c.equals(communityService.create(null, context)));
|
|
assertTrue("testEquals 2", c.equals(c));
|
|
}
|
|
|
|
/**
|
|
* Test of getType method, of class Community.
|
|
*/
|
|
@Test
|
|
@Override
|
|
public void testGetType() {
|
|
assertThat("testGetType 0", c.getType(), equalTo(Constants.COMMUNITY));
|
|
}
|
|
|
|
/**
|
|
* Test of canEditBoolean method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCanEditBooleanAuth() throws Exception {
|
|
// Allow current Community WRITE perms
|
|
doNothing().when(authorizeServiceSpy)
|
|
.authorizeAction(context, c, Constants.WRITE);
|
|
|
|
assertTrue("testCanEditBooleanAuth 0", communityService.canEditBoolean(context, c));
|
|
}
|
|
|
|
/**
|
|
* Test of canEditBoolean method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCanEditBooleanNoAuth() throws Exception {
|
|
// Disallow current Community WRITE perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy).authorizeAction(context, c, Constants.WRITE);
|
|
|
|
assertFalse("testCanEditBooleanNoAuth 0", communityService.canEditBoolean(context, c));
|
|
}
|
|
|
|
/**
|
|
* Test of canEdit method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCanEditAuth() throws Exception {
|
|
// Allow current Community WRITE perms
|
|
doNothing().when(authorizeServiceSpy).authorizeAction(context, c, Constants.WRITE);
|
|
|
|
communityService.canEdit(context, c);
|
|
}
|
|
|
|
/**
|
|
* Test of canEdit method, of class Community.
|
|
*/
|
|
@Test(expected = AuthorizeException.class)
|
|
public void testCanEditNoAuth() throws Exception {
|
|
// Disallow current Community WRITE perms
|
|
doThrow(new AuthorizeException()).when(authorizeServiceSpy).authorizeAction(context, c,Constants.WRITE);
|
|
|
|
communityService.canEdit(context, c);
|
|
fail("Exception expected");
|
|
}
|
|
|
|
/**
|
|
* Test of countItems method, of class Community.
|
|
*/
|
|
@Test
|
|
public void testCountItems() throws Exception {
|
|
//0 by default
|
|
assertTrue("testCountItems 0", itemService.countItems(context, c) == 0);
|
|
|
|
//NOTE: a more thorough test of item counting is in ITCommunityCollection integration test
|
|
}
|
|
|
|
/**
|
|
* Test of getAdminObject method, of class Community.
|
|
*/
|
|
@Test
|
|
@Override
|
|
public void testGetAdminObject() throws SQLException {
|
|
//default community has no admin object
|
|
assertThat("testGetAdminObject 0", (Community) communityService.getAdminObject(context, c, Constants.REMOVE),
|
|
equalTo(c));
|
|
assertThat("testGetAdminObject 1", (Community) communityService.getAdminObject(context, c, Constants.ADD),
|
|
equalTo(c));
|
|
assertThat("testGetAdminObject 2", (Community) communityService.getAdminObject(context, c, Constants.DELETE),
|
|
equalTo(c));
|
|
assertThat("testGetAdminObject 3", (Community) communityService.getAdminObject(context, c, Constants.ADMIN),
|
|
equalTo(c));
|
|
}
|
|
|
|
/**
|
|
* Test of getParentObject method, of class Community.
|
|
*/
|
|
@Test
|
|
@Override
|
|
public void testGetParentObject() throws SQLException {
|
|
try {
|
|
//default has no parent
|
|
assertThat("testGetParentObject 0", communityService.getParentObject(context, c), nullValue());
|
|
|
|
context.turnOffAuthorisationSystem();
|
|
Community son = communityService.createSubcommunity(context, c);
|
|
context.restoreAuthSystemState();
|
|
assertThat("testGetParentObject 1", communityService.getParentObject(context, son), notNullValue());
|
|
assertThat("testGetParentObject 2", (Community) communityService.getParentObject(context, son), equalTo(c));
|
|
} catch (AuthorizeException ex) {
|
|
throw new AssertionError("AuthorizeException occurred", ex);
|
|
}
|
|
}
|
|
|
|
}
|